Initial Contribution
diff --git a/maketests.py b/maketests.py
new file mode 100644
index 0000000..f5f5cb1
--- /dev/null
+++ b/maketests.py
@@ -0,0 +1,127 @@
+#
+# Usage: Fill in the configuration variables. It will download the feed
+# for it, parse it, and print out test cases to add to the unit test.
+#
+
+EMAIL = "onoratoj@gmail.com"
+PRIVATE_COOKIE = "432802670aefa458daf036597ec8136b"
+START_DATE = ("2006","01","01")
+END_DATE = ("2009","01","01")
+
+
+
+import sys, urllib, re
+from xml.dom import minidom
+
+def fmt(n):
+ if n < 10:
+ return "0" + str(n)
+ else:
+ return str(n)
+
+def makeDate(d):
+ return d[0] + "-" + d[1] + "-" + d[2]
+
+def makeZDate(d):
+ return d[0] + d[1] + d[2] + "T000000Z"
+
+url = "http://www.google.com/calendar/feeds/onoratoj@gmail.com/private-" \
+ + PRIVATE_COOKIE + "/composite?start-min=" + makeDate(START_DATE) \
+ + "&start-max=" + makeDate(END_DATE)
+
+#data = open("out.xml")
+data = urllib.urlopen(url)
+
+DTSTART_TZID = re.compile("DTSTART;TZID=(.*):(.*)")
+DTSTART = re.compile("DTSTART:(.*)")
+DURATION = re.compile("DURATION:(.*)")
+RRULE = re.compile("RRULE:(.*)")
+TIME = re.compile("(....)-(..)-(..)T(..):(..):(..)....([+-])(..):(..)")
+TIMEZ = re.compile("(....)-(..)-(..)T(..):(..):(..)....Z")
+
+def stripTimezone(str):
+ lines = str.split("\n")
+ drop = False
+ result = []
+ for line in lines:
+ if line == "BEGIN:VTIMEZONE":
+ drop = True
+ if not drop:
+ result.append(line)
+ if line == "END:VTIMEZONE":
+ drop = False
+ return result
+
+def fixInstance(s):
+ m = TIME.match(s[0])
+ if m:
+ if m.group(7) == "+":
+ sign = -1
+ else:
+ sign = 1
+ hour = int(m.group(4)) + (sign * int(m.group(8)))
+ return m.group(1) + m.group(2) + m.group(3) + "T" + fmt(hour) \
+ + m.group(5) + m.group(6) + "Z"
+ m = TIMEZ.match(s[0])
+ if m:
+ return m.group(1) + m.group(2) + m.group(3) + "T" + m.group(4) \
+ + m.group(5) + m.group(6) + "Z"
+ return s[0]
+
+dom = minidom.parse(data)
+root = dom.documentElement
+
+entries = root.getElementsByTagName("entry")
+
+for entry in entries:
+ recurrences = entry.getElementsByTagName("gd:recurrence")
+ dtstart = ""
+ tzid = ""
+ duration = ""
+ rrule = ""
+ if len(recurrences) > 0:
+ recurrence = recurrences[0]
+ s = ""
+ for c in recurrence.childNodes:
+ s = s + c.nodeValue
+ lines = stripTimezone(s)
+ for s in lines:
+ re_dtstart = DTSTART_TZID.match(s)
+ if re_dtstart:
+ dtstart = re_dtstart.group(2)
+ tzid = re_dtstart.group(1)
+ re_dtstart = DTSTART.match(s)
+ if re_dtstart:
+ dtstart = re_dtstart.group(1)
+ re_duration = DURATION.match(s)
+ if re_duration:
+ duration = re_duration.group(1)
+ re_rrule = RRULE.match(s)
+ if re_rrule:
+ rrule = re_rrule.group(1)
+ whens = entry.getElementsByTagName("gd:when")
+ instances = []
+ for w in whens:
+ startTime = w.getAttribute("startTime")
+ endTime = w.getAttribute("endTime")
+ instances.append((startTime,endTime))
+
+ instances = map(fixInstance, instances)
+ instances.sort()
+ if dtstart != "":
+ title = ""
+ for c in entry.getElementsByTagName('title')[0].childNodes:
+ title = title + c.nodeValue
+
+ print " // " + title
+ print " test(\"" + dtstart + "\","
+ print " \"" + rrule + "\","
+ print " \"" + makeZDate(START_DATE) \
+ + "\", \"" + makeZDate(END_DATE) + "\","
+ print " new String[] {"
+ for i in instances:
+ print " \"" + i + "\","
+ print " });"
+ print
+
+