1 /* 2 * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 /* 27 * Copyright (c) 2008-2012, Stephen Colebourne & Michael Nascimento Santos 28 * 29 * All rights reserved. 30 * 31 * Redistribution and use in source and binary forms, with or without 32 * modification, are permitted provided that the following conditions are met: 33 * 34 * * Redistributions of source code must retain the above copyright notice, 35 * this list of conditions and the following disclaimer. 36 * 37 * * Redistributions in binary form must reproduce the above copyright notice, 38 * this list of conditions and the following disclaimer in the documentation 39 * and/or other materials provided with the distribution. 40 * 41 * * Neither the name of JSR-310 nor the names of its contributors 42 * may be used to endorse or promote products derived from this software 43 * without specific prior written permission. 44 * 45 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 46 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 47 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 48 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 49 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 50 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 51 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 52 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 53 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 54 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 55 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 56 */ 57 58 package test.java.time.chrono; 59 60 import static org.testng.Assert.assertEquals; 61 62 import java.time.LocalTime; 63 import java.time.chrono.ChronoLocalDate; 64 import java.time.chrono.ChronoLocalDateTime; 65 import java.time.chrono.Chronology; 66 import java.time.chrono.HijrahDate; 67 import java.time.chrono.ThaiBuddhistDate; 68 import java.time.temporal.ChronoField; 69 import java.time.temporal.ChronoUnit; 70 import java.util.Locale; 71 import java.util.Set; 72 73 import org.testng.annotations.DataProvider; 74 import org.testng.annotations.Test; 75 76 /** 77 * Test case verify that the example code in the package-info.java compiles 78 * and runs. 79 */ 80 public class TestExampleCode { 81 82 @Test 83 public void test_chronoPackageExample() { 84 // Print the Thai Buddhist date 85 ChronoLocalDate<?> now1 = Chronology.of("ThaiBuddhist").dateNow(); 86 int day = now1.get(ChronoField.DAY_OF_MONTH); 87 int dow = now1.get(ChronoField.DAY_OF_WEEK); 88 int month = now1.get(ChronoField.MONTH_OF_YEAR); 89 int year = now1.get(ChronoField.YEAR); 90 System.out.printf(" Today is %s %s %d-%s-%d%n", now1.getChronology().getId(), 91 dow, day, month, year); 92 93 // Enumerate the list of available calendars and print today for each 94 Set<Chronology> chronos = Chronology.getAvailableChronologies(); 95 for (Chronology chrono : chronos) { 96 ChronoLocalDate<?> date = chrono.dateNow(); 97 System.out.printf(" %20s: %s%n", chrono.getId(), date.toString()); 98 } 99 100 // Print today's date and the last day of the year for the Thai Buddhist Calendar. 101 ChronoLocalDate<?> first = now1 102 .with(ChronoField.DAY_OF_MONTH, 1) 103 .with(ChronoField.MONTH_OF_YEAR, 1); 104 ChronoLocalDate<?> last = first 105 .plus(1, ChronoUnit.YEARS) 106 .minus(1, ChronoUnit.DAYS); 107 System.out.printf(" %s: 1st of year: %s; end of year: %s%n", last.getChronology().getId(), 108 first, last); 109 } 110 111 //----------------------------------------------------------------------- 112 // Data provider for Hijrah Variant names 113 //----------------------------------------------------------------------- 114 @DataProvider(name = "HijrahVariantNames") 115 Object[][] data_of_ummalqura() { 116 return new Object[][]{ 117 { "Hijrah-umalqura", "islamic", "umalqura"}, 118 }; 119 } 120 121 @Test(dataProvider= "HijrahVariantNames") 122 public void test_HijrahVariantViaLocale(String calendarId, String calendarType, String variant) { 123 Locale.Builder builder = new Locale.Builder(); 124 builder.setLanguage("en").setRegion("US"); 125 builder.setUnicodeLocaleKeyword("ca", calendarType); 126 builder.setUnicodeLocaleKeyword("cv", variant); 127 Locale locale = builder.build(); 128 Chronology chrono = Chronology.ofLocale(locale); 129 System.out.printf(" Locale language tag: %s, Chronology ID: %s, type: %s%n", 130 locale.toLanguageTag(), chrono, chrono.getCalendarType()); 131 Chronology expected = Chronology.of(calendarId); 132 assertEquals(chrono, expected, "Expected chronology not found"); 133 } 134 135 @Test 136 public void test_calendarPackageExample() { 137 138 // Enumerate the list of available calendars and print today for each 139 Set<Chronology> chronos = Chronology.getAvailableChronologies(); 140 for (Chronology chrono : chronos) { 141 ChronoLocalDate<?> date = chrono.dateNow(); 142 System.out.printf(" %20s: %s%n", chrono.getId(), date.toString()); 143 } 144 145 // Print the Thai Buddhist date 146 ThaiBuddhistDate now1 = ThaiBuddhistDate.now(); 147 int day = now1.get(ChronoField.DAY_OF_MONTH); 148 int dow = now1.get(ChronoField.DAY_OF_WEEK); 149 int month = now1.get(ChronoField.MONTH_OF_YEAR); 150 int year = now1.get(ChronoField.YEAR); 151 System.out.printf(" Today is %s %s %d-%s-%d%n", now1.getChronology().getId(), 152 dow, day, month, year); 153 154 // Print today's date and the last day of the year for the Thai Buddhist Calendar. 155 ThaiBuddhistDate first = now1 156 .with(ChronoField.DAY_OF_MONTH, 1) 157 .with(ChronoField.MONTH_OF_YEAR, 1); 158 ThaiBuddhistDate last = first 159 .plus(1, ChronoUnit.YEARS) 160 .minus(1, ChronoUnit.DAYS); 161 System.out.printf(" %s: 1st of year: %s; end of year: %s%n", last.getChronology().getId(), 162 first, last); 163 } 164 165 @Test 166 public void test_library() { 167 HijrahDate date = HijrahDate.now(); 168 HijrahDate next = next(date); 169 ChronoLocalDateTime<HijrahDate> noonTomorrow = tomorrowNoon(date); 170 System.out.printf(" now: %s, noon tomorrow: %s%n", date, noonTomorrow); 171 } 172 173 /** 174 * Simple function based on a date, returning a ChronoDate of the same type. 175 * @param <D> a parameterized ChronoLocalDate 176 * @param date a specific date extending ChronoLocalDate 177 * @return a new date in the same chronology. 178 */ 179 private <D extends ChronoLocalDate<D>> D next(D date) { 180 return date.plus(1, ChronoUnit.DAYS); 181 } 182 183 /** 184 * Simple function based on a date, returning a ChronoLocalDateTime of the 185 * same chronology. 186 * @param <D> a parameterized ChronoLocalDate 187 * @param date a specific date extending ChronoLocalDate 188 * @return a [@code ChronoLocalDateTime<D>} using the change chronology. 189 */ 190 private <D extends ChronoLocalDate<D>> ChronoLocalDateTime<D> tomorrowNoon(D date) { 191 return date.plus(1, ChronoUnit.DAYS).atTime(LocalTime.of(12, 0)); 192 } 193 }