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