]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_8_1_1/main/tests/core/src/com/ibm/icu/dev/test/duration/PeriodBuilderFactoryTest.java
Added flags.
[Dictionary.git] / jars / icu4j-4_8_1_1 / main / tests / core / src / com / ibm / icu / dev / test / duration / PeriodBuilderFactoryTest.java
1 /*
2 ******************************************************************************
3 * Copyright (C) 2007-2011, International Business Machines Corporation and   *
4 * others. All Rights Reserved.                                               *
5 ******************************************************************************
6 */
7
8 // Copyright 2007 Google Inc.  All Rights Reserved.
9
10 package com.ibm.icu.dev.test.duration;
11
12 import com.ibm.icu.dev.test.TestFmwk;
13 import com.ibm.icu.impl.duration.BasicPeriodFormatterService;
14 import com.ibm.icu.impl.duration.Period;
15 import com.ibm.icu.impl.duration.PeriodBuilder;
16 import com.ibm.icu.impl.duration.PeriodBuilderFactory;
17 import com.ibm.icu.impl.duration.TimeUnit;
18 import com.ibm.icu.impl.duration.TimeUnitConstants;
19
20 public class PeriodBuilderFactoryTest extends TestFmwk implements TimeUnitConstants {
21     private PeriodBuilderFactory pbf;
22
23     private static final long[] approxDurations = {
24       36525L*24*60*60*10, 3045*24*60*60*10L, 7*24*60*60*1000L, 24*60*60*1000L, 
25       60*60*1000L, 60*1000L, 1000L, 1L
26     };
27     
28     /**
29      * Invoke the tests.
30      */
31     public static void main(String[] args) {
32         new PeriodBuilderFactoryTest().run(args);
33     }
34
35     public void testSetAvailableUnitRange() {
36         // sanity check, make sure by default all units are set
37         pbf = BasicPeriodFormatterService.getInstance().newPeriodBuilderFactory();
38         pbf.setLocale("en"); // in en locale, all units always available
39         PeriodBuilder b = pbf.getSingleUnitBuilder();
40         for (TimeUnit unit = YEAR; unit != null; unit = unit.smaller()) {
41             Period p = b.create((long)(approxDurations[unit.ordinal()]*2.5));
42             assertTrue(null, p.isSet(unit));
43         }
44
45         pbf.setAvailableUnitRange(MINUTE, MONTH);
46         // units that are not available are never set
47         b = pbf.getSingleUnitBuilder();
48         for (TimeUnit unit = YEAR; unit != null; unit = unit.smaller()) {
49             Period p = b.create((long)(approxDurations[unit.ordinal()]*2.5));
50             assertEquals(null, p.isSet(unit), unit.ordinal() >= MONTH.ordinal() && unit.ordinal() <= MINUTE.ordinal());
51         }
52
53         // fixed unit builder returns null when unit is not available
54         for (TimeUnit unit = YEAR; unit != null; unit = unit.smaller()) {
55             b = pbf.getFixedUnitBuilder(unit);
56             if (unit.ordinal() >= MONTH.ordinal() && unit.ordinal() <= MINUTE.ordinal()) {
57                 assertNotNull(null, b);
58             } else {
59                 assertNull(null, b);
60             }
61         }
62
63         // can't set empty range
64         try {
65             pbf.setAvailableUnitRange(MONTH, MINUTE);
66             fail("set empty range");
67         } catch (IllegalArgumentException e) {
68             // pass
69         }
70     }
71
72     public void testSetUnitIsAvailable() {
73         pbf = BasicPeriodFormatterService.getInstance().newPeriodBuilderFactory();
74         pbf.setAvailableUnitRange(MONTH, MONTH);
75         assertNotNull(null, pbf.getSingleUnitBuilder());
76         assertNotNull(null, pbf.getOneOrTwoUnitBuilder());
77         assertNotNull(null, pbf.getMultiUnitBuilder(2));
78
79         // now no units are available, make sure we can't generate a builder
80         pbf.setUnitIsAvailable(MONTH, false);
81         assertNull(null, pbf.getSingleUnitBuilder());
82         assertNull(null, pbf.getOneOrTwoUnitBuilder());
83         assertNull(null, pbf.getMultiUnitBuilder(2));
84
85         pbf.setUnitIsAvailable(DAY, true);
86         assertNotNull(null, pbf.getSingleUnitBuilder());
87         assertNotNull(null, pbf.getOneOrTwoUnitBuilder());
88         assertNotNull(null, pbf.getMultiUnitBuilder(2));
89     }
90     
91     public void testBuilderFactoryPeriodConstruction() {
92         // see ticket #8307
93         pbf = BasicPeriodFormatterService.getInstance().newPeriodBuilderFactory();
94         pbf.setAvailableUnitRange(SECOND, DAY);
95         PeriodBuilder pb = pbf.getOneOrTwoUnitBuilder();
96         long H1M35S30M100 = 100 + 1000 * (30 + 35 * 60 + 1 * 60 * 60);
97         Period p = pb.create(H1M35S30M100);
98         assertEquals("hours", 1.0f, p.getCount(HOUR));
99         assertEquals("minutes", 35.501f, p.getCount(MINUTE));
100         assertFalse("seconds", p.isSet(SECOND));
101         
102         pb = pbf.getMultiUnitBuilder(3);
103         p = pb.create(H1M35S30M100);
104         assertEquals("hours", 1.0f, p.getCount(HOUR));
105         assertEquals("minutes", 35f, p.getCount(MINUTE));
106         assertEquals("seconds", 30.1f, p.getCount(SECOND));
107         assertFalse("millis", p.isSet(MILLISECOND));
108     }
109 }