1b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov/** 211a89b445f3bde56bf07e6a0d04f0b0256dcb215Andrey Somov * Copyright (c) 2008, http://www.snakeyaml.org 3b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov * 4b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov * Licensed under the Apache License, Version 2.0 (the "License"); 5b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov * you may not use this file except in compliance with the License. 6b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov * You may obtain a copy of the License at 7b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov * 8b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov * http://www.apache.org/licenses/LICENSE-2.0 9b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov * 10b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov * Unless required by applicable law or agreed to in writing, software 11b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov * distributed under the License is distributed on an "AS IS" BASIS, 12b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov * See the License for the specific language governing permissions and 14b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov * limitations under the License. 15b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov */ 16b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somovpackage org.yaml.snakeyaml.issues.issue49; 17b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov 18b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somovimport java.util.Calendar; 19b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somovimport java.util.Date; 20b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somovimport java.util.GregorianCalendar; 21b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somovimport java.util.TimeZone; 22b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov 23b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somovimport junit.framework.TestCase; 24b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov 25def9635e03df5f547cda12693af495d24d1b0a5bAndrey Somovimport org.yaml.snakeyaml.Yaml; 26b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov 27b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somovpublic class CalendarTest extends TestCase { 28e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov /** 29e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov * Daylight Saving Time is not taken into account 30e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov */ 31e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov public void testDumpDstIgnored() { 32b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov CalendarBean bean = new CalendarBean(); 33b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov bean.setName("lunch"); 34b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov Calendar cal = Calendar.getInstance(); 35b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov cal.setTime(new Date(1000000000000L)); 36b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov cal.setTimeZone(TimeZone.getTimeZone("GMT-8:00")); 37b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov bean.setCalendar(cal); 388dffba7d9ff950b6094fc1b907f296c3992ec434Andrey Somov Yaml yaml = new Yaml(); 39778ea368d9f908d28df478964de32f23313756cbAndrey Somov String output = yaml.dumpAsMap(bean); 40e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov // System.out.println(output); 41e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov assertEquals("calendar: 2001-09-08T17:46:40-8:00\nname: lunch\n", output); 42d1aa3d62d60edf26d15381eb96df5fb2f0daf00aAndrey Somov // 43eec4c376290f8022508acc74fde2c01cabee1767Andrey Somov Yaml loader = new Yaml(); 44eec4c376290f8022508acc74fde2c01cabee1767Andrey Somov CalendarBean parsed = loader.loadAs(output, CalendarBean.class); 45d1aa3d62d60edf26d15381eb96df5fb2f0daf00aAndrey Somov assertEquals(bean.getCalendar(), parsed.getCalendar()); 46d1aa3d62d60edf26d15381eb96df5fb2f0daf00aAndrey Somov } 47d1aa3d62d60edf26d15381eb96df5fb2f0daf00aAndrey Somov 48e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov /** 49e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov * Daylight Saving Time is in effect on this date/time in 50e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov * America/Los_Angeles Daylight<br/> 51e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov * Saving Time is not in effect on this date/time in GMT 52e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov */ 53e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov public void testDumpDstIsNotTheSame() { 54e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov check(1000000000000L, "America/Los_Angeles", "Must be 7 hours difference.", 55e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov "2001-09-08T18:46:40-7:00"); 56e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov } 57e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov 58e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov /** 59e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov * Daylight Saving Time is not in effect on this date/time in 60e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov * America/Los_Angeles Daylight<br/> 61e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov * Saving Time is not in effect on this date/time in GMT 62e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov */ 63e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov public void testDumpDstIsTheSame() { 64e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov check(1266833741374L, "America/Los_Angeles", "Must be 8 hours difference.", 65e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov "2010-02-22T02:15:41.374-8:00"); 66e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov } 67e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov 68e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov /** 69e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov * Test odd time zone 70e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov */ 71e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov public void testNepal() { 72e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov check(1266833741374L, "Asia/Katmandu", "Must be 5:45 hours difference.", 73e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov "2010-02-22T16:00:41.374+5:45"); 74e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov } 75e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov 76e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov public void testMoreThen10hours() { 77e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov check(1266833741374L, "Asia/Kamchatka", "Must be 12 hours difference.", 78e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov "2010-02-22T22:15:41.374+12:00"); 79e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov } 80e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov 81e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov private void check(long time, String timeZone, String warning, String etalon) { 82d1aa3d62d60edf26d15381eb96df5fb2f0daf00aAndrey Somov CalendarBean bean = new CalendarBean(); 83d1aa3d62d60edf26d15381eb96df5fb2f0daf00aAndrey Somov bean.setName("lunch"); 84d1aa3d62d60edf26d15381eb96df5fb2f0daf00aAndrey Somov Calendar cal = Calendar.getInstance(); 85e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov cal.setTime(new Date(time)); 86e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov cal.setTimeZone(TimeZone.getTimeZone(timeZone)); 87d1aa3d62d60edf26d15381eb96df5fb2f0daf00aAndrey Somov bean.setCalendar(cal); 888dffba7d9ff950b6094fc1b907f296c3992ec434Andrey Somov Yaml yaml = new Yaml(); 89778ea368d9f908d28df478964de32f23313756cbAndrey Somov String output = yaml.dumpAsMap(bean); 90e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov // System.out.println(output); 91e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov assertEquals(warning, "calendar: " + etalon + "\nname: lunch\n", output); 92d1aa3d62d60edf26d15381eb96df5fb2f0daf00aAndrey Somov // 93eec4c376290f8022508acc74fde2c01cabee1767Andrey Somov Yaml loader = new Yaml(); 94eec4c376290f8022508acc74fde2c01cabee1767Andrey Somov CalendarBean parsed = loader.loadAs(output, CalendarBean.class); 95e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov assertFalse("TimeZone must deviate.", bean.getCalendar().equals(parsed.getCalendar())); 96e1050b8bf53eac31bc6228aa1d675f9a74136651Andrey Somov assertEquals(bean.getCalendar().getTimeInMillis(), parsed.getCalendar().getTimeInMillis()); 97b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov } 98b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov 99b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov public void testLoadBean() { 100eec4c376290f8022508acc74fde2c01cabee1767Andrey Somov Yaml beanLoader = new Yaml(); 101eec4c376290f8022508acc74fde2c01cabee1767Andrey Somov CalendarBean bean = beanLoader.loadAs( 102eec4c376290f8022508acc74fde2c01cabee1767Andrey Somov "calendar: 2001-12-14t21:59:43.10-05:00\nname: dinner", CalendarBean.class); 103b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov assertEquals("dinner", bean.getName()); 104b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov Calendar calendar = bean.getCalendar(); 105b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov assertEquals(TimeZone.getTimeZone("GMT-5:00").getOffset(calendar.getTime().getTime()), 106b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov calendar.getTimeZone().getOffset(calendar.getTime().getTime())); 107b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov // 108def9635e03df5f547cda12693af495d24d1b0a5bAndrey Somov Yaml yaml = new Yaml(); 109b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov Date date = (Date) yaml.load("2001-12-14t21:59:43.10-05:00"); 110b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov assertEquals(date, calendar.getTime()); 111b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov } 112b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov 113b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov public void testLoadWithTag() { 114def9635e03df5f547cda12693af495d24d1b0a5bAndrey Somov Yaml yaml = new Yaml(); 115b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov GregorianCalendar calendar = (GregorianCalendar) yaml 116b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov .load("!!java.util.GregorianCalendar 2001-12-14t21:59:43.10-05:00"); 117b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov assertEquals(TimeZone.getTimeZone("GMT-5:00").getOffset(calendar.getTime().getTime()), 118b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov calendar.getTimeZone().getOffset(calendar.getTime().getTime())); 119b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov // 120b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov Date date = (Date) yaml.load("2001-12-14t21:59:43.10-05:00"); 121b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov assertEquals(date, calendar.getTime()); 122b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov } 123b4779f9a8e0eaf921e4838fc9c68b8e9c0be963cAndrey Somov} 124