def test_reference__cyclic_reference(self):
        a = FuncCallReference(True, None)
        a.func_ref = a
        with self.assertRaises(CyclicReferenceError):
            a.deref(Context())

        repr(a)  # make sure it doesn't raise an exception
    def test_reference__cyclic_reference(self):
        a = FuncCallReference(True, None)
        a.func_ref = a
        with self.assertRaises(CyclicReferenceError):
            a.deref(Context())

        repr(a)  # make sure it doesn't raise an exception
    def test_func_call_reference(self):
        def foo(value, add=0):
            return value + add

        foo_ref = FuncCallReference(True, foo, 5, add=7)
        self.assertEqual(12, foo_ref.deref(Context()))

        foo_ref = FuncCallReference(True, foo, 5)
        self.assertEqual(5, foo_ref.deref(Context()))

        foo_ref = FuncCallReference(True,
                                    foo,
                                    ObjectReference(True, 5),
                                    add=ObjectReference(True, 7))
        self.assertEqual(12, foo_ref.deref(Context()))
    def test_func_call_reference(self):
        def foo(value, add=0):
            return value + add

        foo_ref = FuncCallReference(True, foo, 5, add=7)
        self.assertEqual(12, foo_ref.deref(Context()))

        foo_ref = FuncCallReference(True, foo, 5)
        self.assertEqual(5, foo_ref.deref(Context()))

        foo_ref = FuncCallReference(True, foo, ObjectReference(True, 5), add=ObjectReference(True, 7))
        self.assertEqual(12, foo_ref.deref(Context()))