def test_timer(self): def runner(timer): assert timer.started is False assert timer.elapsed is None with self.assertRaises(RuntimeError): timer.stop() timer.start() assert timer.elapsed is None assert timer.started is True with self.assertRaises(RuntimeError): timer.start() timer.stop() assert timer.started is False assert isinstance(timer.elapsed, float) assert timer.tags == {'foo': 'bar'} timer = Timer({"foo": "bar"}) runner(timer) cloned = timer.clone() assert timer is not cloned runner(cloned)