def test_timed_call(self): def f(a, *, x=1, sleep_dur=0.1): sleep(sleep_dur) return a * x with captured_output() as (out, err): self.assertEqual(timed_call(f, 2, x=3, sleep_dur=0.11), 6) out = err() self.assertRegex(out, r'0\.1\d+s')
def test_make_timed(self): @make_timed def g(a, *, x=1, sleep_dur=0.1): sleep(sleep_dur) return a * x with captured_output() as (out, err): self.assertEqual(g(2, x=3, sleep_dur=0.11), 6) out = err() self.assertRegex(out, r'0\.1\d+s')
def test_tic_default(self): with captured_output() as (out, err): toc = tic() sleep(0.201) toc('1') sleep(.101) toc('2') out = err() err_lines = out.strip().split('\n') self.assertEqual(len(err_lines), 2) first, second = err_lines self.assertRegex(first, r'0\.2\d*s') self.assertRegex(second, r'0\.1\d*s')
def test_tic(self): with captured_output() as (out, err): toc = tic(fmt='__{message}:{diff:0.1f}:{total:0.1f}__') sleep(0.201) toc('1') sleep(.101) toc('2') out = err() err_lines = out.strip().split('\n') self.assertEqual(len(err_lines), 2) first, second = err_lines self.assertRegex(first, r'__1:0\.2:0\.2__') self.assertRegex(second, r'__2:0\.1:0\.3__')
def test_printer_assign_iterable(self): with captured_output() as (out, err): p = Printer() self.assertEqual(p.c, 500) p.b[0] = 0 self.assertEqual(p.c, 495) self.assertEqual(p.c, 495) p.b = [1, 2, 3] self.assertEqual(p.c, 6) self.assertEqual(p.c, 6) del p.a self.assertEqual(p.d, '250000') out = out() self.assertEqual(out.strip(), '\n'.join('Running {}'.format(s) for s in list('cbaccdcba')))
def test_logging_imports(self): from miniutils.logs import disable_logging disable_logging() with captured_output() as (out, err): import miniutils.logs_base as logger logger.logger = None # This is default, but might be altered by another earlier test logger.critical('__1__') from miniutils.logs import enable_logging log = enable_logging(use_colors=False, format_str=r'%(levelname)s|%(message)s') log.critical('__2__') logger.critical('__3__') err_lines = err().strip().split('\n') if len(err_lines) != 3: raise Exception('\n'.join(err_lines)) first, second, third = err_lines self.assertEqual(first, '__1__') # This is a hack because I'm not sure why coloring fails epically in unittests self.assertIn('__2__', second.lower()) self.assertIn('__3__', third.lower())
def test_cached_collection_mutable(self): p = Printer() with captured_output(): self.assertEqual(p.b[0], p.a)