1cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project// Copyright 2007 The Android Open Source Project 2cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Projectpackage com.android.providers.calendar; 3cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 45cd969369a0e025bad07ad32bda9c8c4f0630457Michael Chanimport com.android.calendarcommon2.ICalendar; 593e0bbb921cce7a5cec355521bc570c03c9d6a1cAndy McFadden 6cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Projectimport android.test.suitebuilder.annotation.SmallTest; 7cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Projectimport junit.framework.TestCase; 8cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 9cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Projectimport java.util.List; 10cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 11cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Projectpublic class ICalendarTest extends TestCase { 12cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 13cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project @SmallTest 14cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project public void testAddParameter() throws Exception { 15cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project ICalendar.Property prop = new ICalendar.Property("prop1", "value1"); 16cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(0, prop.getParameterNames().size()); 17cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project prop.addParameter(new ICalendar.Parameter("param1", "foo")); 18cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(1, prop.getParameterNames().size()); 19cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project prop.addParameter(new ICalendar.Parameter("param1", "bar")); 20cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(1, prop.getParameterNames().size()); 21cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project prop.addParameter(new ICalendar.Parameter("param2", "baaz")); 22cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(2, prop.getParameterNames().size()); 23cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project prop.addParameter(new ICalendar.Parameter("param1", "quux")); 24cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(2, prop.getParameterNames().size()); 25cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project prop.addParameter(new ICalendar.Parameter("param3", "accent")); 26cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(3, prop.getParameterNames().size()); 27cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals("prop1;param1=foo;param1=bar;param1=quux;" 28cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project + "param2=baaz;param3=accent:value1", prop.toString()); 29cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project } 30cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 31cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project @SmallTest 32cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project public void testAddProperty() throws Exception { 33cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project String text = "BEGIN:DUMMY\n" + 34cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "prop2:value3\n" + 35cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "prop1:value1\n" + 36cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "prop1:value2\n" + 37cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "END:DUMMY\n"; 38cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 39cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project ICalendar.Component component = new ICalendar.Component("DUMMY", null); 40cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project // properties should be listed in insertion order, by property name. 41cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project component.addProperty(new ICalendar.Property("prop2", "value3")); 42cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project component.addProperty(new ICalendar.Property("prop1", "value1")); 43cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project component.addProperty(new ICalendar.Property("prop1", "value2")); 44cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(text, component.toString()); 45cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project } 46cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 47cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project @SmallTest 48cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project public void testAddComponent() throws Exception { 49cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project String text = "BEGIN:DUMMY\n" + 50cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "prop1:value1\n" + 51cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "prop1:value12\n" + 52cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "BEGIN:DUMMY2\n" + 53cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "prop2:value2\n" + 54cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "END:DUMMY2\n" + 55cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "END:DUMMY\n"; 56cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 57cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project ICalendar.Component parent = new ICalendar.Component("DUMMY", null); 58cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project // properties should precede components 59cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project ICalendar.Component child = new ICalendar.Component("DUMMY2", parent); 60cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project child.addProperty(new ICalendar.Property("prop2", "value2")); 61cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project parent.addChild(child); 62cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project parent.addProperty(new ICalendar.Property("prop1", "value1")); 63cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project parent.addProperty(new ICalendar.Property("prop1", "value12")); 64cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(text, parent.toString()); 65cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project } 66cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 67cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project @SmallTest 68cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project public void testParseBasicComponent() throws Exception { 69cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project String text = "BEGIN:DUMMY\n" + 70cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "PROP1;PARAM1=foo;PARAM2=bar:VALUE1\n" + 71cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "PROP1;PARAM1=baaz;PARAM1=quux:VALUE2\n" + 72cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "PROP2:VALUE3\n" + 73cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "END:DUMMY\n"; 74cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 75cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project ICalendar.Component component = ICalendar.parseComponent(text); 76cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 77cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals("DUMMY", component.getName()); 78cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertNull(component.getComponents()); 79cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(2, component.getPropertyNames().size()); 80cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project ICalendar.Property prop1 = component.getFirstProperty("PROP1"); 81cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(2, prop1.getParameterNames().size()); 82cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals("foo", prop1.getFirstParameter("PARAM1").value); 83cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals("bar", prop1.getFirstParameter("PARAM2").value); 84cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project List<ICalendar.Property> props = component.getProperties("PROP1"); 85cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(2, props.size()); 86cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project List<ICalendar.Parameter> params = props.get(1).getParameters("PARAM1"); 87cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals("baaz", params.get(0).value); 88cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals("quux", params.get(1).value); 89cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project } 90cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 91cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project @SmallTest 92a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert public void testParseQuotedParam() throws Exception { 93a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert ICalendar.Component component 94a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert = new ICalendar.Component("DUMMY", null /* parent */); 95a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert ICalendar.parseComponent( 96a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert component, 97a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert "DTSTART;TZID=\"GMT+03:00\";TEST=test1;TEST=\"test2\":20101221T090000"); 98a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert ICalendar.Property property = component.getFirstProperty("DTSTART"); 99a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert assertEquals(2, property.getParameterNames().size()); 100a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert assertEquals("GMT+03:00", property.getFirstParameter("TZID").value); 101a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert final List<ICalendar.Parameter> testParameters = property.getParameters("TEST"); 102a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert assertEquals(2, testParameters.size()); 103a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert assertEquals("test1", testParameters.get(0).value); 104a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert assertEquals("test2", testParameters.get(1).value); 105a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert assertEquals("20101221T090000", component.getFirstProperty("DTSTART").getValue()); 106a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert } 107a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert 108a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert @SmallTest 109a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert public void testParseBadQuotedParam() throws Exception { 110a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert ICalendar.Component component 111a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert = new ICalendar.Component("DUMMY", null /* parent */); 112a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert 113a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert ICalendar.parseComponent( 114a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert component, 115a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert "FOO;PARAM1=\"param1\"\";PARAM=quote-before-param:value"); 116a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert assertNull("Invalid quote before param value", component.getFirstProperty("FOO")); 117a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert 118a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert ICalendar.parseComponent( 119a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert component, 120a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert "FOO;PARAM\"=expected-equal:value"); 121a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert assertNull("Expected equal in param", component.getFirstProperty("FOO")); 122a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert 123a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert ICalendar.parseComponent( 124a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert component, 125a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert "FOO;PARAM=text-not-allowed\"before-quote:value"); 126a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert assertNull("Invalid quote in param value", component.getFirstProperty("FOO")); 127a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert 128a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert ICalendar.parseComponent( 129a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert component, 130a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert "FOO;PARAM=\"missing-end-quote:value"); 131a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert assertNull("missing-end-quote", component.getFirstProperty("FOO")); 132a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert } 133a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert 134a494fe4c195bbdeddb687d5783717a631ee8b5e3Alon Albert @SmallTest 135cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project public void testParseChildComponent() throws Exception { 136cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project String childText = "BEGIN:CHILD\n" + 137cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "PROP1;PARAM1=foo;PARAM2=bar:VALUE1\n" + 138cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "PROP1;PARAM1=baaz;PARAM1=quux:VALUE2\n" + 139cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "PROP2:VALUE3\n" + 140cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "END:CHILD\n"; 141cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 142cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project String completeText = "BEGIN:DUMMY\n" + 143cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project childText + 144cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "END:DUMMY\n"; 145cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 146cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project ICalendar.Component component = new ICalendar.Component("DUMMY", null); 147cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project component = ICalendar.parseComponent(component, childText); 148cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals("DUMMY", component.getName()); 149cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(1, component.getComponents().size()); 150cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(completeText, component.toString()); 151cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project } 152cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 153cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project @SmallTest 154cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project public void testParseBareEvent() throws Exception { 155cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project String text = "BEGIN:VEVENT\nEND:VEVENT\n"; 156cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project ICalendar.Component event = ICalendar.parseEvent(text); 157cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 158cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals("VEVENT", event.getName()); 159cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertNull(event.getComponents()); 160cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(0, event.getPropertyNames().size()); 161cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project } 162cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 163cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project @SmallTest 164cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project public void testParseEvent1() throws Exception { 165cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project String text = "BEGIN:VEVENT\n" + 166cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "DTSTART:19970714T170000Z\n" + 167cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "DTEND:19970715T035959Z\n" + 168cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "SUMMARY:Bastille Day Party\n" + 169cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "END:VEVENT\n"; 170cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 171cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project ICalendar.Component event = ICalendar.parseEvent(text); 172cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 173cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals("VEVENT", event.getName()); 174cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertNull(event.getComponents()); 175cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(3, event.getPropertyNames().size()); 176cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(1, event.getProperties("DTSTART").size()); 177cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals("19970714T170000Z", event.getFirstProperty("DTSTART").getValue()); 178cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(0, event.getFirstProperty("DTSTART").getParameterNames().size()); 179cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(1, event.getProperties("DTEND").size()); 180cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(0, event.getFirstProperty("DTEND").getParameterNames().size()); 181cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals("19970715T035959Z", event.getFirstProperty("DTEND").getValue()); 182cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(1, event.getProperties("SUMMARY").size()); 183cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(0, event.getFirstProperty("SUMMARY").getParameterNames().size()); 184cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals("Bastille Day Party", event.getFirstProperty("SUMMARY").getValue()); 185cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project } 186cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 187cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project @SmallTest 188cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project public void testParseEvent2() throws Exception { 189cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project String text = "BEGIN:VEVENT\n" + 190cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "DTSTART;TZID=America/Los_Angeles:19970714T170000\n" + 191cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "DURATION:+P3600S\n" + 192cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "SUMMARY;FOO=1;BAR=2:Bastille Day Party\n" + 193cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "END:VEVENT\n"; 194cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 195cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project ICalendar.Component event = ICalendar.parseEvent(text); 196cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 197cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals("VEVENT", event.getName()); 198cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertNull(event.getComponents()); 199cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(3, event.getPropertyNames().size()); 200cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(1, event.getProperties("DTSTART").size()); 201cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals("19970714T170000", event.getFirstProperty("DTSTART").getValue()); 202cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(1, event.getFirstProperty("DTSTART").getParameterNames().size()); 203cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(1, event.getProperties("SUMMARY").size()); 204cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project } 205cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 206cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project @SmallTest 207cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project public void testParseInvalidProperty() throws Exception { 208cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project String text = "BEGIN:VEVENT\n" + 209cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "FOO;BAR\n" + // invalid line 210cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "END:VEVENT\n"; 211cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 212cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project ICalendar.Component event = ICalendar.parseEvent(text); 213cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 214cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals("VEVENT", event.getName()); 215cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertNull(event.getComponents()); 216cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(0, event.getPropertyNames().size()); 217cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project } 218cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 219cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project @SmallTest 220cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project public void testParseEventDoesNotStartWithBegin() throws Exception { 221cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project String text = "NOTBEGIN:DUMMY\n" + 222cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "END:DUMMY\n"; 223cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 224cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project try { 225cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project ICalendar.parseEvent(text); 226cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project fail("expected exception not thrown"); 227cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project } catch (ICalendar.FormatException e) { 228cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals("Expected " + ICalendar.Component.VEVENT, e.getMessage()); 229cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project } 230cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project } 231cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 232cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project @SmallTest 233cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project public void testParseCalendarDoesNotStartWithBegin() throws Exception { 234cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project String text = "NOTBEGIN:DUMMY\n" + 235cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "END:DUMMY\n"; 236cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 237cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project try { 238cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project ICalendar.parseCalendar(text); 239cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project fail("expected exception not thrown"); 240cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project } catch (ICalendar.FormatException e) { 241cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals("Expected " + ICalendar.Component.VCALENDAR, e.getMessage()); 242cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project } 243cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project } 244cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 245cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project @SmallTest 246cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project public void testParseComponentDoesNotStartWithBegin() throws Exception { 247cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project String text = "NOTBEGIN:DUMMY\n" + 248cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "END:DUMMY\n"; 249cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 250cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project ICalendar.Component component = ICalendar.parseComponent(text); 251cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertNull(component); 252cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project } 253cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 254cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project @SmallTest 255cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project public void testParseUnexpectedEndComponent() throws Exception { 256cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project String text = "BEGIN:PARENT\n" + 257cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "END:BADPARENT\n"; 258cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 259cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project ICalendar.Component component = ICalendar.parseComponent(text); 260cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertNotNull(component); 261cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project } 262cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 263cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project @SmallTest 264cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project public void testParseNoEndComponent() throws Exception { 265cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project String text = "BEGIN:DUMMY\n" + 266cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "END:\n"; 267cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 268cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project ICalendar.Component component = ICalendar.parseComponent(text); 269cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertNotNull(component); 270cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project } 271cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 272cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project @SmallTest 273cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project public void testNormalize() throws Exception { 274cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project String text = "BEGIN:VEVENT\n" + 275cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "RRULE:FREQ=SECONDLY;BYSECOND=0,1,2,\r\n 3,4,5\r\n ,6,7,8\r\n" + 276cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "END:VEVENT\n"; 277cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 278cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project ICalendar.Component event = ICalendar.parseEvent(text); 279cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 280cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals("VEVENT", event.getName()); 281cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertNull(event.getComponents()); 282cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(1, event.getPropertyNames().size()); 283cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(1, event.getProperties("RRULE").size()); 284cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals("FREQ=SECONDLY;BYSECOND=0,1,2,3,4,5,6,7,8", event.getFirstProperty("RRULE").getValue()); 285cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 286cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project } 287cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 288cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project @SmallTest 289cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project public void testNormalizeBadSep() throws Exception { 290cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project String text = "BEGIN:VEVENT\n" + 291cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "RRULE:FREQ=SECONDLY;BYSECOND=0,1,2,\n 3,4,5\n ,6,7,8\n" + 292cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "END:VEVENT\n"; 293cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 294cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project ICalendar.Component event = ICalendar.parseEvent(text); 295cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 296cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals("VEVENT", event.getName()); 297cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertNull(event.getComponents()); 298cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(1, event.getPropertyNames().size()); 299cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals(1, event.getProperties("RRULE").size()); 300cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project assertEquals("FREQ=SECONDLY;BYSECOND=0,1,2,3,4,5,6,7,8", event.getFirstProperty("RRULE").getValue()); 301cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project } 302cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 303cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 304cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project @SmallTest 305cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project public void testBad() throws Exception { 306cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project String text = "BEGIN:VEVENT\n" + 307cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "RRULE=foo\n" + 308cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project "END:VEVENT\n"; 309cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 310cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project ICalendar.Component event = ICalendar.parseEvent(text); 311cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project 312cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project // Note that parseEvent doesn't throw the FormatException you might expect because 313cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project // ICalendar.parseComponentImpl catches the exception due to misformatted GData. 314cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project // TODO: update this test after cleaning up the ICalendar behavior 315cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project } 316cf013ece751816a07396845858f1c7037ead464fThe Android Open Source Project} 317