mwchase icon

Over-engineering

mwchase | PRO | 05/19/17 10:38:42 PM UTC | 0 ⭐ | 838 👁️ | Never ⏰ | []
Python |

760 B

|

None

|

0 👍

/

0 👎

def test_next_visitor(visitor):
    Visitor = visitor.make_visitor()
 
    @Visitor.mark
    class Test1:
        pass
 
    @Visitor.mark
    class Test2(Test1):
        pass
 
    class Visitor1(Visitor):
        pass
 
    class Visitor2(Visitor1):
        pass
 
    @Visitor2.bind(Test2)
    def Visitor2(self, node, next_visitor):
        return 'a' + next_visitor('f')
 
    @Visitor1.bind(Test2)
    def Visitor1(self, node, next_visitor):
        return 'b' + next_visitor('f')
 
    @Visitor2.bind(Test1)
    def Visitor2(self, node, next_visitor):
        return 'c' + next_visitor('f')
 
    @Visitor1.bind(Test1)
    def Visitor1(self, node, next_visitor):
        return 'd' + next_visitor('e')
 
    assert Visitor2().visit(Test2()) == 'abcde'

Comments