[visitor_test] Add visitor tests
This commit is contained in:
parent
033e811c8f
commit
8fdf4d160e
@ -15,7 +15,7 @@ class Visitor(object):
|
|||||||
|
|
||||||
def wrapper(method):
|
def wrapper(method):
|
||||||
assert method.__name__ == "visit"
|
assert method.__name__ == "visit"
|
||||||
for clazzes,attrs in clazzes_attrs:
|
for clazzes, attrs in clazzes_attrs:
|
||||||
if type(clazzes) != tuple:
|
if type(clazzes) != tuple:
|
||||||
clazzes = (clazzes,)
|
clazzes = (clazzes,)
|
||||||
if type(attrs) == str:
|
if type(attrs) == str:
|
||||||
|
61
Tests/misc/visitor_test.py
Normal file
61
Tests/misc/visitor_test.py
Normal file
@ -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]
|
Loading…
x
Reference in New Issue
Block a user