1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3"""Tests for the fake time implementation."""
4
5import decimal
6import unittest
7
8from dfdatetime import fake_time
9
10
11class FakeTimeTest(unittest.TestCase):
12  """Tests for the fake time."""
13
14  # pylint: disable=protected-access
15
16  def testGetNormalizedTimestamp(self):
17    """Tests the _GetNormalizedTimestamp function."""
18    fake_time_object = fake_time.FakeTime()
19    fake_time_object.CopyFromDateTimeString('2010-08-12 21:06:31.546875')
20
21    normalized_timestamp = fake_time_object._GetNormalizedTimestamp()
22    self.assertEqual(normalized_timestamp, decimal.Decimal('1281647191.546875'))
23
24    fake_time_object = fake_time.FakeTime()
25    fake_time_object.CopyFromDateTimeString('2010-08-12 21:06:31.546875+01:00')
26
27    normalized_timestamp = fake_time_object._GetNormalizedTimestamp()
28    self.assertEqual(normalized_timestamp, decimal.Decimal('1281643591.546875'))
29
30    fake_time_object = fake_time.FakeTime()
31    fake_time_object._number_of_seconds = None
32
33    normalized_timestamp = fake_time_object._GetNormalizedTimestamp()
34    self.assertIsNone(normalized_timestamp)
35
36  def testGetPlasoTimestamp(self):
37    """Tests the GetPlasoTimestamp function."""
38    fake_time_object = fake_time.FakeTime()
39    fake_time_object._normalized_timestamp = decimal.Decimal(
40        '1333794697.6252465')
41    plaso_timestamp = fake_time_object.GetPlasoTimestamp()
42    self.assertEqual(plaso_timestamp, 1333794697625247)
43
44  def testCopyFromDateTimeString(self):
45    """Tests the CopyFromDateTimeString function."""
46    fake_time_object = fake_time.FakeTime()
47
48    fake_time_object.CopyFromDateTimeString('2010-08-12')
49    self.assertEqual(fake_time_object._number_of_seconds, 1281571200)
50    self.assertIsNone(fake_time_object._microseconds)
51    self.assertEqual(fake_time_object._time_zone_offset, 0)
52
53    fake_time_object.CopyFromDateTimeString('2010-08-12 21:06:31')
54    self.assertEqual(fake_time_object._number_of_seconds, 1281647191)
55    self.assertIsNone(fake_time_object._microseconds)
56    self.assertEqual(fake_time_object._time_zone_offset, 0)
57
58    fake_time_object.CopyFromDateTimeString('2010-08-12 21:06:31.546875')
59    self.assertEqual(fake_time_object._number_of_seconds, 1281647191)
60    self.assertEqual(fake_time_object._microseconds, 546875)
61    self.assertEqual(fake_time_object._time_zone_offset, 0)
62
63    fake_time_object.CopyFromDateTimeString('2010-08-12 21:06:31.546875-01:00')
64    self.assertEqual(fake_time_object._number_of_seconds, 1281647191)
65    self.assertEqual(fake_time_object._microseconds, 546875)
66    self.assertEqual(fake_time_object._time_zone_offset, -60)
67
68    fake_time_object.CopyFromDateTimeString('2010-08-12 21:06:31.546875+01:00')
69    self.assertEqual(fake_time_object._number_of_seconds, 1281647191)
70    self.assertEqual(fake_time_object._microseconds, 546875)
71    self.assertEqual(fake_time_object._time_zone_offset, 60)
72
73    fake_time_object.CopyFromDateTimeString('1601-01-02 00:00:00')
74    self.assertEqual(fake_time_object._number_of_seconds, -11644387200)
75    self.assertIsNone(fake_time_object._microseconds)
76    self.assertEqual(fake_time_object._time_zone_offset, 0)
77
78  def testCopyToDateTimeString(self):
79    """Tests the CopyToDateTimeString function."""
80    fake_time_object = fake_time.FakeTime()
81    fake_time_object.CopyFromDateTimeString('2010-08-12 21:06:31.546875')
82
83    date_time_string = fake_time_object.CopyToDateTimeString()
84    self.assertEqual(date_time_string, '2010-08-12 21:06:31.546875')
85
86    fake_time_object = fake_time.FakeTime()
87    fake_time_object._number_of_seconds = None
88
89    date_time_string = fake_time_object.CopyToDateTimeString()
90    self.assertIsNone(date_time_string)
91
92  def testCopyToDateTimeStringISO8601(self):
93    """Tests the CopyToDateTimeStringISO8601 function."""
94    fake_time_object = fake_time.FakeTime()
95    fake_time_object.CopyFromDateTimeString('2010-08-12 21:06:31.546875')
96
97    date_time_string = fake_time_object.CopyToDateTimeStringISO8601()
98    self.assertEqual(date_time_string, '2010-08-12T21:06:31.546875Z')
99
100  def testGetDate(self):
101    """Tests the GetDate function."""
102    fake_time_object = fake_time.FakeTime()
103    fake_time_object.CopyFromDateTimeString('2010-08-12 21:06:31.546875')
104
105    date_tuple = fake_time_object.GetDate()
106    self.assertEqual(date_tuple, (2010, 8, 12))
107
108    fake_time_object = fake_time.FakeTime()
109    fake_time_object._number_of_seconds = None
110
111    date_tuple = fake_time_object.GetDate()
112    self.assertEqual(date_tuple, (None, None, None))
113
114  def testGetDateWithTimeOfDay(self):
115    """Tests the GetDateWithTimeOfDay function."""
116    fake_time_object = fake_time.FakeTime()
117    fake_time_object.CopyFromDateTimeString('2010-08-12 21:06:31.546875')
118
119    date_with_time_of_day_tuple = fake_time_object.GetDateWithTimeOfDay()
120    self.assertEqual(date_with_time_of_day_tuple, (2010, 8, 12, 21, 6, 31))
121
122    fake_time_object = fake_time.FakeTime()
123    fake_time_object._number_of_seconds = None
124
125    date_with_time_of_day_tuple = fake_time_object.GetDateWithTimeOfDay()
126    self.assertEqual(
127        date_with_time_of_day_tuple, (None, None, None, None, None, None))
128
129  def testGetTimeOfDay(self):
130    """Tests the GetTimeOfDay function."""
131    fake_time_object = fake_time.FakeTime()
132    fake_time_object.CopyFromDateTimeString('2010-08-12 21:06:31.546875')
133
134    time_of_day_tuple = fake_time_object.GetTimeOfDay()
135    self.assertEqual(time_of_day_tuple, (21, 6, 31))
136
137    fake_time_object = fake_time.FakeTime()
138    fake_time_object._number_of_seconds = None
139
140    time_of_day_tuple = fake_time_object.GetTimeOfDay()
141    self.assertEqual(time_of_day_tuple, (None, None, None))
142
143
144if __name__ == '__main__':
145  unittest.main()
146