def test_parse(self): data = """Rule\tUS\t1918\t1919\t-\tMar\tlastSun\t2:00\t1:00\tD Rule\tUS\t1918\t1919\t-\tOct\tlastSun\t2:00\t0\tS Rule\tUS\t1942\tonly\t-\tFeb\t9\t2:00\t1:00\tW Rule\tUS\t1945\tonly\t-\tAug\t14\t23:00u\t1:00\tP Rule\tUS\t1945\tonly\t-\tSep\t30\t2:00\t0\tS Rule\tUS\t1967\t2006\t-\tOct\tlastSun\t2:00\t0\tS Rule\tUS\t1967\t1973\t-\tApr\tlastSun\t2:00\t1:00\tD Rule\tUS\t1974\tonly\t-\tJan\t6\t2:00\t1:00\tD Rule\tUS\t1975\tonly\t-\tFeb\t23\t2:00\t1:00\tD Rule\tUS\t1976\t1986\t-\tApr\tlastSun\t2:00\t1:00\tD Rule\tUS\t1987\t2006\t-\tApr\tSun>=1\t2:00\t1:00\tD Rule\tUS\t2007\tmax\t-\tMar\tSun>=8\t2:00\t1:00\tD Rule\tUS\t2007\tmax\t-\tNov\tSun>=1\t2:00\t0\tS""" ruleset = RuleSet() ruleset.parse(data) self.assertEqual(str(ruleset), data)
def test_vtimezone(self): zonedef = """Zone America/New_York\t-4:56:02\t-\tLMT\t1883 Nov 18 12:03:58 \t\t\t-5:00\tUS\tE%sT""" rules = """Rule\tUS\t1918\t1919\t-\tMar\tlastSun\t2:00\t1:00\tD Rule\tUS\t1918\t1919\t-\tOct\tlastSun\t2:00\t0\tS Rule\tUS\t1942\tonly\t-\tFeb\t9\t2:00\t1:00\tW Rule\tUS\t1945\tonly\t-\tAug\t14\t23:00u\t1:00\tP Rule\tUS\t1945\tonly\t-\tSep\t30\t2:00\t0\tS Rule\tUS\t1967\t2006\t-\tOct\tlastSun\t2:00\t0\tS Rule\tUS\t1967\t1973\t-\tApr\tlastSun\t2:00\t1:00\tD Rule\tUS\t1974\tonly\t-\tJan\t6\t2:00\t1:00\tD Rule\tUS\t1975\tonly\t-\tFeb\t23\t2:00\t1:00\tD Rule\tUS\t1976\t1986\t-\tApr\tlastSun\t2:00\t1:00\tD Rule\tUS\t1987\t2006\t-\tApr\tSun>=1\t2:00\t1:00\tD Rule\tUS\t2007\tmax\t-\tMar\tSun>=8\t2:00\t1:00\tD Rule\tUS\t2007\tmax\t-\tNov\tSun>=1\t2:00\t0\tS""" result = """BEGIN:VTIMEZONE TZID:America/New_York X-LIC-LOCATION:America/New_York BEGIN:DAYLIGHT DTSTART:20060402T020000 RDATE:20060402T020000 TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 END:DAYLIGHT BEGIN:STANDARD DTSTART:20061029T020000 RDATE:20061029T020000 TZNAME:EST TZOFFSETFROM:-0400 TZOFFSETTO:-0500 END:STANDARD BEGIN:DAYLIGHT DTSTART:20070311T020000 RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3 TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 END:DAYLIGHT BEGIN:STANDARD DTSTART:20071104T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11 TZNAME:EST TZOFFSETFROM:-0400 TZOFFSETTO:-0500 END:STANDARD END:VTIMEZONE """.replace("\n", "\r\n") zone = Zone() zone.parse(zonedef) ruleset = RuleSet() ruleset.parse(rules) rules = {ruleset.name: ruleset} cal = Calendar() vtz = zone.vtimezone(cal, rules, 2006, 2011) self.assertEqual(str(vtz), result)