File indexing completed on 2025-06-01 04:02:27

0001 from .. import base
0002 from lottie import objects
0003 
0004 
0005 class TestBoundingBox(base.TestCase):
0006     def test_null_ctor(self):
0007         bb = objects.BoundingBox()
0008         self.assertTrue(bb.isnull())
0009 
0010     def test_nonnull_ctor(self):
0011         bb = objects.BoundingBox(0, 0, 10, 10)
0012         self.assertFalse(bb.isnull())
0013 
0014     def test_null_include(self):
0015         bb = objects.BoundingBox()
0016         bb.include(10, 20)
0017         self.assertEqual(bb.x1, 10)
0018         self.assertEqual(bb.y1, 20)
0019         self.assertEqual(bb.x2, 10)
0020         self.assertEqual(bb.y2, 20)
0021 
0022     def test_nonnull_include_null(self):
0023         bb = objects.BoundingBox(0, 0, 30, 30)
0024         bb.include(None, None)
0025         self.assertEqual(bb.x1, 0)
0026         self.assertEqual(bb.y1, 0)
0027         self.assertEqual(bb.x2, 30)
0028         self.assertEqual(bb.y2, 30)
0029 
0030     def test_nonnull_include_inside(self):
0031         bb = objects.BoundingBox(0, 0, 30, 30)
0032         bb.include(10, 20)
0033         self.assertEqual(bb.x1, 0)
0034         self.assertEqual(bb.y1, 0)
0035         self.assertEqual(bb.x2, 30)
0036         self.assertEqual(bb.y2, 30)
0037 
0038     def test_nonnull_include_outside(self):
0039         bb = objects.BoundingBox(0, 0, 30, 30)
0040         bb.include(50, 40)
0041         self.assertEqual(bb.x1, 0)
0042         self.assertEqual(bb.y1, 0)
0043         self.assertEqual(bb.x2, 50)
0044         self.assertEqual(bb.y2, 40)
0045 
0046     def test_center(self):
0047         bb = objects.BoundingBox(0, 0, 30, 40)
0048         c = bb.center()
0049         self.assertEqual(c[0], 15)
0050         self.assertEqual(c[1], 20)
0051 
0052     def test_repr(self):
0053         x = repr(objects.BoundingBox(11, 22, 30, 40))
0054         self.assertIn("11", x)
0055         self.assertIn("22", x)
0056         self.assertIn("30", x)
0057         self.assertIn("40", x)
0058 
0059     def test_null_expand_nonnull(self):
0060         a = objects.BoundingBox()
0061         b = objects.BoundingBox(1, 2, 3, 4)
0062         a.expand(b)
0063         self.assertEqual(a.x1, 1)
0064         self.assertEqual(a.y1, 2)
0065         self.assertEqual(a.x2, 3)
0066         self.assertEqual(a.y2, 4)
0067 
0068     def test_null_expand_null(self):
0069         a = objects.BoundingBox()
0070         b = objects.BoundingBox()
0071         a.expand(b)
0072         self.assertEqual(a.x1, None)
0073         self.assertEqual(a.y1, None)
0074         self.assertEqual(a.x2, None)
0075         self.assertEqual(a.y2, None)
0076 
0077     def test_nonnull_expand_inside(self):
0078         a = objects.BoundingBox(0, 0, 4, 5)
0079         b = objects.BoundingBox(1, 2, 3, 4)
0080         a.expand(b)
0081         self.assertEqual(a.x1, 0)
0082         self.assertEqual(a.y1, 0)
0083         self.assertEqual(a.x2, 4)
0084         self.assertEqual(a.y2, 5)
0085 
0086     def test_nonnull_expand_outside(self):
0087         a = objects.BoundingBox(1, 2, 3, 4)
0088         b = objects.BoundingBox(0, 0, 4, 5)
0089         a.expand(b)
0090         self.assertEqual(a.x1, 0)
0091         self.assertEqual(a.y1, 0)
0092         self.assertEqual(a.x2, 4)
0093         self.assertEqual(a.y2, 5)
0094 
0095 
0096 class TestRect(base.TestCase):
0097     def test_empty(self):
0098         sh = objects.Rect()
0099         self.assertDictEqual(
0100             sh.to_dict(),
0101             {
0102                 "ty": "rc",
0103                 "d": 0,
0104                 "p": {"a": 0, "k": [0, 0]},
0105                 "s": {"a": 0, "k": [0, 0]},
0106                 "r": {"a": 0, "k": 0},
0107             }
0108         )
0109 
0110     def test_sized(self):
0111         sh = objects.Rect()
0112         sh.size.value = [10, 20]
0113         sh.position.value = [30, 40]
0114         sh.name = "foo"
0115         self.assertDictEqual(
0116             sh.to_dict(),
0117             {
0118                 "ty": "rc",
0119                 "d": 0,
0120                 "p": {"a": 0, "k": [30, 40]},
0121                 "s": {"a": 0, "k": [10, 20]},
0122                 "r": {"a": 0, "k": 0},
0123                 "nm": "foo",
0124             }
0125         )
0126 
0127     def test_boundingbox(self):
0128         sh = objects.Rect()
0129         sh.position.value = [30, 40]
0130         sh.size.value = [10, 20]
0131 
0132         bb = sh.bounding_box()
0133         c = bb.center()
0134         self.assertEqual(bb.x1, 30-5)
0135         self.assertEqual(bb.y1, 40-10)
0136         self.assertEqual(bb.x2, 30+5)
0137         self.assertEqual(bb.y2, 40+10)
0138         self.assertEqual(c[0], 30)
0139         self.assertEqual(c[1], 40)
0140 
0141 
0142 class TestStar(base.TestCase):
0143     def test_empty(self):
0144         sh = objects.Star()
0145         self.assertDictEqual(
0146             sh.to_dict(),
0147             {
0148                 "ty": "sr",
0149                 "d": 0,
0150                 "p": {"a": 0, "k": [0, 0]},
0151                 "ir": {"a": 0, "k": 0},
0152                 "is": {"a": 0, "k": 0},
0153                 "or": {"a": 0, "k": 0},
0154                 "os": {"a": 0, "k": 0},
0155                 "r": {"a": 0, "k": 0},
0156                 "pt": {"a": 0, "k": 5},
0157                 "sy": 1,
0158             }
0159         )
0160 
0161     def test_sized(self):
0162         sh = objects.Star()
0163         sh.outer_radius.value = 20
0164         sh.position.value = [30, 40]
0165         sh.name = "foo"
0166         sh.star_type = objects.StarType.Polygon
0167         sh.points.value = 6
0168         self.assertDictEqual(
0169             sh.to_dict(),
0170             {
0171                 "ty": "sr",
0172                 "d": 0,
0173                 "p": {"a": 0, "k": [30, 40]},
0174                 "ir": {"a": 0, "k": 0},
0175                 "is": {"a": 0, "k": 0},
0176                 "or": {"a": 0, "k": 20},
0177                 "os": {"a": 0, "k": 0},
0178                 "r": {"a": 0, "k": 0},
0179                 "pt": {"a": 0, "k": 6},
0180                 "sy": 2,
0181                 "nm": "foo",
0182             }
0183         )
0184 
0185     def test_boundingbox(self):
0186         sh = objects.Star()
0187         sh.outer_radius.value = 20
0188         sh.position.value = [30, 40]
0189 
0190         bb = sh.bounding_box()
0191         c = bb.center()
0192         self.assertEqual(bb.x1, 30-20)
0193         self.assertEqual(bb.y1, 40-20)
0194         self.assertEqual(bb.x2, 30+20)
0195         self.assertEqual(bb.y2, 40+20)
0196         self.assertEqual(c[0], 30)
0197         self.assertEqual(c[1], 40)
0198 
0199 
0200 class TestEllipse(base.TestCase):
0201     def test_empty(self):
0202         sh = objects.Ellipse()
0203         self.assertDictEqual(
0204             sh.to_dict(),
0205             {
0206                 "ty": "el",
0207                 "d": 0,
0208                 "p": {"a": 0, "k": [0, 0]},
0209                 "s": {"a": 0, "k": [0, 0]},
0210             }
0211         )
0212 
0213     def test_sized(self):
0214         sh = objects.Ellipse()
0215         sh.size.value = [10, 20]
0216         sh.position.value = [30, 40]
0217         sh.name = "foo"
0218         self.assertDictEqual(
0219             sh.to_dict(),
0220             {
0221                 "ty": "el",
0222                 "d": 0,
0223                 "p": {"a": 0, "k": [30, 40]},
0224                 "s": {"a": 0, "k": [10, 20]},
0225                 "nm": "foo",
0226             }
0227         )
0228 
0229     def test_boundingbox(self):
0230         sh = objects.Ellipse()
0231         sh.position.value = [30, 40]
0232         sh.size.value = [10, 20]
0233 
0234         bb = sh.bounding_box()
0235         c = bb.center()
0236         self.assertEqual(bb.x1, 30-5)
0237         self.assertEqual(bb.y1, 40-10)
0238         self.assertEqual(bb.x2, 30+5)
0239         self.assertEqual(bb.y2, 40+10)
0240         self.assertEqual(c[0], 30)
0241         self.assertEqual(c[1], 40)
0242