1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.yaml.snakeyaml.issues.issue49;
18
19 import java.util.Calendar;
20 import java.util.Date;
21 import java.util.GregorianCalendar;
22 import java.util.TimeZone;
23
24 import junit.framework.TestCase;
25
26 import org.yaml.snakeyaml.Yaml;
27
28 public class CalendarTest extends TestCase {
29
30
31
32 public void testDumpDstIgnored() {
33 CalendarBean bean = new CalendarBean();
34 bean.setName("lunch");
35 Calendar cal = Calendar.getInstance();
36 cal.setTime(new Date(1000000000000L));
37 cal.setTimeZone(TimeZone.getTimeZone("GMT-8:00"));
38 bean.setCalendar(cal);
39 Yaml yaml = new Yaml();
40 String output = yaml.dumpAsMap(bean);
41
42 assertEquals("calendar: 2001-09-08T17:46:40-8:00\nname: lunch\n", output);
43
44 Yaml loader = new Yaml();
45 CalendarBean parsed = loader.loadAs(output, CalendarBean.class);
46 assertEquals(bean.getCalendar(), parsed.getCalendar());
47 }
48
49
50
51
52
53
54 public void testDumpDstIsNotTheSame() {
55 check(1000000000000L, "America/Los_Angeles", "Must be 7 hours difference.",
56 "2001-09-08T18:46:40-7:00");
57 }
58
59
60
61
62
63
64 public void testDumpDstIsTheSame() {
65 check(1266833741374L, "America/Los_Angeles", "Must be 8 hours difference.",
66 "2010-02-22T02:15:41.374-8:00");
67 }
68
69
70
71
72 public void testNepal() {
73 check(1266833741374L, "Asia/Katmandu", "Must be 5:45 hours difference.",
74 "2010-02-22T16:00:41.374+5:45");
75 }
76
77 public void testMoreThen10hours() {
78 check(1266833741374L, "Asia/Kamchatka", "Must be 12 hours difference.",
79 "2010-02-22T22:15:41.374+12:00");
80 }
81
82 private void check(long time, String timeZone, String warning, String etalon) {
83 CalendarBean bean = new CalendarBean();
84 bean.setName("lunch");
85 Calendar cal = Calendar.getInstance();
86 cal.setTime(new Date(time));
87 cal.setTimeZone(TimeZone.getTimeZone(timeZone));
88 bean.setCalendar(cal);
89 Yaml yaml = new Yaml();
90 String output = yaml.dumpAsMap(bean);
91
92 assertEquals(warning, "calendar: " + etalon + "\nname: lunch\n", output);
93
94 Yaml loader = new Yaml();
95 CalendarBean parsed = loader.loadAs(output, CalendarBean.class);
96 assertFalse("TimeZone must deviate.", bean.getCalendar().equals(parsed.getCalendar()));
97 assertEquals(bean.getCalendar().getTimeInMillis(), parsed.getCalendar().getTimeInMillis());
98 }
99
100 public void testLoadBean() {
101 Yaml beanLoader = new Yaml();
102 CalendarBean bean = beanLoader.loadAs(
103 "calendar: 2001-12-14t21:59:43.10-05:00\nname: dinner", CalendarBean.class);
104 assertEquals("dinner", bean.getName());
105 Calendar calendar = bean.getCalendar();
106 assertEquals(TimeZone.getTimeZone("GMT-5:00").getOffset(calendar.getTime().getTime()),
107 calendar.getTimeZone().getOffset(calendar.getTime().getTime()));
108
109 Yaml yaml = new Yaml();
110 Date date = (Date) yaml.load("2001-12-14t21:59:43.10-05:00");
111 assertEquals(date, calendar.getTime());
112 }
113
114 public void testLoadWithTag() {
115 Yaml yaml = new Yaml();
116 GregorianCalendar calendar = (GregorianCalendar) yaml
117 .load("!!java.util.GregorianCalendar 2001-12-14t21:59:43.10-05:00");
118 assertEquals(TimeZone.getTimeZone("GMT-5:00").getOffset(calendar.getTime().getTime()),
119 calendar.getTimeZone().getOffset(calendar.getTime().getTime()));
120
121 Date date = (Date) yaml.load("2001-12-14t21:59:43.10-05:00");
122 assertEquals(date, calendar.getTime());
123 }
124 }