Ticket #11447: dst-test.py

File dst-test.py, 2.2 KB (added by Tom Grigg <tomegrigg@…>, 11 years ago)

test case

Line 
1from datetime import timedelta
2from MythTV.utility.dt import datetime, posixtzinfo
3
4TZ='America/Los_Angeles'
5START_DST = ('2013-03-10T08:00:00Z',)
6END_DST = ('2013-11-03T07:00:00Z',)
7
8EXPECT_START = {
9    '2013-03-10T08:00:00+00:00' : (
10        '2013-03-10 00:00:00-08:00',
11        '2013-03-10 00:30:00-08:00',
12        '2013-03-10 01:00:00-08:00',
13        '2013-03-10 01:30:00-08:00',
14        '2013-03-10 03:00:00-07:00',
15        '2013-03-10 03:30:00-07:00',
16        '2013-03-10 04:00:00-07:00',
17        '2013-03-10 04:30:00-07:00',
18        '2013-03-10 05:00:00-07:00',
19        '2013-03-10 05:30:00-07:00',
20        )
21}
22
23EXPECT_END = {
24    '2013-11-03T07:00:00+00:00' : (
25        '2013-11-03 00:00:00-07:00',
26        '2013-11-03 00:30:00-07:00',
27        '2013-11-03 01:00:00-08:00',
28        '2013-11-03 01:30:00-08:00',
29        '2013-11-03 01:00:00-08:00',
30        '2013-11-03 01:30:00-08:00',
31        '2013-11-03 02:00:00-08:00',
32        '2013-11-03 02:30:00-08:00',
33        '2013-11-03 03:00:00-08:00',
34        '2013-11-03 03:30:00-08:00',
35        )
36}
37
38PASS_COUNT=0
39FAIL_COUNT=0
40TEST_COUNT=0
41
42def test_range(times, expects):
43    global PASS_COUNT, FAIL_COUNT, TEST_COUNT
44    num_slots = 10
45    tz = posixtzinfo(TZ)
46    for tm in times:
47        start = datetime.duck(tm)
48        expected = expects[start.isoformat()]
49        timeslots = [start + timedelta(minutes=i*30) for i in range(num_slots)]
50        print '%26s %26s %4s %10s %6s' % ('UTC', 'UTC -> Local', 'TZ', 'dst', 'result')
51        for i,t in enumerate(timeslots):
52            TEST_COUNT += 1
53            local = t.astimezone(tz)
54            status = "pass" if str(local) == expected[i] else "FAIL"
55            if status == 'pass':
56                PASS_COUNT += 1
57            elif status == 'FAIL':
58                FAIL_COUNT += 1
59            print '%26s %26s %4s %10s %6s' % \
60                (t, local, tz.tzname(local), tz.dst(local), status)
61
62print 'Testing Start of DST'
63test_range(START_DST, EXPECT_START)
64print
65print '*' * 78
66print
67
68print 'Testing End of DST'
69test_range(END_DST, EXPECT_END)
70print
71print '*' * 78
72print
73
74if PASS_COUNT == TEST_COUNT:
75    print "All %s tests PASSED" % PASS_COUNT
76elif FAIL_COUNT == TEST_COUNT:
77    print "All %s tests FAILED" % FAIL_COUNT
78else:
79    print "%s PASS, %s FAIL" % (PASS_COUNT, FAIL_COUNT)