Home | History | Annotate | Download | only in misc
      1 from __future__ import print_function, division, absolute_import
      2 from fontTools.misc.py23 import *
      3 from fontTools.misc.transform import Transform, Identity, Offset, Scale
      4 import math
      5 import pytest
      6 
      7 
      8 class TransformTest(object):
      9 
     10     def test_examples(self):
     11         t = Transform()
     12         assert repr(t) == "<Transform [1 0 0 1 0 0]>"
     13         assert t.scale(2) == Transform(2, 0, 0, 2, 0, 0)
     14         assert t.scale(2.5, 5.5) == Transform(2.5, 0, 0, 5.5, 0, 0)
     15         assert t.scale(2, 3).transformPoint((100, 100)) == (200, 300)
     16 
     17     def test__init__(self):
     18         assert Transform(12) == Transform(12, 0, 0, 1, 0, 0)
     19         assert Transform(dx=12) == Transform(1, 0, 0, 1, 12, 0)
     20         assert Transform(yx=12) == Transform(1, 0, 12, 1, 0, 0)
     21 
     22     def test_transformPoints(self):
     23         t = Transform(2, 0, 0, 3, 0, 0)
     24         assert t.transformPoints(
     25             [(0, 0), (0, 100), (100, 100), (100, 0)]
     26         ) == [(0, 0), (0, 300), (200, 300), (200, 0)]
     27 
     28     def test_translate(self):
     29         t = Transform()
     30         assert t.translate(20, 30) == Transform(1, 0, 0, 1, 20, 30)
     31 
     32     def test_scale(self):
     33         t = Transform()
     34         assert t.scale(5) == Transform(5, 0, 0, 5, 0, 0)
     35         assert t.scale(5, 6) == Transform(5, 0, 0, 6, 0, 0)
     36 
     37     def test_rotate(self):
     38         t = Transform()
     39         assert t.rotate(math.pi / 2) == Transform(0, 1, -1, 0, 0, 0)
     40         t = Transform()
     41         assert t.rotate(-math.pi / 2) == Transform(0, -1, 1, 0, 0, 0)
     42         t = Transform()
     43         assert tuple(t.rotate(math.radians(30))) == pytest.approx(
     44             tuple(Transform(0.866025, 0.5, -0.5, 0.866025, 0, 0)))
     45 
     46     def test_skew(self):
     47         t = Transform().skew(math.pi / 4)
     48         assert tuple(t) == pytest.approx(tuple(Transform(1, 0, 1, 1, 0, 0)))
     49 
     50     def test_transform(self):
     51         t = Transform(2, 0, 0, 3, 1, 6)
     52         assert t.transform((4, 3, 2, 1, 5, 6)) == Transform(8, 9, 4, 3, 11, 24)
     53 
     54     def test_reverseTransform(self):
     55         t = Transform(2, 0, 0, 3, 1, 6)
     56         reverse_t = t.reverseTransform((4, 3, 2, 1, 5, 6))
     57         assert reverse_t == Transform(8, 6, 6, 3, 21, 15)
     58         t = Transform(4, 3, 2, 1, 5, 6)
     59         reverse_t = t.transform((2, 0, 0, 3, 1, 6))
     60         assert reverse_t == Transform(8, 6, 6, 3, 21, 15)
     61 
     62     def test_inverse(self):
     63         t = Transform().translate(2, 3).scale(4, 5)
     64         assert t.transformPoint((10, 20)) == (42, 103)
     65         it = t.inverse()
     66         assert it.transformPoint((42, 103)) == (10.0, 20.0)
     67         assert Transform().inverse() == Transform()
     68 
     69     def test_toPS(self):
     70         t = Transform().scale(2, 3).translate(4, 5)
     71         assert t.toPS() == '[2 0 0 3 8 15]'
     72 
     73     def test__ne__(self):
     74         assert Transform() != Transform(2, 0, 0, 2, 0, 0)
     75 
     76     def test__hash__(self):
     77         t = Transform(12, 0, 0, 13, 0, 0)
     78         d = {t: None}
     79         assert t in d.keys()
     80 
     81     def test__bool__(self):
     82         assert not bool(Transform())
     83         assert Transform(2, 0, 0, 2, 0, 0)
     84         assert Transform(1, 0, 0, 1, 1, 0)
     85 
     86     def test__repr__(self):
     87         assert repr(Transform(1, 2, 3, 4, 5, 6)) == '<Transform [1 2 3 4 5 6]>'
     88 
     89     def test_Identity(self):
     90         assert isinstance(Identity, Transform)
     91         assert Identity == Transform(1, 0, 0, 1, 0, 0)
     92 
     93     def test_Offset(self):
     94         assert Offset() == Transform(1, 0, 0, 1, 0, 0)
     95         assert Offset(1) == Transform(1, 0, 0, 1, 1, 0)
     96         assert Offset(1, 2) == Transform(1, 0, 0, 1, 1, 2)
     97 
     98     def test_Scale(self):
     99         assert Scale(1) == Transform(1, 0, 0, 1, 0, 0)
    100         assert Scale(2) == Transform(2, 0, 0, 2, 0, 0)
    101         assert Scale(1, 2) == Transform(1, 0, 0, 2, 0, 0)
    102