Пример #1
0
    def xxtestRelativeSpeedOfAll(self):
        from time import time
        class A(Observable):
            def f(self):
                raise StopIteration(None)
                yield
        root = Observable()
        connector = Transparent()
        root.addObserver(connector)
        connector.addObserver(A())
        connector.addObserver(A())
        connector.addObserver(A())
        connector.addObserver(A())
        connector.addObserver(A())
        connector.addObserver(A())
        connector.addObserver(A())
        t = 0.0
        for _ in xrange(10000):
            g = compose(root.all.f())
            t0 = time()
            for _ in g:
                g.next()
            t1 = time()
            t += t1 - t0
        print t

        def f():
            for _ in xrange(10000):
                g = compose(root.all.f())
                for _ in g:
                    g.next()
Пример #2
0
 def testUnknownDispatchingNoImplementation(self):
     observable = Observable()
     class A(object):
         pass
     observable.addObserver(A())
     retval = observable.all.unknown('non_existing_method', 'one')
     self.assertEquals([], list(compose(retval)))
    def testDirectedMessagesCanAlsoBeAcceptedByObjects(self):
        observable = Observable()
        called = []
        class Y(object):
            def method(this):
                called.append("Y")
                return
                yield
            def observable_name(this):
                return 'name'
        class Z(object):
            def method(this):
                called.append("Z")
                return
                yield
        observable.addObserver(Y())
        observable.addObserver(Z())

        list(compose(observable.all["name"].method()))
        
        self.assertEquals(['Y'], called)

        del called[:]

        list(compose(observable.all.method()))

        self.assertEquals(['Y', "Z"], called)

        del called[:]

        list(compose(observable.all["other"].method()))

        self.assertEquals([], called)
Пример #4
0
    def xxtestRelativeSpeedOfAll(self):
        from time import time

        class A(Observable):
            def f(self):
                raise StopIteration(None)
                yield

        root = Observable()
        connector = Transparent()
        root.addObserver(connector)
        connector.addObserver(A())
        connector.addObserver(A())
        connector.addObserver(A())
        connector.addObserver(A())
        connector.addObserver(A())
        connector.addObserver(A())
        connector.addObserver(A())
        t = 0.0
        for _ in xrange(10000):
            g = compose(root.all.f())
            t0 = time()
            for _ in g:
                g.next()
            t1 = time()
            t += t1 - t0
        print t

        def f():
            for _ in xrange(10000):
                g = compose(root.all.f())
                for _ in g:
                    g.next()
 def testDeferredObjectsAreCached(self):
     observable = Observable()
     class A(Observable):
         pass
     observable.addObserver(A("name"))
     d1 = observable.all["name"]
     d2 = observable.all["name"]
     self.assertEquals(d1, d2) 
Пример #6
0
 def testUnknownDispatching(self):
     observable = Observable()
     class Listener(object):
         def method(inner, one):
             return one + " another"
     observable.addObserver(Listener())
     retval = observable.call.unknown('method', 'one')
     self.assertEquals('one another', retval)
Пример #7
0
 def testUnknownDispatchingBackToUnknown(self):
     observable = Observable()
     class A(object):
         def call_unknown(self, message, one):
             return "via unknown " + one
     observable.addObserver(A())
     retval = observable.call.unknown('non_existing_method', 'one')
     self.assertEquals("via unknown one", retval)
Пример #8
0
 def testNoLeakingGeneratorsInCycle(self):
     class Responder(Observable):
         def message(self):
             yield 'response'
     obs = Observable()
     obs.addObserver(Responder())
     result = compose(obs.all.message()).next()
     self.assertEquals('response',result)
     del obs
Пример #9
0
 def testDeferredObjectsAreCached(self):
     class A(object):
         def a(self):
             pass
     observable = Observable()
     observable.addObserver(A())
     f1 = observable.all.f
     f2 = observable.all.f
     self.assertEquals(f1, f2)
Пример #10
0
    def testUnknownDispatchingNoImplementation(self):
        observable = Observable()

        class A(object):
            pass

        observable.addObserver(A())
        retval = observable.all.unknown('non_existing_method', 'one')
        self.assertEquals([], list(compose(retval)))
Пример #11
0
    def testNoLeakingGeneratorsInCycle(self):
        class Responder(Observable):
            def message(self):
                yield 'response'

        obs = Observable()
        obs.addObserver(Responder())
        result = compose(obs.all.message()).next()
        self.assertEquals('response', result)
        del obs
Пример #12
0
 def testProperErrorMessageWhenArgsDoNotMatch(self):
     observable = Observable()
     class YesObserver:
         def yes(self, oneArg): pass
     observable.addObserver(YesObserver())
     try:
         answer = observable.call.yes()
         self.fail('should raise TypeError')
     except TypeError, e:
         self.assertEquals('yes() takes exactly 2 arguments (1 given)', str(e))
Пример #13
0
    def testUnknownDispatching(self):
        observable = Observable()

        class Listener(object):
            def method(inner, one):
                return one + " another"

        observable.addObserver(Listener())
        retval = observable.call.unknown('method', 'one')
        self.assertEquals('one another', retval)
Пример #14
0
    def testUnknownDispatchingBackToUnknown(self):
        observable = Observable()

        class A(object):
            def call_unknown(self, message, one):
                return "via unknown " + one

        observable.addObserver(A())
        retval = observable.call.unknown('non_existing_method', 'one')
        self.assertEquals("via unknown one", retval)
    def testDeferredObjectsAreCached(self):
        observable = Observable()

        class A(Observable):
            pass

        observable.addObserver(A("name"))
        d1 = observable.all["name"]
        d2 = observable.all["name"]
        self.assertEquals(d1, d2)
Пример #16
0
    def testDeferredObjectsAreCached(self):
        class A(object):
            def a(self):
                pass

        observable = Observable()
        observable.addObserver(A())
        f1 = observable.all.f
        f2 = observable.all.f
        self.assertEquals(f1, f2)
Пример #17
0
 def testUnknownIsEquivalentToNormalCall(self):
     observable = Observable()
     class A(object):
         def normal(self):
             return 'normal'
         def call_unknown(self, message, *args, **kwargs):
             return 'normal'
     observable.addObserver(A())
     result1 = observable.call.unknown('normal')
     result2 = observable.call.unknown('other')
     self.assertEquals(result1, result2)
Пример #18
0
    def testFixUpExceptionTraceBack(self):
        class A:
            def a(self):
                raise Exception('A.a')

            def any_unknown(self, msg, *args, **kwargs):
                yield self.a()

        observable = Observable()
        observable.addObserver(A())
        try:
            list(compose(observable.any.a()))
        except Exception:
            self.assertFunctionsOnTraceback("testFixUpExceptionTraceBack", "a")
        else:
            self.fail('Should not happen.')

        try:
            list(compose(observable.all.a()))
        except Exception:
            self.assertFunctionsOnTraceback("testFixUpExceptionTraceBack", "a")
        else:
            self.fail('Should not happen.')

        try:
            observable.do.a()
        except Exception:
            self.assertFunctionsOnTraceback("testFixUpExceptionTraceBack", "a")
        else:
            self.fail('Should not happen.')

        try:
            observable.call.a()
        except Exception:
            self.assertFunctionsOnTraceback("testFixUpExceptionTraceBack", "a")
        else:
            self.fail('Should not happen.')

        try:
            list(compose(observable.any.unknown('a')))
        except Exception:
            self.assertFunctionsOnTraceback("testFixUpExceptionTraceBack", "a")
        else:
            self.fail('Should not happen.')

        try:
            list(
                compose(
                    observable.any.somethingNotThereButHandledByUnknown('a')))
        except Exception:
            self.assertFunctionsOnTraceback("testFixUpExceptionTraceBack",
                                            "any_unknown", "a")
        else:
            self.fail('Should not happen.')
Пример #19
0
 def testNoLeakingGeneratorsInMultiTransparents(self):
     class Responder(Observable):
         def message(self):
             return 'response'
     obs = Observable()
     t1 = Transparent()
     t2 = Transparent()
     obs.addObserver(t1)
     t1.addObserver(t2)
     t2.addObserver(Responder())
     result = obs.call.message()
     self.assertEquals('response', result)
     del obs, t1, t2, result
    def testUndirectedObserverMessagingIsUnaffectedByObserverName(self):
        observable = Observable()
        called = []

        class A(Observable):
            def method(this):
                called.append(("A", this.observable_name()))
                return
                yield

        class B(Observable):
            def method(this):
                called.append(("B", this.observable_name()))
                return
                yield

        observable.addObserver(A("name"))
        observable.addObserver(A().observable_setName("anothername"))
        observable.addObserver(B("anothername"))
        observable.addObserver(B())

        list(compose(observable.all.method()))

        self.assertEquals([("A", "name"), ("A", "anothername"),
                           ("B", "anothername"), ("B", None)], called)
        del called[:]

        list(compose(observable.all["name"].method()))
        self.assertEquals([("A", "name")], called)
Пример #21
0
    def testProperErrorMessageWhenArgsDoNotMatch(self):
        observable = Observable()

        class YesObserver:
            def yes(self, oneArg):
                pass

        observable.addObserver(YesObserver())
        try:
            answer = observable.call.yes()
            self.fail('should raise TypeError')
        except TypeError, e:
            self.assertEquals('yes() takes exactly 2 arguments (1 given)',
                              str(e))
Пример #22
0
    def testUnknownIsEquivalentToNormalCall(self):
        observable = Observable()

        class A(object):
            def normal(self):
                return 'normal'

            def call_unknown(self, message, *args, **kwargs):
                return 'normal'

        observable.addObserver(A())
        result1 = observable.call.unknown('normal')
        result2 = observable.call.unknown('other')
        self.assertEquals(result1, result2)
    def testUndirectedObserverMessagingIsUnaffectedByObserverName(self):
        observable = Observable()
        called = []
        class A(Observable):
            def method(this):
                called.append(("A", this.observable_name()))
                return
                yield
        
        class B(Observable):
            def method(this):
                called.append(("B", this.observable_name()))
                return
                yield

        observable.addObserver(A("name"))
        observable.addObserver(A().observable_setName("anothername"))
        observable.addObserver(B("anothername"))
        observable.addObserver(B())

        list(compose(observable.all.method()))
        
        self.assertEquals([("A", "name"), 
            ("A", "anothername"), 
            ("B", "anothername"), 
            ("B", None)], called)
        del called[:]

        list(compose(observable.all["name"].method()))
        self.assertEquals([("A", "name")], called)
    def testDirectedObserverMessagingDoesNotBreakUndirectedCall(self):
        observable = Observable()
        called = []
        class A(Observable):
            def method(this):
                called.append("A")
                return
                yield
        observable.addObserver(A("name"))

        list(compose(observable.all["name"].method()))
        list(compose(observable.all["name"].method()))
        
        self.assertEquals(["A", "A"], called)
Пример #25
0
    def testNoLeakingGeneratorsInMultiTransparents(self):
        class Responder(Observable):
            def message(self):
                return 'response'

        obs = Observable()
        t1 = Transparent()
        t2 = Transparent()
        obs.addObserver(t1)
        t1.addObserver(t2)
        t2.addObserver(Responder())
        result = obs.call.message()
        self.assertEquals('response', result)
        del obs, t1, t2, result
Пример #26
0
    def testFixUpExceptionTraceBack(self):
        class A:
            def a(self):
                raise Exception('A.a')
            def any_unknown(self, msg, *args, **kwargs):
                yield self.a()
        observable = Observable()
        observable.addObserver(A())
        try:
            list(compose(observable.any.a()))
        except Exception:
            self.assertFunctionsOnTraceback("testFixUpExceptionTraceBack", "a")
        else:
            self.fail('Should not happen.')

        try:
            list(compose(observable.all.a()))
        except Exception:
            self.assertFunctionsOnTraceback("testFixUpExceptionTraceBack", "a")
        else:
            self.fail('Should not happen.')

        try:
            observable.do.a()
        except Exception:
            self.assertFunctionsOnTraceback("testFixUpExceptionTraceBack", "a")
        else:
            self.fail('Should not happen.')

        try:
            observable.call.a()
        except Exception:
            self.assertFunctionsOnTraceback("testFixUpExceptionTraceBack", "a")
        else:
            self.fail('Should not happen.')

        try:
            list(compose(observable.any.unknown('a')))
        except Exception:
            self.assertFunctionsOnTraceback("testFixUpExceptionTraceBack", "a")
        else:
            self.fail('Should not happen.')

        try:
            list(compose(observable.any.somethingNotThereButHandledByUnknown('a')))
        except Exception:
            self.assertFunctionsOnTraceback("testFixUpExceptionTraceBack", "any_unknown", "a")
        else:
            self.fail('Should not happen.')
    def testDirectedObserverMessagingDoesNotBreakUndirectedCall(self):
        observable = Observable()
        called = []

        class A(Observable):
            def method(this):
                called.append("A")
                return
                yield

        observable.addObserver(A("name"))

        list(compose(observable.all["name"].method()))
        list(compose(observable.all["name"].method()))

        self.assertEquals(["A", "A"], called)
    def testDirectedObserverMessagingIgnoresNonObservableObservers(self):
        observable = Observable()
        called = []
        class Z(object):
            def method(this):
                called.append("Z")
                return
                yield
        observable.addObserver(Z())

        list(compose(observable.all["name"].method()))
        
        self.assertEquals([], called)

        list(compose(observable.all.method()))

        self.assertEquals(["Z"], called)
Пример #29
0
 def testThrow(self):
     class A(Observable):
         def f1(self):
             yield "A:f1-1"
             yield "A:f1-2"
             yield "A:f1-3"
     class B(Observable):
         def f1(self):
             yield "B:f1-1"
             yield "B:f1-2"
             yield "B:f1-3"
     root = Observable()
     root.addObserver(A())
     root.addObserver(B())
     g = compose(root.all.f1())
     g.next()
     r = g.throw(DeclineMessage)
     self.assertEquals("B:f1-1", r)
    def testDirectedObserverMessagingIgnoresNonObservableObservers(self):
        observable = Observable()
        called = []

        class Z(object):
            def method(this):
                called.append("Z")
                return
                yield

        observable.addObserver(Z())

        list(compose(observable.all["name"].method()))

        self.assertEquals([], called)

        list(compose(observable.all.method()))

        self.assertEquals(["Z"], called)
Пример #31
0
    def testThrow(self):
        class A(Observable):
            def f1(self):
                yield "A:f1-1"
                yield "A:f1-2"
                yield "A:f1-3"

        class B(Observable):
            def f1(self):
                yield "B:f1-1"
                yield "B:f1-2"
                yield "B:f1-3"

        root = Observable()
        root.addObserver(A())
        root.addObserver(B())
        g = compose(root.all.f1())
        g.next()
        r = g.throw(DeclineMessage)
        self.assertEquals("B:f1-1", r)
Пример #32
0
 def testRebuildDefersAfterAddObserver(self):
     observable = Observable()
     called = []
     class A(Observable):
         def method(this):
             called.append("A")
             return
             yield
     class B(Observable):
         def method(this):
             called.append("B")
             return
             yield
     observable.addObserver(A())
     list(compose(observable.all.method()))
     self.assertEquals(['A'], called)
     del called[:]
     observable.addObserver(B())
     list(compose(observable.all.method()))
     self.assertEquals(['A', 'B'], called)
Пример #33
0
    def testRebuildDefersAfterAddObserver(self):
        observable = Observable()
        called = []

        class A(Observable):
            def method(this):
                called.append("A")
                return
                yield

        class B(Observable):
            def method(this):
                called.append("B")
                return
                yield

        observable.addObserver(A())
        list(compose(observable.all.method()))
        self.assertEquals(['A'], called)
        del called[:]
        observable.addObserver(B())
        list(compose(observable.all.method()))
        self.assertEquals(['A', 'B'], called)
    def testDirectedMessagesCanAlsoBeAcceptedByObjects(self):
        observable = Observable()
        called = []

        class Y(object):
            def method(this):
                called.append("Y")
                return
                yield

            def observable_name(this):
                return 'name'

        class Z(object):
            def method(this):
                called.append("Z")
                return
                yield

        observable.addObserver(Y())
        observable.addObserver(Z())

        list(compose(observable.all["name"].method()))

        self.assertEquals(['Y'], called)

        del called[:]

        list(compose(observable.all.method()))

        self.assertEquals(['Y', "Z"], called)

        del called[:]

        list(compose(observable.all["other"].method()))

        self.assertEquals([], called)