~rockstar/entertainer/package-structure-apocalypse

« back to all changes in this revision

Viewing changes to entertainerlib/tests/test_weather.py

  • Committer: Paul Hummer
  • Date: 2009-05-10 17:36:49 UTC
  • mfrom: (360.1.3 entertainer-future)
  • Revision ID: paul@eventuallyanyway.com-20090510173649-0odjpoqifn303t46
Merged from entertainer-future

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (c) 2009 Entertainer Developers - See COPYING - GPLv2
1
2
'''Tests Weather'''
2
3
 
3
 
__licence__ = "GPLv2"
4
 
__copyright__ = "2008, Jamie Bennett"
5
 
__author__ = "Jamie Bennett <jamie@linuxuk.org>"
6
 
 
7
 
from datetime import datetime
 
4
from datetime import datetime, timedelta, tzinfo
8
5
 
9
6
from entertainerlib.tests import EntertainerTest
10
7
from entertainerlib.weather import Weather
13
10
    """
14
11
    WeatherTest class
15
12
    Tests for the weather module.
16
 
    @author: Jamie Bennett <jamie@linuxuk.org>
17
13
    """
18
14
    def setUp(self):
19
15
        """Sets up everything for the test"""
27
23
 
28
24
    def testWeatherFindRemote(self):
29
25
        """Tests the weather code using a call to the outside world"""
 
26
        class EnglandTimeZone(tzinfo):
 
27
            '''An implementation of tzinfo specific to England.'''
 
28
            def __init__(self):
 
29
                tzinfo.__init__(self)
 
30
                self.stdoffset = timedelta(hours=0)
 
31
                self.reprname = 'England'
 
32
                self.stdname = 'WET' # Western Europe Time
 
33
                self.dstname = 'BST' # British Summer Time
 
34
 
 
35
            def __repr__(self):
 
36
                return self.reprname
 
37
 
 
38
            def _first_sunday_on_or_after(self, dt):
 
39
                '''Figure out the DST date.'''
 
40
                days_to_go = 6 - dt.weekday()
 
41
                if days_to_go:
 
42
                    dt += timedelta(days_to_go)
 
43
                return dt
 
44
 
 
45
            def tzname(self, dt):
 
46
                '''See `tzinfo.tzname`.'''
 
47
                if self.dst(dt):
 
48
                    return self.dstname
 
49
                else:
 
50
                    return self.stdname
 
51
 
 
52
            def utcoffset(self, dt):
 
53
                '''See `tzinfo.utcoffset`.'''
 
54
                return self.stdoffset + self.dst(dt)
 
55
 
 
56
            def dst(self, dt):
 
57
                '''See `tzinfo.dst`.'''
 
58
                DSTSTART = datetime(1, 4, 1, 2)
 
59
                DSTEND = datetime(1, 10, 25, 1)
 
60
                ZERO = timedelta(0)
 
61
                HOUR = timedelta(hours=1)
 
62
                if dt is None or dt.tzinfo is None:
 
63
                    return ZERO
 
64
                assert dt.tzinfo is self
 
65
 
 
66
                start = self._first_sunday_on_or_after(
 
67
                    DSTSTART.replace(year=dt.year))
 
68
                end = self._first_sunday_on_or_after(
 
69
                    DSTEND.replace(year=dt.year))
 
70
 
 
71
                if start <= dt.replace(tzinfo=None) < end:
 
72
                    return HOUR
 
73
                else:
 
74
                    return ZERO
 
75
        england = EnglandTimeZone()
 
76
 
30
77
        self.weather.set_location('Bath,England')
31
78
        self.weather.refresh()
32
79
        forecasts = self.weather.get_forecasts()
33
80
        today = forecasts[0]
34
 
        day = datetime.now().strftime('%a')
 
81
        day = datetime.now(england).strftime('%a')
35
82
        self.assertEqual(str(today["Day"]), day)
36
83
 
37
84
    def testWeatherSet(self):