1// © 2016 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html#License
3/*
4******************************************************************************
5* Copyright (C) 2007-2010, International Business Machines Corporation and   *
6* others. All Rights Reserved.                                               *
7******************************************************************************
8*/
9
10// Copyright 2006 Google Inc.  All Rights Reserved.
11
12package com.ibm.icu.dev.test.duration;
13
14import org.junit.Test;
15
16import com.ibm.icu.dev.test.TestFmwk;
17import com.ibm.icu.impl.duration.Period;
18import com.ibm.icu.impl.duration.TimeUnit;
19
20public class PeriodTest extends TestFmwk {
21    @Test
22    public void testIsSet() {
23        Period p = Period.at(0, TimeUnit.YEAR);
24        assertTrue(null, p.isSet());
25        assertTrue(null, p.isSet(TimeUnit.YEAR));
26        assertFalse(null, p.isSet(TimeUnit.MONTH));
27        assertEquals(null, 0f, p.getCount(TimeUnit.YEAR), .1f);
28        p = p.omit(TimeUnit.YEAR);
29        assertFalse(null, p.isSet(TimeUnit.YEAR));
30    }
31
32    @Test
33    public void testMoreLessThan() {
34        Period p = Period.moreThan(1, TimeUnit.YEAR);
35        assertTrue(null, p.isMoreThan());
36        assertFalse(null, p.isLessThan());
37        p = p.at();
38        assertFalse(null, p.isMoreThan());
39        assertFalse(null, p.isLessThan());
40        p = p.lessThan();
41        assertFalse(null, p.isMoreThan());
42        assertTrue(null, p.isLessThan());
43        p = p.moreThan();
44        assertTrue(null, p.isMoreThan());
45        assertFalse(null, p.isLessThan());
46
47        p = Period.lessThan(1, TimeUnit.YEAR);
48        assertFalse(null, p.isMoreThan());
49        assertTrue(null, p.isLessThan());
50
51        p = Period.at(1, TimeUnit.YEAR);
52        assertFalse(null, p.isMoreThan());
53        assertFalse(null, p.isLessThan());
54
55        assertEquals(null, 1f, p.getCount(TimeUnit.YEAR), .1f);
56    }
57
58    @Test
59    public void testFuturePast() {
60        Period p = Period.at(1, TimeUnit.YEAR).inFuture();
61        assertTrue(null, p.isInFuture());
62        p = p.inPast();
63        assertFalse(null, p.isInFuture());
64        p = p.inFuture(true);
65        assertTrue(null, p.isInFuture());
66        p = p.inFuture(false);
67        assertFalse(null, p.isInFuture());
68    }
69
70    @Test
71    public void testAnd() {
72        Period p = Period.at(1, TimeUnit.YEAR).and(3, TimeUnit.MONTH)
73                .inFuture();
74        assertTrue(null, p.isSet(TimeUnit.YEAR));
75        assertTrue(null, p.isSet(TimeUnit.MONTH));
76        assertEquals(null, 3f, p.getCount(TimeUnit.MONTH), .1f);
77        p = p.and(2, TimeUnit.MONTH);
78        assertEquals(null, 2f, p.getCount(TimeUnit.MONTH), .1f);
79    }
80
81    @Test
82    public void testInvalidCount() {
83        try {
84            Period.at(-1, TimeUnit.YEAR);
85            fail("at -1");
86        } catch (IllegalArgumentException e) {
87            // passed
88        }
89        try {
90            Period.moreThan(-1, TimeUnit.YEAR);
91            fail("moreThan -1");
92        } catch (IllegalArgumentException e) {
93            // passed
94        }
95        try {
96            Period.lessThan(-1, TimeUnit.YEAR);
97            fail("lessThan -1");
98        } catch (IllegalArgumentException e) {
99            // passed
100        }
101        Period p = Period.at(1, TimeUnit.YEAR);
102        try {
103            p = p.and(-1, TimeUnit.MONTH);
104            fail("and -1");
105        } catch (IllegalArgumentException e) {
106            // passed
107        }
108    }
109}
110