/* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package libcore.util; import java.io.File; import java.io.FileOutputStream; import java.io.RandomAccessFile; import java.util.TimeZone; public class ZoneInfoDBTest extends junit.framework.TestCase { private static final String CURRENT_VERSION = ZoneInfoDB.getInstance().getVersion(); private static final String DEFAULT_FILE = System.getenv("ANDROID_ROOT") + "/usr/share/zoneinfo/tzdata"; // An empty override file should fall back to the default file. public void testEmptyOverrideFile() throws Exception { ZoneInfoDB.TzData data = new ZoneInfoDB.TzData(makeEmptyFile(), DEFAULT_FILE); assertEquals(CURRENT_VERSION, data.getVersion()); assertEquals(TimeZone.getAvailableIDs().length, data.getAvailableIDs().length); } // A corrupt override file should fall back to the default file. public void testCorruptOverrideFile() throws Exception { ZoneInfoDB.TzData data = new ZoneInfoDB.TzData(makeCorruptFile(), DEFAULT_FILE); assertEquals(CURRENT_VERSION, data.getVersion()); assertEquals(TimeZone.getAvailableIDs().length, data.getAvailableIDs().length); } // Given no tzdata files we can use, we should fall back to built-in "GMT". public void testNoGoodFile() throws Exception { ZoneInfoDB.TzData data = new ZoneInfoDB.TzData(makeEmptyFile()); assertEquals("missing", data.getVersion()); assertEquals(1, data.getAvailableIDs().length); assertEquals("GMT", data.getAvailableIDs()[0]); } // Given a valid override file, we should find ourselves using that. public void testGoodOverrideFile() throws Exception { RandomAccessFile in = new RandomAccessFile(DEFAULT_FILE, "r"); byte[] content = new byte[(int) in.length()]; in.readFully(content); content[6] = '9'; content[7] = '9'; content[8] = '9'; content[9] = '9'; content[10] = 'z'; in.close(); String goodFile = makeTemporaryFile(content); try { ZoneInfoDB.TzData data = new ZoneInfoDB.TzData(goodFile, DEFAULT_FILE); assertEquals("9999z", data.getVersion()); assertEquals(TimeZone.getAvailableIDs().length, data.getAvailableIDs().length); } finally { new File(goodFile).delete(); } } private static String makeCorruptFile() throws Exception { return makeTemporaryFile("invalid content".getBytes()); } private static String makeEmptyFile() throws Exception { return makeTemporaryFile(new byte[0]); } private static String makeTemporaryFile(byte[] content) throws Exception { File f = File.createTempFile("temp-", ".txt"); FileOutputStream fos = new FileOutputStream(f); fos.write(content); fos.close(); return f.getPath(); } }