From 8fdf4d160e9244dcb91e675ba238c0dde6e03bcc Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Mon, 15 Aug 2022 22:22:23 -0600 Subject: [PATCH] [visitor_test] Add visitor tests --- Lib/fontTools/misc/visitor.py | 2 +- Tests/misc/visitor_test.py | 61 +++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 Tests/misc/visitor_test.py diff --git a/Lib/fontTools/misc/visitor.py b/Lib/fontTools/misc/visitor.py index aa20e1cb1..d67bb14f8 100644 --- a/Lib/fontTools/misc/visitor.py +++ b/Lib/fontTools/misc/visitor.py @@ -15,7 +15,7 @@ class Visitor(object): def wrapper(method): assert method.__name__ == "visit" - for clazzes,attrs in clazzes_attrs: + for clazzes, attrs in clazzes_attrs: if type(clazzes) != tuple: clazzes = (clazzes,) if type(attrs) == str: diff --git a/Tests/misc/visitor_test.py b/Tests/misc/visitor_test.py new file mode 100644 index 000000000..8fd2d995a --- /dev/null +++ b/Tests/misc/visitor_test.py @@ -0,0 +1,61 @@ +from fontTools.misc.visitor import Visitor +import pytest + + +class A: + def __init__(self): + self.a = 1 + self.b = [2, 3] + self.c = {4: 5, 6: 7} + self._d = 8 + self.e = 9 + 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", 9, 10]