]> source.dussan.org Git - poi.git/commitdiff
bug 59805: add unit test for LocaleUtil#getLocaleCalendar
authorJaven O'Neal <onealj@apache.org>
Wed, 6 Jul 2016 08:52:40 +0000 (08:52 +0000)
committerJaven O'Neal <onealj@apache.org>
Wed, 6 Jul 2016 08:52:40 +0000 (08:52 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1751629 13f79535-47bb-0310-9956-ffa450edef68

src/testcases/org/apache/poi/util/TestLocaleUtil.java

index 6a1a762827d73c73d28aa4cc6754eea6ff6b251a..ddd3cab7a82f8ee6a5cbb1ec0e8a02216f76a781 100644 (file)
@@ -20,20 +20,35 @@ package org.apache.poi.util;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
 
+import java.util.Calendar;
 import java.util.Locale;
 import java.util.TimeZone;
 
+import org.junit.Before;
 import org.junit.Test;
 
 
 public class TestLocaleUtil {
     private static final Locale ja_JP = Locale.JAPAN;
     private static final TimeZone TOKYO = TimeZone.getTimeZone("Asia/Tokyo");
+    private static final Calendar JAPAN_CALENDAR = Calendar.getInstance(TOKYO, ja_JP);
+    
+    @Before
+    public void setUp() {
+        // clear the user locale and time zone so that tests do not interfere with each other
+        // the other way and better way would be to run each test in its own thread since
+        // LocaleUtil uses per-thread settings.
+        // Helpful, but not ASL 2.0 licensed:
+        // http://www.codeaffine.com/2014/07/21/a-junit-rule-to-run-a-test-in-its-own-thread/
+        LocaleUtil.setUserLocale(Locale.GERMANY);
+        LocaleUtil.setUserTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
+    }
     
     @Test
     @SuppressForbidden("implementation around default locales in POI")
     public void userLocale() {
         Locale DEFAULT_LOCALE = LocaleUtil.getUserLocale();
+        
         assertEquals(DEFAULT_LOCALE, LocaleUtil.getUserLocale());
         assertNotEquals(ja_JP, LocaleUtil.getUserLocale());
         
@@ -52,4 +67,33 @@ public class TestLocaleUtil {
         LocaleUtil.setUserTimeZone(TOKYO);
         assertEquals(TOKYO, LocaleUtil.getUserTimeZone());
     }
+    
+    @Test
+    @SuppressForbidden("implementation around default locales in POI")
+    public void localeCalendar() {
+        Locale DEFAULT_LOCALE = LocaleUtil.getUserLocale();
+        TimeZone DEFAULT_TIME_ZONE = LocaleUtil.getUserTimeZone();
+        Calendar DEFAULT_CALENDAR = LocaleUtil.getLocaleCalendar();
+        
+        assertEquals(DEFAULT_LOCALE, LocaleUtil.getUserLocale());
+        assertEquals(DEFAULT_TIME_ZONE, LocaleUtil.getUserTimeZone());
+        assertCalendarEquals(DEFAULT_CALENDAR, LocaleUtil.getLocaleCalendar());
+        assertNotEquals(ja_JP, LocaleUtil.getUserLocale());
+        assertNotEquals(TOKYO, LocaleUtil.getUserTimeZone());
+        assertCalendarNotEquals(JAPAN_CALENDAR, LocaleUtil.getLocaleCalendar());
+        
+        LocaleUtil.setUserLocale(ja_JP);
+        LocaleUtil.setUserTimeZone(TOKYO);
+        assertCalendarEquals(JAPAN_CALENDAR, LocaleUtil.getLocaleCalendar());
+        // FIXME: These might affect the time zone due to daylight savings:
+        //assertCalendarEquals(JAPAN_CALENDAR, LocaleUtil.getLocaleCalendar(2016, 01, 01));
+        //assertCalendarEquals(JAPAN_CALENDAR, LocaleUtil.getLocaleCalendar(2016, 01, 01, 00, 00, 00));
+    }
+    
+    private static void assertCalendarNotEquals(Calendar expected, Calendar actual) {
+        assertNotEquals("time zone", expected.getTimeZone(), actual.getTimeZone());
+    }
+    private static void assertCalendarEquals(Calendar expected, Calendar actual) {
+        assertEquals("time zone", expected.getTimeZone(), actual.getTimeZone());
+    }
 }