def test_subscr(self): cb = CB() watch.config(callback=cb) a = [1, 2, 3] watch(a[1]) a[0] = 2 a[1] = 3 self.assertEqual(cb.counter, 1) with self.assertRaises(ValueError): watch(a[0:2]) def val(arg): return 1 a[val(3)] = 4 self.assertEqual(cb.counter, 2) unwatch() a = {"a": 1} watch(a["a"]) a["a"] = 2 a["b"] = 3 self.assertEqual(cb.counter, 3) unwatch()
def test_long(self): cb = CB() watch.config(callback=cb) a = [1, 2, 3] watch(a) a[1] = 0 self.assertEqual(cb.counter, 1) unwatch(a) a[1] = 1 self.assertEqual(cb.counter, 1) watch(a) a[1] = 0 self.assertEqual(cb.counter, 2) unwatch() a[1] = 2 self.assertEqual(cb.counter, 2) watch(a) a[1] = 0 self.assertEqual(cb.counter, 3) unwatch() a[1] = 2 self.assertEqual(cb.counter, 3) watch(a, alias="a") a[1] = 4 self.assertEqual(cb.counter, 4) unwatch("a") a[1] = 5 self.assertEqual(cb.counter, 4)
def test_printer(self): s = io.StringIO() with redirect_stdout(s): watch.config(file=sys.stdout) a = [1, 2, 3] watch(a) a[0] = 2 unwatch() self.assertNotEqual(s.getvalue(), "")
def test_stack_limit_global(self): watch.config(stack_limit=1) s = io.StringIO() with redirect_stdout(s): watch.config(file=sys.stdout) a = [1, 2, 3] watch(a) a[0] = 2 unwatch() self.assertEqual(s.getvalue().count("> "), 1)
def test_alias(self): cb = CB() watch.config(callback=cb) a = [1, 2, 3] watch(a, alias="a") a[1] = 4 self.assertEqual(cb.counter, 1) unwatch("a") a[1] = 5 self.assertEqual(cb.counter, 1)
def test_noargs(self): cb = CB() watch.config(callback=cb) a = [1, 2, 3] watch(a) a[1] = 0 self.assertEqual(cb.counter, 1) unwatch() a[1] = 2 self.assertEqual(cb.counter, 1)
def test_custom_printer(self): s = io.StringIO() with redirect_stdout(s): watch.config(file=sys.stdout) a = [i for i in range(100)] watch(a, custom_printer=print) a = [i + 1 for i in range(100)] unwatch() self.assertLess(s.getvalue().count("\n"), 100) with redirect_stdout(s): watch.config(file=sys.stdout, custom_printer=print) a = [i for i in range(100)] watch(a) a = [i + 1 for i in range(100)] unwatch() self.assertLess(s.getvalue().count("\n"), 100)
def test_attr(self): class MyObj: def __init__(self): self.a = 0 cb = CB() watch.config(callback=cb) obj = MyObj() watch(obj.a) obj.a = 1 self.assertEqual(cb.counter, 1) unwatch(obj.a) obj.a = 2 self.assertEqual(cb.counter, 1) watch(obj) obj.a = 3 self.assertEqual(cb.counter, 2) obj.a = 3 self.assertEqual(cb.counter, 2)
def test_basic(self): cb = CB() watch.config(callback=cb) a = [1, 2, 3] watch(a) a[0] = 2 a.append(4) b = a b.append(5) a = {"a": 1} a["b"] = 2 def change(d): d["c"] = 3 change(a) self.assertEqual(cb.counter, 6) unwatch()