1/* 2 * Copyright 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.internal.telephony; 18 19import static org.junit.Assert.assertEquals; 20import static org.junit.Assert.assertNotNull; 21import static org.junit.Assert.assertNull; 22 23import org.junit.Test; 24 25import java.util.GregorianCalendar; 26import java.util.TimeZone; 27import java.util.concurrent.TimeUnit; 28 29public class NitzDataTest { 30 31 @Test 32 public void testParse_dateOutsideAllowedRange() { 33 assertNull(NitzData.parse("38/06/20,00:00:00+0")); 34 } 35 36 @Test 37 public void testParse_missingRequiredFields() { 38 // "yy/mm/dd,hh:mm:ss(+/-)tz[,dt[,tzid]]" 39 40 // No tz field. 41 assertNull(NitzData.parse("38/06/20,00:00:00")); 42 } 43 44 @Test 45 public void testParse_withDst() { 46 // "yy/mm/dd,hh:mm:ss(+/-)tz[,dt[,tzid]]" 47 // tz, dt are in number of quarter-hours 48 { 49 NitzData nitz = NitzData.parse("15/06/20,01:02:03-1,0"); 50 assertEquals(createUtcTime(2015, 6, 20, 1, 2, 3), nitz.getCurrentTimeInMillis()); 51 assertEquals(TimeUnit.MINUTES.toMillis(-1 * 15), nitz.getLocalOffsetMillis()); 52 assertEquals(0, nitz.getDstAdjustmentMillis().longValue()); 53 assertNull(nitz.getEmulatorHostTimeZone()); 54 } 55 { 56 NitzData nitz = NitzData.parse("15/06/20,01:02:03+8,4"); 57 assertEquals(createUtcTime(2015, 6, 20, 1, 2, 3), nitz.getCurrentTimeInMillis()); 58 assertEquals(TimeUnit.MINUTES.toMillis(8 * 15), nitz.getLocalOffsetMillis()); 59 assertEquals(TimeUnit.MINUTES.toMillis(4 * 15), 60 nitz.getDstAdjustmentMillis().longValue()); 61 assertNull(nitz.getEmulatorHostTimeZone()); 62 } 63 { 64 NitzData nitz = NitzData.parse("15/06/20,01:02:03-8,4"); 65 assertEquals(createUtcTime(2015, 6, 20, 1, 2, 3), nitz.getCurrentTimeInMillis()); 66 assertEquals(TimeUnit.MINUTES.toMillis(-8 * 15), nitz.getLocalOffsetMillis()); 67 assertEquals(TimeUnit.MINUTES.toMillis(4 * 15), 68 nitz.getDstAdjustmentMillis().longValue()); 69 assertNull(nitz.getEmulatorHostTimeZone()); 70 } 71 } 72 73 @Test 74 public void testParse_noDstField() { 75 { 76 NitzData nitz = NitzData.parse("15/06/20,01:02:03+4"); 77 assertEquals(createUtcTime(2015, 6, 20, 1, 2, 3), nitz.getCurrentTimeInMillis()); 78 assertEquals(TimeUnit.MINUTES.toMillis(4 * 15), nitz.getLocalOffsetMillis()); 79 assertNull(nitz.getDstAdjustmentMillis()); 80 assertNull(nitz.getEmulatorHostTimeZone()); 81 } 82 { 83 NitzData nitz = NitzData.parse("15/06/20,01:02:03-4"); 84 assertEquals(createUtcTime(2015, 6, 20, 1, 2, 3), nitz.getCurrentTimeInMillis()); 85 assertEquals(TimeUnit.MINUTES.toMillis(-4 * 15), nitz.getLocalOffsetMillis()); 86 assertNull(nitz.getDstAdjustmentMillis()); 87 assertNull(nitz.getEmulatorHostTimeZone()); 88 } 89 } 90 91 @Test 92 public void testParse_androidEmulatorTimeZoneExtension() { 93 NitzData nitz = NitzData.parse("15/06/20,01:02:03-32,4,America!Los_Angeles"); 94 assertEquals(createUtcTime(2015, 6, 20, 1, 2, 3), nitz.getCurrentTimeInMillis()); 95 assertEquals(TimeUnit.MINUTES.toMillis(-32 * 15), nitz.getLocalOffsetMillis()); 96 assertEquals(TimeUnit.MINUTES.toMillis(4 * 15), 97 nitz.getDstAdjustmentMillis().longValue()); 98 assertEquals("America/Los_Angeles", nitz.getEmulatorHostTimeZone().getID()); 99 } 100 101 @Test 102 public void testToString() { 103 assertNotNull(NitzData.parse("15/06/20,01:02:03-32").toString()); 104 assertNotNull(NitzData.parse("15/06/20,01:02:03-32,4").toString()); 105 assertNotNull(NitzData.parse("15/06/20,01:02:03-32,4,America!Los_Angeles") 106 .toString()); 107 } 108 109 private static long createUtcTime( 110 int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minute, int second) { 111 GregorianCalendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC")); 112 calendar.clear(); // Clear millis, etc. 113 calendar.set(year, monthOfYear - 1, dayOfMonth, hourOfDay, minute, second); 114 return calendar.getTimeInMillis(); 115 } 116} 117