diff options
Diffstat (limited to 'Tests/misc/visitor_test.py')
-rw-r--r-- | Tests/misc/visitor_test.py | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/Tests/misc/visitor_test.py b/Tests/misc/visitor_test.py new file mode 100644 index 00000000..fe71e08f --- /dev/null +++ b/Tests/misc/visitor_test.py @@ -0,0 +1,72 @@ +from fontTools.misc.visitor import Visitor +import enum +import pytest + + +class E(enum.Enum): + E1 = 1 + E2 = 2 + E3 = 3 + +class A: + def __init__(self): + self.a = 1 + self.b = [2, 3] + self.c = {4: 5, 6: 7} + self._d = 8 + self.e = E.E2 + self.f = 10 + + +class B: + def __init__(self): + self.a = A() + + +class TestVisitor(Visitor): + def __init__(self): + self.value = [] + + def _add(self, s): + self.value.append(s) + + def visitLeaf(self, obj): + self._add(obj) + super().visitLeaf(obj) + + +@TestVisitor.register(A) +def visit(self, obj): + self._add("A") + + +@TestVisitor.register_attrs([(A, "e")]) +def visit(self, obj, attr, value): + self._add(attr) + self._add(value) + return False + + +@TestVisitor.register(B) +def visit(self, obj): + self._add("B") + self.visitObject(obj) + return False + + +@TestVisitor.register_attr(B, "a") +def visit(self, obj, attr, value): + self._add("B a") + + +class VisitorTest(object): + def test_visitor(self): + b = B() + visitor = TestVisitor() + visitor.visit(b) + assert visitor.value == ["B", "B a", "A", 1, 2, 3, 5, 7, "e", E.E2, 10] + + visitor.value = [] + visitor.defaultStop = True + visitor.visit(b) + assert visitor.value == ["B", "B a"] |