Mercurial > repos > shellac > guppy_basecaller
comparison env/lib/python3.7/site-packages/isodate/tests/test_strf.py @ 5:9b1c78e6ba9c draft default tip
"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
| author | shellac |
|---|---|
| date | Mon, 01 Jun 2020 08:59:25 -0400 |
| parents | 79f47841a781 |
| children |
comparison
equal
deleted
inserted
replaced
| 4:79f47841a781 | 5:9b1c78e6ba9c |
|---|---|
| 1 ############################################################################## | |
| 2 # Copyright 2009, Gerhard Weis | |
| 3 # All rights reserved. | |
| 4 # | |
| 5 # Redistribution and use in source and binary forms, with or without | |
| 6 # modification, are permitted provided that the following conditions are met: | |
| 7 # | |
| 8 # * Redistributions of source code must retain the above copyright notice, | |
| 9 # this list of conditions and the following disclaimer. | |
| 10 # * Redistributions in binary form must reproduce the above copyright notice, | |
| 11 # this list of conditions and the following disclaimer in the documentation | |
| 12 # and/or other materials provided with the distribution. | |
| 13 # * Neither the name of the authors nor the names of its contributors | |
| 14 # may be used to endorse or promote products derived from this software | |
| 15 # without specific prior written permission. | |
| 16 # | |
| 17 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
| 18 # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
| 19 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
| 20 # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | |
| 21 # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
| 22 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
| 23 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
| 24 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
| 25 # CONTRACT, STRICT LIABILITY, OR TORT | |
| 26 ############################################################################## | |
| 27 ''' | |
| 28 Test cases for the isodate module. | |
| 29 ''' | |
| 30 import unittest | |
| 31 import time | |
| 32 from datetime import datetime, timedelta | |
| 33 from isodate import strftime | |
| 34 from isodate import LOCAL | |
| 35 from isodate import DT_EXT_COMPLETE | |
| 36 from isodate import tzinfo | |
| 37 | |
| 38 | |
| 39 TEST_CASES = ((datetime(2012, 12, 25, 13, 30, 0, 0, LOCAL), DT_EXT_COMPLETE, | |
| 40 "2012-12-25T13:30:00+10:00"), | |
| 41 # DST ON | |
| 42 (datetime(1999, 12, 25, 13, 30, 0, 0, LOCAL), DT_EXT_COMPLETE, | |
| 43 "1999-12-25T13:30:00+11:00"), | |
| 44 # microseconds | |
| 45 (datetime(2012, 10, 12, 8, 29, 46, 69178), | |
| 46 "%Y-%m-%dT%H:%M:%S.%f", | |
| 47 "2012-10-12T08:29:46.069178"), | |
| 48 (datetime(2012, 10, 12, 8, 29, 46, 691780), | |
| 49 "%Y-%m-%dT%H:%M:%S.%f", | |
| 50 "2012-10-12T08:29:46.691780"), | |
| 51 ) | |
| 52 | |
| 53 | |
| 54 def create_testcase(dt, format, expectation): | |
| 55 """ | |
| 56 Create a TestCase class for a specific test. | |
| 57 | |
| 58 This allows having a separate TestCase for each test tuple from the | |
| 59 TEST_CASES list, so that a failed test won't stop other tests. | |
| 60 """ | |
| 61 | |
| 62 class TestDate(unittest.TestCase): | |
| 63 ''' | |
| 64 A test case template to test ISO date formatting. | |
| 65 ''' | |
| 66 | |
| 67 # local time zone mock function | |
| 68 def localtime_mock(self, secs): | |
| 69 """ | |
| 70 mock time.localtime so that it always returns a time_struct with | |
| 71 tm_idst=1 | |
| 72 """ | |
| 73 tt = self.ORIG['localtime'](secs) | |
| 74 # befor 2000 everything is dst, after 2000 no dst. | |
| 75 if tt.tm_year < 2000: | |
| 76 dst = 1 | |
| 77 else: | |
| 78 dst = 0 | |
| 79 tt = (tt.tm_year, tt.tm_mon, tt.tm_mday, | |
| 80 tt.tm_hour, tt.tm_min, tt.tm_sec, | |
| 81 tt.tm_wday, tt.tm_yday, dst) | |
| 82 return time.struct_time(tt) | |
| 83 | |
| 84 def setUp(self): | |
| 85 self.ORIG = {} | |
| 86 self.ORIG['STDOFFSET'] = tzinfo.STDOFFSET | |
| 87 self.ORIG['DSTOFFSET'] = tzinfo.DSTOFFSET | |
| 88 self.ORIG['DSTDIFF'] = tzinfo.DSTDIFF | |
| 89 self.ORIG['localtime'] = time.localtime | |
| 90 # ovveride all saved values with fixtures. | |
| 91 # calculate LOCAL TZ offset, so that this test runs in | |
| 92 # every time zone | |
| 93 tzinfo.STDOFFSET = timedelta(seconds=36000) # assume LOC = +10:00 | |
| 94 tzinfo.DSTOFFSET = timedelta(seconds=39600) # assume DST = +11:00 | |
| 95 tzinfo.DSTDIFF = tzinfo.DSTOFFSET - tzinfo.STDOFFSET | |
| 96 time.localtime = self.localtime_mock | |
| 97 | |
| 98 def tearDown(self): | |
| 99 # restore test fixtures | |
| 100 tzinfo.STDOFFSET = self.ORIG['STDOFFSET'] | |
| 101 tzinfo.DSTOFFSET = self.ORIG['DSTOFFSET'] | |
| 102 tzinfo.DSTDIFF = self.ORIG['DSTDIFF'] | |
| 103 time.localtime = self.ORIG['localtime'] | |
| 104 | |
| 105 def test_format(self): | |
| 106 ''' | |
| 107 Take date object and create ISO string from it. | |
| 108 This is the reverse test to test_parse. | |
| 109 ''' | |
| 110 if expectation is None: | |
| 111 self.assertRaises(AttributeError, | |
| 112 strftime(dt, format)) | |
| 113 else: | |
| 114 self.assertEqual(strftime(dt, format), | |
| 115 expectation) | |
| 116 | |
| 117 return unittest.TestLoader().loadTestsFromTestCase(TestDate) | |
| 118 | |
| 119 | |
| 120 def test_suite(): | |
| 121 ''' | |
| 122 Construct a TestSuite instance for all test cases. | |
| 123 ''' | |
| 124 suite = unittest.TestSuite() | |
| 125 for dt, format, expectation in TEST_CASES: | |
| 126 suite.addTest(create_testcase(dt, format, expectation)) | |
| 127 return suite | |
| 128 | |
| 129 | |
| 130 # load_tests Protocol | |
| 131 def load_tests(loader, tests, pattern): | |
| 132 return test_suite() | |
| 133 | |
| 134 | |
| 135 if __name__ == '__main__': | |
| 136 unittest.main(defaultTest='test_suite') |
