diff options
Diffstat (limited to 'Tests/misc/transform_test.py')
-rw-r--r-- | Tests/misc/transform_test.py | 107 |
1 files changed, 99 insertions, 8 deletions
diff --git a/Tests/misc/transform_test.py b/Tests/misc/transform_test.py index 53d4a202..eaa16678 100644 --- a/Tests/misc/transform_test.py +++ b/Tests/misc/transform_test.py @@ -1,10 +1,15 @@ -from fontTools.misc.transform import Transform, Identity, Offset, Scale +from fontTools.misc.transform import ( + Transform, + Identity, + Offset, + Scale, + DecomposedTransform, +) import math import pytest class TransformTest(object): - def test_examples(self): t = Transform() assert repr(t) == "<Transform [1 0 0 1 0 0]>" @@ -19,9 +24,12 @@ class TransformTest(object): def test_transformPoints(self): t = Transform(2, 0, 0, 3, 0, 0) - assert t.transformPoints( - [(0, 0), (0, 100), (100, 100), (100, 0)] - ) == [(0, 0), (0, 300), (200, 300), (200, 0)] + assert t.transformPoints([(0, 0), (0, 100), (100, 100), (100, 0)]) == [ + (0, 0), + (0, 300), + (200, 300), + (200, 0), + ] def test_transformVector(self): t = Transform(2, 0, 0, 3, -10, 30) @@ -47,7 +55,8 @@ class TransformTest(object): assert t.rotate(-math.pi / 2) == Transform(0, -1, 1, 0, 0, 0) t = Transform() assert tuple(t.rotate(math.radians(30))) == pytest.approx( - tuple(Transform(0.866025, 0.5, -0.5, 0.866025, 0, 0))) + tuple(Transform(0.866025, 0.5, -0.5, 0.866025, 0, 0)) + ) def test_skew(self): t = Transform().skew(math.pi / 4) @@ -74,7 +83,7 @@ class TransformTest(object): def test_toPS(self): t = Transform().scale(2, 3).translate(4, 5) - assert t.toPS() == '[2 0 0 3 8 15]' + assert t.toPS() == "[2 0 0 3 8 15]" def test__ne__(self): assert Transform() != Transform(2, 0, 0, 2, 0, 0) @@ -90,7 +99,7 @@ class TransformTest(object): assert Transform(1, 0, 0, 1, 1, 0) def test__repr__(self): - assert repr(Transform(1, 2, 3, 4, 5, 6)) == '<Transform [1 2 3 4 5 6]>' + assert repr(Transform(1, 2, 3, 4, 5, 6)) == "<Transform [1 2 3 4 5 6]>" def test_Identity(self): assert isinstance(Identity, Transform) @@ -105,3 +114,85 @@ class TransformTest(object): assert Scale(1) == Transform(1, 0, 0, 1, 0, 0) assert Scale(2) == Transform(2, 0, 0, 2, 0, 0) assert Scale(1, 2) == Transform(1, 0, 0, 2, 0, 0) + + def test_decompose(self): + t = Transform(2, 0, 0, 3, 5, 7) + d = t.toDecomposed() + assert d.scaleX == 2 + assert d.scaleY == 3 + assert d.translateX == 5 + assert d.translateY == 7 + + def test_decompose(self): + t = Transform(-1, 0, 0, 1, 0, 0) + d = t.toDecomposed() + assert d.scaleX == -1 + assert d.scaleY == 1 + assert d.rotation == 0 + + t = Transform(1, 0, 0, -1, 0, 0) + d = t.toDecomposed() + assert d.scaleX == 1 + assert d.scaleY == -1 + assert d.rotation == 0 + + +class DecomposedTransformTest(object): + def test_identity(self): + t = DecomposedTransform() + assert ( + repr(t) + == "DecomposedTransform(translateX=0, translateY=0, rotation=0, scaleX=1, scaleY=1, skewX=0, skewY=0, tCenterX=0, tCenterY=0)" + ) + assert t == DecomposedTransform(scaleX=1.0) + + def test_scale(self): + t = DecomposedTransform(scaleX=2, scaleY=3) + assert t.scaleX == 2 + assert t.scaleY == 3 + + def test_toTransform(self): + t = DecomposedTransform(scaleX=2, scaleY=3) + assert t.toTransform() == (2, 0, 0, 3, 0, 0) + + @pytest.mark.parametrize( + "decomposed", + [ + DecomposedTransform(scaleX=1, scaleY=0), + DecomposedTransform(scaleX=0, scaleY=1), + DecomposedTransform(scaleX=1, scaleY=0, rotation=30), + DecomposedTransform(scaleX=0, scaleY=1, rotation=30), + DecomposedTransform(scaleX=1, scaleY=1), + DecomposedTransform(scaleX=-1, scaleY=1), + DecomposedTransform(scaleX=1, scaleY=-1), + DecomposedTransform(scaleX=-1, scaleY=-1), + DecomposedTransform(rotation=90), + DecomposedTransform(rotation=-90), + DecomposedTransform(skewX=45), + DecomposedTransform(skewY=45), + DecomposedTransform(scaleX=-1, skewX=45), + DecomposedTransform(scaleX=-1, skewY=45), + DecomposedTransform(scaleY=-1, skewX=45), + DecomposedTransform(scaleY=-1, skewY=45), + DecomposedTransform(scaleX=-1, skewX=45, rotation=30), + DecomposedTransform(scaleX=-1, skewY=45, rotation=30), + DecomposedTransform(scaleY=-1, skewX=45, rotation=30), + DecomposedTransform(scaleY=-1, skewY=45, rotation=30), + DecomposedTransform(scaleX=-1, skewX=45, rotation=-30), + DecomposedTransform(scaleX=-1, skewY=45, rotation=-30), + DecomposedTransform(scaleY=-1, skewX=45, rotation=-30), + DecomposedTransform(scaleY=-1, skewY=45, rotation=-30), + DecomposedTransform(scaleX=-2, skewX=45, rotation=30), + DecomposedTransform(scaleX=-2, skewY=45, rotation=30), + DecomposedTransform(scaleY=-2, skewX=45, rotation=30), + DecomposedTransform(scaleY=-2, skewY=45, rotation=30), + DecomposedTransform(scaleX=-2, skewX=45, rotation=-30), + DecomposedTransform(scaleX=-2, skewY=45, rotation=-30), + DecomposedTransform(scaleY=-2, skewX=45, rotation=-30), + DecomposedTransform(scaleY=-2, skewY=45, rotation=-30), + ], + ) + def test_roundtrip(lst, decomposed): + assert decomposed.toTransform().toDecomposed().toTransform() == pytest.approx( + tuple(decomposed.toTransform()) + ), decomposed |