File indexing completed on 2025-06-01 04:02:27
0001 from .. import base 0002 from lottie import objects 0003 from lottie.nvector import NVector 0004 0005 0006 class TestMultiDimensional(base.TestCase): 0007 def test_zero(self): 0008 md = objects.MultiDimensional(NVector(0, 0)) 0009 self.assertDictEqual( 0010 md.to_dict(), 0011 { 0012 "a": 0, 0013 "k": [0, 0] 0014 } 0015 ) 0016 0017 def test_value(self): 0018 md = objects.MultiDimensional(NVector(0, 0)) 0019 md.value = NVector(1, 2) 0020 self.assertDictEqual( 0021 md.to_dict(), 0022 { 0023 "a": 0, 0024 "k": [1, 2] 0025 } 0026 ) 0027 0028 def test_keyframes(self): 0029 md = objects.MultiDimensional(NVector(0, 0)) 0030 md.add_keyframe(0, NVector(1, 2)) 0031 md.add_keyframe(3, NVector(4, 5)) 0032 self.assertDictEqual( 0033 md.to_dict(), 0034 { 0035 "a": 1, 0036 "k": [ 0037 { 0038 "t": 0, 0039 "s": [1, 2], 0040 "e": [4, 5], 0041 "i": {"x": [1], "y": [1]}, 0042 "o": {"x": [0], "y": [0]}, 0043 }, 0044 { 0045 "t": 3, 0046 "s": [4, 5], 0047 } 0048 ] 0049 } 0050 ) 0051 0052 def test_clear(self): 0053 md = objects.MultiDimensional(NVector(0, 0)) 0054 md.add_keyframe(0, NVector(1, 2)) 0055 md.add_keyframe(3, NVector(4, 5)) 0056 md.clear_animation(NVector(6, 7)) 0057 self.assertDictEqual( 0058 md.to_dict(), 0059 { 0060 "a": 0, 0061 "k": [6, 7] 0062 } 0063 ) 0064 0065 def test_get_value_noanim(self): 0066 md = objects.MultiDimensional(NVector(0, 0)) 0067 md.value = NVector(1, 2) 0068 self.assertEqual(md.get_value(), NVector(1, 2)) 0069 self.assertEqual(md.get_value(0), NVector(1, 2)) 0070 self.assertEqual(md.get_value(3), NVector(1, 2)) 0071 self.assertEqual(md.get_value(4), NVector(1, 2)) 0072 0073 def test_get_value_anim(self): 0074 md = objects.MultiDimensional(NVector(0, 0)) 0075 md.add_keyframe(0, NVector(1, 2)) 0076 md.add_keyframe(3, NVector(4, 5)) 0077 self.assertEqual(md.get_value(), NVector(1, 2)) 0078 self.assertEqual(md.get_value(0), NVector(1, 2)) 0079 self.assertEqual(md.get_value(3), NVector(4, 5)) 0080 self.assertEqual(md.get_value(4), NVector(4, 5)) 0081 0082 def test_get_value_anim_nonestart(self): 0083 md = objects.MultiDimensional(NVector(0, 0)) 0084 md.add_keyframe(0, NVector(1, 2)) 0085 md.add_keyframe(3, NVector(4, 5)) 0086 md.keyframes[-1].start = None # bodymovin exports them like this 0087 self.assertEqual(md.get_value(), NVector(1, 2)) 0088 self.assertEqual(md.get_value(0), NVector(1, 2)) 0089 self.assertEqual(md.get_value(3), NVector(4, 5)) 0090 self.assertEqual(md.get_value(4), NVector(4, 5)) 0091 0092 def test_get_value_inconsistent(self): 0093 md = objects.MultiDimensional(NVector(0, 0)) 0094 md.value = NVector(1, 2) 0095 md.animated = True 0096 self.assertEqual(md.get_value(), None) 0097 self.assertEqual(md.get_value(0), None) 0098 self.assertEqual(md.get_value(3), None) 0099 self.assertEqual(md.get_value(4), None) 0100 0101 def test_load_noanim(self): 0102 md = objects.MultiDimensional.load({ 0103 "a": 0, 0104 "k": [1, 2], 0105 }) 0106 self.assertIs(md.animated, False) 0107 self.assertIsNone(md.keyframes) 0108 self.assertEqual(md.value, NVector(1, 2)) 0109 0110 def test_load_anim(self): 0111 md = objects.MultiDimensional.load({ 0112 "a": 1, 0113 "k": [ 0114 { 0115 "t": 0, 0116 "s": [1, 2], 0117 "e": [4, 5], 0118 "i": {"x": [6], "y": [7]}, 0119 "o": {"x": [8], "y": [9]}, 0120 }, 0121 { 0122 "t": 3, 0123 "s": [4, 5], 0124 } 0125 ] 0126 }) 0127 self.assertIs(md.animated, True) 0128 self.assertIsNone(md.value) 0129 self.assertEqual(len(md.keyframes), 2) 0130 0131 self.assertEqual(md.keyframes[0].time, 0) 0132 self.assertEqual(md.keyframes[0].start, NVector(1, 2)) 0133 self.assertEqual(md.keyframes[0].end, NVector(4, 5)) 0134 self.assertEqual(md.keyframes[0].in_value.x, 6) 0135 self.assertEqual(md.keyframes[0].in_value.y, 7) 0136 self.assertEqual(md.keyframes[0].out_value.x, 8) 0137 self.assertEqual(md.keyframes[0].out_value.y, 9) 0138 0139 self.assertEqual(md.keyframes[1].time, 3) 0140 self.assertEqual(md.keyframes[1].start, NVector(4, 5)) 0141 self.assertEqual(md.keyframes[1].end, None) 0142 self.assertEqual(md.keyframes[1].in_value, None) 0143 self.assertEqual(md.keyframes[1].out_value, None) 0144 0145 def test_load_anim_nolist(self): 0146 md = objects.MultiDimensional.load({ 0147 "a": 1, 0148 "k": [ 0149 { 0150 "t": 0, 0151 "s": [1, 2], 0152 "e": [4, 5], 0153 "i": {"x": 6, "y": 7}, 0154 "o": {"x": 8, "y": 9}, 0155 }, 0156 { 0157 "t": 3, 0158 "s": [4, 5], 0159 } 0160 ] 0161 }) 0162 self.assertIs(md.animated, True) 0163 self.assertIsNone(md.value) 0164 self.assertEqual(len(md.keyframes), 2) 0165 0166 self.assertEqual(md.keyframes[0].time, 0) 0167 self.assertEqual(md.keyframes[0].start, NVector(1, 2)) 0168 self.assertEqual(md.keyframes[0].end, NVector(4, 5)) 0169 self.assertEqual(md.keyframes[0].in_value.x, 6) 0170 self.assertEqual(md.keyframes[0].in_value.y, 7) 0171 self.assertEqual(md.keyframes[0].out_value.x, 8) 0172 self.assertEqual(md.keyframes[0].out_value.y, 9) 0173 0174 self.assertEqual(md.keyframes[1].time, 3) 0175 self.assertEqual(md.keyframes[1].start, NVector(4, 5)) 0176 self.assertEqual(md.keyframes[1].end, None) 0177 self.assertEqual(md.keyframes[1].in_value, None) 0178 self.assertEqual(md.keyframes[1].out_value, None)