1aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/* GENERATED SOURCE. DO NOT MODIFY. */
2f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// © 2016 and later: Unicode, Inc. and others.
3f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License
4aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/*
5aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin******************************************************************************
6aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin* Copyright (C) 2007-2011, International Business Machines Corporation and   *
7aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin* others. All Rights Reserved.                                               *
8aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin******************************************************************************
9aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin*/
10aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
11aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// Copyright 2007 Google Inc.  All Rights Reserved.
12aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
13aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinpackage android.icu.dev.test.duration;
14aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
15f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubertimport org.junit.Test;
1605fa7802d0874812c234a29745586677ee5837eaFredrik Roubertimport org.junit.runner.RunWith;
1705fa7802d0874812c234a29745586677ee5837eaFredrik Roubertimport org.junit.runners.JUnit4;
18f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
19aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.dev.test.TestFmwk;
20aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.impl.duration.BasicPeriodFormatterService;
21aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.impl.duration.Period;
22aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.impl.duration.PeriodBuilder;
23aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.impl.duration.PeriodBuilderFactory;
24aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.impl.duration.TimeUnit;
25aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.impl.duration.TimeUnitConstants;
262e13a2bdade5cd0a635f0bd89805931a6fd710daPete Gillinimport android.icu.testsharding.MainTestShard;
27aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
282e13a2bdade5cd0a635f0bd89805931a6fd710daPete Gillin@MainTestShard
2905fa7802d0874812c234a29745586677ee5837eaFredrik Roubert@RunWith(JUnit4.class)
30aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinpublic class PeriodBuilderFactoryTest extends TestFmwk implements TimeUnitConstants {
31aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    private PeriodBuilderFactory pbf;
32aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
33aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    private static final long[] approxDurations = {
3405fa7802d0874812c234a29745586677ee5837eaFredrik Roubert      36525L*24*60*60*10, 3045*24*60*60*10L, 7*24*60*60*1000L, 24*60*60*1000L,
35aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin      60*60*1000L, 60*1000L, 1000L, 1L
36aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    };
3705fa7802d0874812c234a29745586677ee5837eaFredrik Roubert
38f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
39aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void testSetAvailableUnitRange() {
40aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        // sanity check, make sure by default all units are set
41aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pbf = BasicPeriodFormatterService.getInstance().newPeriodBuilderFactory();
42aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pbf.setLocale("en"); // in en locale, all units always available
43aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        PeriodBuilder b = pbf.getSingleUnitBuilder();
44aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        for (TimeUnit unit = YEAR; unit != null; unit = unit.smaller()) {
45aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            Period p = b.create((long)(approxDurations[unit.ordinal()]*2.5));
46aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            assertTrue(null, p.isSet(unit));
47aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
48aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
49aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pbf.setAvailableUnitRange(MINUTE, MONTH);
50aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        // units that are not available are never set
51aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        b = pbf.getSingleUnitBuilder();
52aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        for (TimeUnit unit = YEAR; unit != null; unit = unit.smaller()) {
53aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            Period p = b.create((long)(approxDurations[unit.ordinal()]*2.5));
54aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            assertEquals(null, p.isSet(unit), unit.ordinal() >= MONTH.ordinal() && unit.ordinal() <= MINUTE.ordinal());
55aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
56aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
57aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        // fixed unit builder returns null when unit is not available
58aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        for (TimeUnit unit = YEAR; unit != null; unit = unit.smaller()) {
59aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            b = pbf.getFixedUnitBuilder(unit);
60aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            if (unit.ordinal() >= MONTH.ordinal() && unit.ordinal() <= MINUTE.ordinal()) {
61aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                assertNotNull(null, b);
62aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            } else {
63aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                assertNull(null, b);
64aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
65aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
66aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
67aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        // can't set empty range
68aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
69aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            pbf.setAvailableUnitRange(MONTH, MINUTE);
70aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            fail("set empty range");
71aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (IllegalArgumentException e) {
72aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            // pass
73aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
74aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
75aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
76f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
77aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void testSetUnitIsAvailable() {
78aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pbf = BasicPeriodFormatterService.getInstance().newPeriodBuilderFactory();
79aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pbf.setAvailableUnitRange(MONTH, MONTH);
80aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertNotNull(null, pbf.getSingleUnitBuilder());
81aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertNotNull(null, pbf.getOneOrTwoUnitBuilder());
82aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertNotNull(null, pbf.getMultiUnitBuilder(2));
83aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
84aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        // now no units are available, make sure we can't generate a builder
85aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pbf.setUnitIsAvailable(MONTH, false);
86aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertNull(null, pbf.getSingleUnitBuilder());
87aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertNull(null, pbf.getOneOrTwoUnitBuilder());
88aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertNull(null, pbf.getMultiUnitBuilder(2));
89aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
90aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pbf.setUnitIsAvailable(DAY, true);
91aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertNotNull(null, pbf.getSingleUnitBuilder());
92aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertNotNull(null, pbf.getOneOrTwoUnitBuilder());
93aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertNotNull(null, pbf.getMultiUnitBuilder(2));
94aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
9505fa7802d0874812c234a29745586677ee5837eaFredrik Roubert
96f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
97aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void testBuilderFactoryPeriodConstruction() {
98aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        // see ticket #8307
99aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pbf = BasicPeriodFormatterService.getInstance().newPeriodBuilderFactory();
100aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pbf.setAvailableUnitRange(SECOND, DAY);
101aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        PeriodBuilder pb = pbf.getOneOrTwoUnitBuilder();
102aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        long H1M35S30M100 = 100 + 1000 * (30 + 35 * 60 + 1 * 60 * 60);
103aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        Period p = pb.create(H1M35S30M100);
104aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertEquals("hours", 1.0f, p.getCount(HOUR));
105aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertEquals("minutes", 35.501f, p.getCount(MINUTE));
106aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertFalse("seconds", p.isSet(SECOND));
10705fa7802d0874812c234a29745586677ee5837eaFredrik Roubert
108aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pb = pbf.getMultiUnitBuilder(3);
109aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = pb.create(H1M35S30M100);
110aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertEquals("hours", 1.0f, p.getCount(HOUR));
111aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertEquals("minutes", 35f, p.getCount(MINUTE));
112aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertEquals("seconds", 30.1f, p.getCount(SECOND));
113aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertFalse("millis", p.isSet(MILLISECOND));
114aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
115aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin}
116