コード例 #1
0
    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()
コード例 #2
0
 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)
コード例 #3
0
 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(), "")
コード例 #4
0
 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)
コード例 #5
0
 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)
コード例 #6
0
 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)
コード例 #7
0
    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)
コード例 #8
0
    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)
コード例 #9
0
    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()