class TestViewCell(unittest.TestCase): def setUp(self): self.lc = LooseCell(value=0, key='a', type=int) self.vc = ViewCell( base=self.lc, get_transform=lambda x: x + 1, set_transform=lambda x: x - 1, key='b', type=int) def test_get_set(self): self.assertEqual(0, self.lc.get()) self.assertEqual(1, self.vc.get()) self.vc.set(2) self.assertEqual(1, self.lc.get()) self.assertEqual(2, self.vc.get()) self.lc.set(3) self.assertEqual(3, self.lc.get()) self.assertEqual(4, self.vc.get()) def test_subscription(self): fired = [] def f(): fired.append(self.vc.get()) self.vc.subscribe(f) self.lc.set(1) self.assertEqual([2], fired)
class TestViewCell(unittest.TestCase): def setUp(self): self.lc = LooseCell(value=0, type=RangeT([(-100, 100)]), writable=True) self.delta = 1 self.vc = ViewCell( base=self.lc, get_transform=lambda x: x + self.delta, set_transform=lambda x: x - self.delta, type=int, writable=True, interest_tracker=LoopbackInterestTracker()) # TODO: Add tests for behavior when the transform is not perfectly one-to-one (such as due to floating-point error). # TODO: Test propagation of interest def test_get_set(self): self.assertEqual(0, self.lc.get()) self.assertEqual(1, self.vc.get()) self.vc.set(2) self.assertEqual(1, self.lc.get()) self.assertEqual(2, self.vc.get()) self.lc.set(3) self.assertEqual(3, self.lc.get()) self.assertEqual(4, self.vc.get()) self.delta = 10 self.vc.changed_transform() self.assertEqual(3, self.lc.get()) self.assertEqual(13, self.vc.get()) def test_subscription(self): st = CellSubscriptionTester(self.vc) self.lc.set(1) st.expect_now(2) self.delta = 10 self.vc.changed_transform() self.assertEqual(1, self.lc.get()) st.expect_now(11) st.unsubscribe() self.lc.set(2) st.advance() def test_coerced_base_value(self): self.vc.set(999) # out of base cell's range, gets clamped self.assertEqual(100 + self.delta, self.vc.get())