OLD | NEW |
| (Empty) |
1 # Copyright 2015 The Chromium Authors. All rights reserved. | |
2 # Use of this source code is governed by a BSD-style license that can be | |
3 # found in the LICENSE file. | |
4 | |
5 import datetime | |
6 import mock | |
7 import pytz | |
8 import unittest | |
9 | |
10 from infra_libs.time_functions.testing import mock_datetime_utc, mock_timezone | |
11 | |
12 original_datetime = datetime.datetime | |
13 | |
14 class TestFreezeTime(unittest.TestCase): | |
15 @mock_datetime_utc(2015, 11, 24, 7, 18, 23) | |
16 @mock_timezone('US/Pacific') | |
17 def test_mocks_datetime_and_timezone(self): | |
18 self.assertEqual(datetime.datetime.utcnow(), | |
19 datetime.datetime(2015, 11, 24, 7, 18, 23)) | |
20 self.assertEqual(datetime.datetime.now(), | |
21 datetime.datetime(2015, 11, 23, 23, 18, 23)) | |
22 self.assertEqual(datetime.datetime.now(tz=pytz.timezone('Europe/Berlin')), | |
23 datetime.datetime(2015, 11, 24, 8, 18, 23)) | |
24 self.assertEqual(datetime.datetime.today(), datetime.date(2015, 11, 23)) | |
25 self.assertEqual(datetime.date.today(), datetime.date(2015, 11, 23)) | |
26 self.assertEqual(datetime.datetime.fromtimestamp(0), | |
27 datetime.datetime(1969, 12, 31, 16, 0, 0)) | |
28 self.assertEqual( | |
29 datetime.datetime.fromtimestamp(0, tz=pytz.timezone('Europe/Berlin')), | |
30 datetime.datetime(1970, 1, 1, 1, 0, 0)) | |
31 self.assertEqual(datetime.date.fromtimestamp(0), | |
32 datetime.date(1969, 12, 31)) | |
33 | |
34 # Try accessing standard class attributes and methods. | |
35 self.assertEqual(datetime.datetime.min, original_datetime.min) | |
36 self.assertEqual(datetime.datetime.utcfromtimestamp(0), | |
37 datetime.datetime(1970, 1, 1, 0, 0, 0)) | |
38 | |
39 # Check that creating normal datetimes and working with them works. | |
40 dt = datetime.datetime(2015, 10, 1, 1, 1, 1) | |
41 dt += datetime.timedelta(hours=2) | |
42 self.assertEqual(dt, datetime.datetime(2015, 10, 1, 3, 1, 1)) | |
43 d = datetime.date(2015, 10, 1) | |
44 d += datetime.timedelta(days=5) | |
45 self.assertEqual(d, datetime.date(2015, 10, 6)) | |
46 | |
47 # Check that isinstance method works as expected. | |
48 dt = datetime.datetime.utcnow() # dt is _MockDateTime | |
49 self.assertTrue(isinstance(dt, datetime.datetime)) | |
50 dt += datetime.timedelta(hours=1) # dt is vanilla datatime.datetime | |
51 self.assertTrue(isinstance(dt, datetime.datetime)) | |
52 d = datetime.datetime.today() # d is _MockDate | |
53 self.assertTrue(isinstance(d, datetime.date)) | |
54 d += datetime.timedelta(days=1) # d is vanilla datatime.date | |
55 self.assertTrue(isinstance(d, datetime.date)) | |
56 | |
57 | |
58 @mock_datetime_utc(2015, 11, 24, 7, 0, 0) | |
59 def test_nested_mock_works(self): | |
60 self.assertEqual(datetime.datetime.utcnow().hour, 7) | |
61 | |
62 @mock_datetime_utc(2015, 11, 24, 10, 0, 0) | |
63 def nested_func(): | |
64 self.assertEqual(datetime.datetime.utcnow().hour, 10) | |
65 nested_func() | |
66 | |
67 self.assertEqual(datetime.datetime.utcnow().hour, 7) | |
68 | |
69 @mock_datetime_utc(2015, 11, 24, 9, 10, 15) | |
70 @mock_timezone('US/Pacific') | |
71 def test_winter_time_is_computed_correctly(self): | |
72 self.assertEqual(datetime.datetime.now(), | |
73 datetime.datetime(2015, 11, 24, 1, 10, 15)) | |
74 | |
75 @mock_datetime_utc(2015, 8, 24, 9, 10, 15) | |
76 @mock_timezone('US/Pacific') | |
77 def test_summer_time_is_computed_correctly(self): | |
78 self.assertEqual(datetime.datetime.now(), | |
79 datetime.datetime(2015, 8, 24, 2, 10, 15)) | |
OLD | NEW |