1 | from datetime import timedelta |
---|
2 | from MythTV.utility.dt import datetime, posixtzinfo |
---|
3 | |
---|
4 | TZ='America/Los_Angeles' |
---|
5 | START_DST = ('2013-03-10T08:00:00Z',) |
---|
6 | END_DST = ('2013-11-03T07:00:00Z',) |
---|
7 | |
---|
8 | EXPECT_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 | |
---|
23 | EXPECT_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 | |
---|
38 | PASS_COUNT=0 |
---|
39 | FAIL_COUNT=0 |
---|
40 | TEST_COUNT=0 |
---|
41 | |
---|
42 | def 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 | |
---|
62 | print 'Testing Start of DST' |
---|
63 | test_range(START_DST, EXPECT_START) |
---|
64 | print |
---|
65 | print '*' * 78 |
---|
66 | print |
---|
67 | |
---|
68 | print 'Testing End of DST' |
---|
69 | test_range(END_DST, EXPECT_END) |
---|
70 | print |
---|
71 | print '*' * 78 |
---|
72 | print |
---|
73 | |
---|
74 | if PASS_COUNT == TEST_COUNT: |
---|
75 | print "All %s tests PASSED" % PASS_COUNT |
---|
76 | elif FAIL_COUNT == TEST_COUNT: |
---|
77 | print "All %s tests FAILED" % FAIL_COUNT |
---|
78 | else: |
---|
79 | print "%s PASS, %s FAIL" % (PASS_COUNT, FAIL_COUNT) |
---|