def test_parse_time_duration(self):

        obj = TimeDuration()

        self.assertEqual(obj.parse_time_duration_to_seconds(1), 1.0)
        self.assertEqual(obj.get_period_as_string(), "1 sec")

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('1'), 1.0)
        self.assertEqual(obj.get_period_as_string(), "1 sec")

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('01'), 1.0)
        self.assertEqual(obj.get_period_as_string(), "1 sec")

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('0x01'), 1.0)
        self.assertEqual(obj.get_period_as_string(), "1 sec")

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('1 ms'), 0.001)
        self.assertEqual(obj.get_period_as_string(), '1 ms')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('1 msec'), 0.001)
        self.assertEqual(obj.get_period_as_string(), '1 ms')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('1 sec'), 1.0)
        self.assertEqual(obj.get_period_as_string(), '1 sec')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds(b'1 sec'), 1.0)
        self.assertEqual(obj.get_period_as_string(), '1 sec')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('1 second'), 1.0)
        self.assertEqual(obj.get_period_as_string(), '1 sec')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('1 min'), 60.0)
        self.assertEqual(obj.get_period_as_string(), '1 min')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('1 minute'), 60.0)
        self.assertEqual(obj.get_period_as_string(), '1 min')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('1 minutes'), 60.0)
        self.assertEqual(obj.get_period_as_string(), '1 min')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('1 hr'), 3600.0)
        self.assertEqual(obj.get_period_as_string(), '1 hr')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('1 HR'), 3600.0)
        self.assertEqual(obj.get_period_as_string(), '1 hr')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('1 Hours'), 3600.0)
        self.assertEqual(obj.get_period_as_string(), '1 hr')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('1 day'), 86400.0)
        self.assertEqual(obj.get_period_as_string(), '1 day')

        # note: these handled, but have NO 'seconds' result
        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('1 month'), None)
        self.assertEqual(obj.get_period_as_string(), '1 mon')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('1 year'), None)
        self.assertEqual(obj.get_period_as_string(), '1 yr')

        # repeat with more than 1 - a random value
        seed = random.randint(101, 999)
        source = "{0} ms".format(seed)
        expect_sec = seed * 0.001
        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds(source),
                         expect_sec)
        self.assertEqual(obj.get_period_as_string(), source)

        seed = random.randint(2, 59)
        source = "{0} sec".format(seed)
        expect_sec = seed * 1.0
        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds(source),
                         expect_sec)
        self.assertEqual(obj.get_period_as_string(), source)

        seed = random.randint(2, 59)
        source = "{0} min".format(seed)
        expect_sec = seed * 60.0
        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds(source),
                         expect_sec)
        self.assertEqual(obj.get_period_as_string(), source)

        seed = random.randint(2, 23)
        source = "{0} hr".format(seed)
        expect_sec = seed * 3600.0
        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds(source),
                         expect_sec)
        self.assertEqual(obj.get_period_as_string(), source)

        seed = random.randint(2, 9)
        source = "{0} day".format(seed)
        expect_sec = seed * 86400.0
        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds(source),
                         expect_sec)
        self.assertEqual(obj.get_period_as_string(), source)

        # note: these handled, but have NO 'seconds' result
        seed = random.randint(2, 9)
        source = "{0} mon".format(seed)
        expect_sec = None
        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds(source),
                         expect_sec)
        self.assertEqual(obj.get_period_as_string(), source)

        seed = random.randint(2, 9)
        source = "{0} yr".format(seed)
        expect_sec = None
        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds(source),
                         expect_sec)
        self.assertEqual(obj.get_period_as_string(), source)

        return
    def test_parse_time_duration_plus_minus(self):

        obj = TimeDuration()
        # check the signs - +/- to allow things like "do 5 minutes before X"

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('+1 ms'), 0.001)
        self.assertEqual(obj.get_period_as_string(), '1 ms')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('-1 ms'), -0.001)
        self.assertEqual(obj.get_period_as_string(), '-1 ms')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('+1 sec'), 1.0)
        self.assertEqual(obj.get_period_as_string(), '1 sec')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds(b'-1 sec'), -1.0)
        self.assertEqual(obj.get_period_as_string(), '-1 sec')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('+1 min'), 60.0)
        self.assertEqual(obj.get_period_as_string(), '1 min')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('-5 min'), -300.0)
        self.assertEqual(obj.get_period_as_string(), '-5 min')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('+2 hr'), 7200.0)
        self.assertEqual(obj.get_period_as_string(), '2 hr')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('-3 hr'), -10800.0)
        self.assertEqual(obj.get_period_as_string(), '-3 hr')

        # confirm the UTC 'decoration' is ignored,
        # including ('z', 'zulu', 'gm', 'utc', 'uct')
        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('+1 ms utc'),
                         0.001)
        self.assertEqual(obj.get_period_as_string(), '1 ms')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('-1 ms UTC'),
                         -0.001)
        self.assertEqual(obj.get_period_as_string(), '-1 ms')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('+1 sec z'), 1.0)
        self.assertEqual(obj.get_period_as_string(), '1 sec')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds(b'-1 sec Z'), -1.0)
        self.assertEqual(obj.get_period_as_string(), '-1 sec')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('+1 min gm'), 60.0)
        self.assertEqual(obj.get_period_as_string(), '1 min')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('-5 min GM'),
                         -300.0)
        self.assertEqual(obj.get_period_as_string(), '-5 min')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('+2 hr uct'),
                         7200.0)
        self.assertEqual(obj.get_period_as_string(), '2 hr')

        obj.reset()
        self.assertEqual(obj.parse_time_duration_to_seconds('-3 hr zulu'),
                         -10800.0)
        self.assertEqual(obj.get_period_as_string(), '-3 hr')

        return