2 ******************************************************************************
\r
3 * Copyright (C) 2007-2010, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 ******************************************************************************
\r
8 // Copyright 2007 Google Inc. All Rights Reserved.
\r
10 package com.ibm.icu.dev.test.duration;
\r
12 import com.ibm.icu.dev.test.TestFmwk;
\r
13 import com.ibm.icu.impl.duration.BasicPeriodFormatterService;
\r
14 import com.ibm.icu.impl.duration.Period;
\r
15 import com.ibm.icu.impl.duration.PeriodBuilder;
\r
16 import com.ibm.icu.impl.duration.PeriodBuilderFactory;
\r
17 import com.ibm.icu.impl.duration.TimeUnit;
\r
18 import com.ibm.icu.impl.duration.TimeUnitConstants;
\r
20 public class PeriodBuilderFactoryTest extends TestFmwk implements TimeUnitConstants {
\r
21 private PeriodBuilderFactory pbf;
\r
23 private static final long[] approxDurations = {
\r
24 36525L*24*60*60*10, 3045*24*60*60*10L, 7*24*60*60*1000L, 24*60*60*1000L,
\r
25 60*60*1000L, 60*1000L, 1000L, 1L
\r
31 public static void main(String[] args) {
\r
32 new PeriodBuilderFactoryTest().run(args);
\r
35 public void testSetAvailableUnitRange() {
\r
36 // sanity check, make sure by default all units are set
\r
37 pbf = BasicPeriodFormatterService.getInstance().newPeriodBuilderFactory();
\r
38 pbf.setLocale("en"); // in en locale, all units always available
\r
39 PeriodBuilder b = pbf.getSingleUnitBuilder();
\r
40 for (TimeUnit unit = YEAR; unit != null; unit = unit.smaller()) {
\r
41 Period p = b.create((long)(approxDurations[unit.ordinal()]*2.5));
\r
42 assertTrue(null, p.isSet(unit));
\r
45 pbf.setAvailableUnitRange(MINUTE, MONTH);
\r
46 // units that are not available are never set
\r
47 b = pbf.getSingleUnitBuilder();
\r
48 for (TimeUnit unit = YEAR; unit != null; unit = unit.smaller()) {
\r
49 Period p = b.create((long)(approxDurations[unit.ordinal()]*2.5));
\r
50 assertEquals(null, p.isSet(unit), unit.ordinal() >= MONTH.ordinal() && unit.ordinal() <= MINUTE.ordinal());
\r
53 // fixed unit builder returns null when unit is not available
\r
54 for (TimeUnit unit = YEAR; unit != null; unit = unit.smaller()) {
\r
55 b = pbf.getFixedUnitBuilder(unit);
\r
56 if (unit.ordinal() >= MONTH.ordinal() && unit.ordinal() <= MINUTE.ordinal()) {
\r
57 assertNotNull(null, b);
\r
59 assertNull(null, b);
\r
63 // can't set empty range
\r
65 pbf.setAvailableUnitRange(MONTH, MINUTE);
\r
66 fail("set empty range");
\r
67 } catch (IllegalArgumentException e) {
\r
72 public void testSetUnitIsAvailable() {
\r
73 pbf = BasicPeriodFormatterService.getInstance().newPeriodBuilderFactory();
\r
74 pbf.setAvailableUnitRange(MONTH, MONTH);
\r
75 assertNotNull(null, pbf.getSingleUnitBuilder());
\r
76 assertNotNull(null, pbf.getOneOrTwoUnitBuilder());
\r
77 assertNotNull(null, pbf.getMultiUnitBuilder(2));
\r
79 // now no units are available, make sure we can't generate a builder
\r
80 pbf.setUnitIsAvailable(MONTH, false);
\r
81 assertNull(null, pbf.getSingleUnitBuilder());
\r
82 assertNull(null, pbf.getOneOrTwoUnitBuilder());
\r
83 assertNull(null, pbf.getMultiUnitBuilder(2));
\r
85 pbf.setUnitIsAvailable(DAY, true);
\r
86 assertNotNull(null, pbf.getSingleUnitBuilder());
\r
87 assertNotNull(null, pbf.getOneOrTwoUnitBuilder());
\r
88 assertNotNull(null, pbf.getMultiUnitBuilder(2));
\r