aboutsummaryrefslogtreecommitdiff
path: root/Tests/misc/transform_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/misc/transform_test.py')
-rw-r--r--Tests/misc/transform_test.py107
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