distark-render 1.0.6 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/README.md +158 -154
  2. package/dist/cli/animate.d.ts +8 -0
  3. package/dist/cli/animate.d.ts.map +1 -0
  4. package/dist/cli/animate.js +121 -0
  5. package/dist/cli/animate.js.map +1 -0
  6. package/dist/cli/diff.d.ts +8 -0
  7. package/dist/cli/diff.d.ts.map +1 -0
  8. package/dist/cli/diff.js +124 -0
  9. package/dist/cli/diff.js.map +1 -0
  10. package/dist/cli/distark-check.d.ts +13 -0
  11. package/dist/cli/distark-check.d.ts.map +1 -0
  12. package/dist/cli/distark-check.js +69 -0
  13. package/dist/cli/distark-check.js.map +1 -0
  14. package/dist/cli/query.d.ts +12 -0
  15. package/dist/cli/query.d.ts.map +1 -0
  16. package/dist/cli/query.js +64 -0
  17. package/dist/cli/query.js.map +1 -0
  18. package/dist/cli/record.d.ts +13 -0
  19. package/dist/cli/record.d.ts.map +1 -0
  20. package/dist/cli/record.js +97 -0
  21. package/dist/cli/record.js.map +1 -0
  22. package/dist/cli/render.d.ts +40 -0
  23. package/dist/cli/render.d.ts.map +1 -0
  24. package/dist/cli/render.js +75 -0
  25. package/dist/cli/render.js.map +1 -0
  26. package/dist/cli/shared.d.ts +6 -0
  27. package/dist/cli/shared.d.ts.map +1 -0
  28. package/dist/cli/shared.js +54 -0
  29. package/dist/cli/shared.js.map +1 -0
  30. package/dist/cli/test.d.ts +13 -0
  31. package/dist/cli/test.d.ts.map +1 -0
  32. package/dist/cli/test.js +130 -0
  33. package/dist/cli/test.js.map +1 -0
  34. package/dist/cli/verify.d.ts +21 -0
  35. package/dist/cli/verify.d.ts.map +1 -0
  36. package/dist/cli/verify.js +175 -0
  37. package/dist/cli/verify.js.map +1 -0
  38. package/dist/modules/adapters/p5Renderer.d.ts +0 -0
  39. package/dist/modules/adapters/p5Renderer.d.ts.map +0 -0
  40. package/dist/modules/adapters/p5Renderer.js +0 -0
  41. package/dist/modules/adapters/p5Renderer.js.map +0 -0
  42. package/dist/modules/adapters/skiaRenderer.d.ts +0 -0
  43. package/dist/modules/adapters/skiaRenderer.d.ts.map +0 -0
  44. package/dist/modules/adapters/skiaRenderer.js +0 -0
  45. package/dist/modules/adapters/skiaRenderer.js.map +0 -0
  46. package/dist/modules/animationDiff.d.ts +0 -0
  47. package/dist/modules/animationDiff.d.ts.map +0 -0
  48. package/dist/modules/animationDiff.js +0 -0
  49. package/dist/modules/animationDiff.js.map +0 -0
  50. package/dist/modules/eyeSystem.d.ts +0 -0
  51. package/dist/modules/eyeSystem.d.ts.map +0 -0
  52. package/dist/modules/eyeSystem.js +0 -0
  53. package/dist/modules/eyeSystem.js.map +0 -0
  54. package/dist/modules/imageLoad.d.ts +0 -0
  55. package/dist/modules/imageLoad.d.ts.map +0 -0
  56. package/dist/modules/imageLoad.js +0 -0
  57. package/dist/modules/imageLoad.js.map +0 -0
  58. package/dist/modules/mouthSystem.d.ts +0 -0
  59. package/dist/modules/mouthSystem.d.ts.map +0 -0
  60. package/dist/modules/mouthSystem.js +0 -0
  61. package/dist/modules/mouthSystem.js.map +0 -0
  62. package/dist/modules/renderRig.d.ts +0 -0
  63. package/dist/modules/renderRig.d.ts.map +0 -0
  64. package/dist/modules/renderRig.js +0 -0
  65. package/dist/modules/renderRig.js.map +0 -0
  66. package/dist/tests/test-animation-diff-rendering.d.ts +7 -0
  67. package/dist/tests/test-animation-diff-rendering.d.ts.map +1 -0
  68. package/dist/tests/test-animation-diff-rendering.js +444 -0
  69. package/dist/tests/test-animation-diff-rendering.js.map +1 -0
  70. package/dist/tests/test-animation-diff.d.ts +7 -0
  71. package/dist/tests/test-animation-diff.d.ts.map +1 -0
  72. package/dist/tests/test-animation-diff.js +488 -0
  73. package/dist/tests/test-animation-diff.js.map +1 -0
  74. package/dist/tests/test-cli.d.ts +8 -0
  75. package/dist/tests/test-cli.d.ts.map +1 -0
  76. package/dist/tests/test-cli.js +307 -0
  77. package/dist/tests/test-cli.js.map +1 -0
  78. package/dist/tests/test-joint-movement.d.ts +0 -0
  79. package/dist/tests/test-joint-movement.d.ts.map +0 -0
  80. package/dist/tests/test-joint-movement.js +0 -0
  81. package/dist/tests/test-joint-movement.js.map +0 -0
  82. package/dist/tests/test-skia.d.ts +0 -0
  83. package/dist/tests/test-skia.d.ts.map +0 -0
  84. package/dist/tests/test-skia.js +0 -0
  85. package/dist/tests/test-skia.js.map +0 -0
  86. package/dist/tests/test-visual-verification.d.ts +0 -0
  87. package/dist/tests/test-visual-verification.d.ts.map +0 -0
  88. package/dist/tests/test-visual-verification.js +0 -0
  89. package/dist/tests/test-visual-verification.js.map +0 -0
  90. package/dist/types.d.ts +0 -0
  91. package/dist/types.d.ts.map +0 -0
  92. package/dist/types.js +0 -0
  93. package/dist/types.js.map +0 -0
  94. package/package.json +9 -2
@@ -0,0 +1,488 @@
1
+ /**
2
+ * Animation Diff System Unit Tests
3
+ * Tests diff creation, application, and round-trip conversion
4
+ * No rendering required - pure data transformation tests
5
+ */
6
+ import { createDiffBasedAnimation, expandDiffBasedAnimation, loadAnimation, validateDiffBasedAnimation, isDiffBasedFormat, calculateCompressionStats } from '../modules/animationDiff.js';
7
+ /**
8
+ * Deep equality check for objects
9
+ */
10
+ function deepEqual(obj1, obj2) {
11
+ if (obj1 === obj2)
12
+ return true;
13
+ if (obj1 == null || obj2 == null)
14
+ return false;
15
+ if (typeof obj1 !== typeof obj2)
16
+ return false;
17
+ if (typeof obj1 === 'object') {
18
+ const keys1 = Object.keys(obj1).sort();
19
+ const keys2 = Object.keys(obj2).sort();
20
+ if (keys1.length !== keys2.length)
21
+ return false;
22
+ if (keys1.join(',') !== keys2.join(','))
23
+ return false;
24
+ return keys1.every(key => deepEqual(obj1[key], obj2[key]));
25
+ }
26
+ return false;
27
+ }
28
+ /**
29
+ * Test 1: Basic Diff Creation and Application
30
+ */
31
+ function testBasicDiffCreation() {
32
+ console.log('\n Test 1: Basic Diff Creation');
33
+ console.log(' ' + '-'.repeat(40));
34
+ // Create sample frames
35
+ const frames = [
36
+ // Frame 0: Base frame
37
+ {
38
+ rotationValues: { head: 0, leftArm: 0, rightArm: 0 },
39
+ selfRotationValues: { torso: 0 },
40
+ visibility: { head: true, torso: true }
41
+ },
42
+ // Frame 1: Only head rotates
43
+ {
44
+ rotationValues: { head: 0.5, leftArm: 0, rightArm: 0 },
45
+ selfRotationValues: { torso: 0 },
46
+ visibility: { head: true, torso: true }
47
+ },
48
+ // Frame 2: Head and arm rotate
49
+ {
50
+ rotationValues: { head: 1.0, leftArm: 0.3, rightArm: 0 },
51
+ selfRotationValues: { torso: 0 },
52
+ visibility: { head: true, torso: true }
53
+ }
54
+ ];
55
+ // Create diff-based animation
56
+ const diffAnimation = createDiffBasedAnimation(frames);
57
+ // Verify diff format
58
+ console.log(' Base frame keys:', Object.keys(diffAnimation[0]));
59
+ console.log(' Diff 1 keys:', Object.keys(diffAnimation[1]));
60
+ console.log(' Diff 2 keys:', Object.keys(diffAnimation[2]));
61
+ // Diff 1 should only have rotationValues with changed head
62
+ const expectedDiff1 = {
63
+ rotationValues: { head: 0.5 }
64
+ };
65
+ const diff1Match = deepEqual(diffAnimation[1], expectedDiff1);
66
+ console.log(` Diff 1 correct: ${diff1Match ? '✅' : '❌'}`);
67
+ // Expand back to full frames
68
+ const expandedFrames = expandDiffBasedAnimation(diffAnimation);
69
+ // Verify round-trip
70
+ const roundTripMatch = deepEqual(frames, expandedFrames);
71
+ console.log(` Round-trip match: ${roundTripMatch ? '✅' : '❌'}`);
72
+ const passed = diff1Match && roundTripMatch;
73
+ console.log(` Result: ${passed ? '✅ PASS' : '❌ FAIL'}`);
74
+ return passed;
75
+ }
76
+ /**
77
+ * Test 2: Nested Object Diffs
78
+ */
79
+ function testNestedObjectDiffs() {
80
+ console.log('\n Test 2: Nested Object Diffs');
81
+ console.log(' ' + '-'.repeat(40));
82
+ const frames = [
83
+ {
84
+ rotationValues: { head: 0, leftArm: 0, rightArm: 0 },
85
+ eyes: {
86
+ leftEyeXCoor: -10,
87
+ leftEyeYCoor: -5,
88
+ rightEyeXCoor: 10,
89
+ rightEyeYCoor: -5
90
+ }
91
+ },
92
+ {
93
+ rotationValues: { head: 0, leftArm: 0, rightArm: 0 },
94
+ eyes: {
95
+ leftEyeXCoor: -12, // Changed
96
+ leftEyeYCoor: -5,
97
+ rightEyeXCoor: 10,
98
+ rightEyeYCoor: -5
99
+ }
100
+ }
101
+ ];
102
+ const diffAnimation = createDiffBasedAnimation(frames);
103
+ // Diff should only contain the changed eye property
104
+ const expectedDiff = {
105
+ eyes: { leftEyeXCoor: -12 }
106
+ };
107
+ const diffMatch = deepEqual(diffAnimation[1], expectedDiff);
108
+ console.log(' Diff contains only changed eye property:', diffMatch ? '✅' : '❌');
109
+ // Expand and verify
110
+ const expandedFrames = expandDiffBasedAnimation(diffAnimation);
111
+ const roundTripMatch = deepEqual(frames, expandedFrames);
112
+ console.log(' Round-trip match:', roundTripMatch ? '✅' : '❌');
113
+ const passed = diffMatch && roundTripMatch;
114
+ console.log(` Result: ${passed ? '✅ PASS' : '❌ FAIL'}`);
115
+ return passed;
116
+ }
117
+ /**
118
+ * Test 3: No Changes (Empty Diff)
119
+ */
120
+ function testNoChanges() {
121
+ console.log('\n Test 3: No Changes (Empty Diff)');
122
+ console.log(' ' + '-'.repeat(40));
123
+ const frames = [
124
+ { rotationValues: { head: 0 }, visibility: { head: true } },
125
+ { rotationValues: { head: 0 }, visibility: { head: true } } // Identical
126
+ ];
127
+ const diffAnimation = createDiffBasedAnimation(frames);
128
+ // Second frame should be empty object (no changes)
129
+ const isEmptyDiff = Object.keys(diffAnimation[1]).length === 0;
130
+ console.log(' Diff is empty object:', isEmptyDiff ? '✅' : '❌');
131
+ // Expand and verify
132
+ const expandedFrames = expandDiffBasedAnimation(diffAnimation);
133
+ const roundTripMatch = deepEqual(frames, expandedFrames);
134
+ console.log(' Round-trip match:', roundTripMatch ? '✅' : '❌');
135
+ const passed = isEmptyDiff && roundTripMatch;
136
+ console.log(` Result: ${passed ? '✅ PASS' : '❌ FAIL'}`);
137
+ return passed;
138
+ }
139
+ /**
140
+ * Test 4: Multiple Property Changes
141
+ */
142
+ function testMultiplePropertyChanges() {
143
+ console.log('\n Test 4: Multiple Property Changes');
144
+ console.log(' ' + '-'.repeat(40));
145
+ const frames = [
146
+ {
147
+ rotationValues: { head: 0, leftArm: 0 },
148
+ selfRotationValues: { torso: 0 },
149
+ visibility: { head: true },
150
+ flipX: false
151
+ },
152
+ {
153
+ rotationValues: { head: 0.5, leftArm: 0.3 }, // Both changed
154
+ selfRotationValues: { torso: 0.1 }, // Changed
155
+ visibility: { head: true }, // No change
156
+ flipX: true // Changed
157
+ }
158
+ ];
159
+ const diffAnimation = createDiffBasedAnimation(frames);
160
+ // Verify diff has all changed properties
161
+ const diff = diffAnimation[1];
162
+ const hasRotations = diff.rotationValues !== undefined;
163
+ const hasSelfRotations = diff.selfRotationValues !== undefined;
164
+ const hasFlipX = diff.flipX !== undefined;
165
+ const noVisibility = diff.visibility === undefined; // Should NOT be in diff (unchanged)
166
+ console.log(' Has rotationValues:', hasRotations ? '✅' : '❌');
167
+ console.log(' Has selfRotationValues:', hasSelfRotations ? '✅' : '❌');
168
+ console.log(' Has flipX:', hasFlipX ? '✅' : '❌');
169
+ console.log(' Visibility excluded (unchanged):', noVisibility ? '✅' : '❌');
170
+ // Expand and verify
171
+ const expandedFrames = expandDiffBasedAnimation(diffAnimation);
172
+ const roundTripMatch = deepEqual(frames, expandedFrames);
173
+ console.log(' Round-trip match:', roundTripMatch ? '✅' : '❌');
174
+ const passed = hasRotations && hasSelfRotations && hasFlipX && noVisibility && roundTripMatch;
175
+ console.log(` Result: ${passed ? '✅ PASS' : '❌ FAIL'}`);
176
+ return passed;
177
+ }
178
+ /**
179
+ * Test 5: Legacy Verbose Format Support
180
+ */
181
+ function testLegacyVerboseFormat() {
182
+ console.log('\n Test 5: Legacy Verbose Format Support');
183
+ console.log(' ' + '-'.repeat(40));
184
+ const verboseFormat = {
185
+ version: '1.0',
186
+ baseFrame: { rotationValues: { head: 0 } },
187
+ diffs: [
188
+ null,
189
+ { rotationValues: { head: 0.5 } },
190
+ { rotationValues: { head: 1.0 } }
191
+ ]
192
+ };
193
+ // Should be detected as diff format
194
+ const isDetected = isDiffBasedFormat(verboseFormat);
195
+ console.log(' Detected as diff format:', isDetected ? '✅' : '❌');
196
+ // Should validate
197
+ const isValid = validateDiffBasedAnimation(verboseFormat);
198
+ console.log(' Validates correctly:', isValid ? '✅' : '❌');
199
+ // Should expand correctly
200
+ const expanded = expandDiffBasedAnimation(verboseFormat);
201
+ const expectedFrames = [
202
+ { rotationValues: { head: 0 } },
203
+ { rotationValues: { head: 0.5 } },
204
+ { rotationValues: { head: 1.0 } }
205
+ ];
206
+ const expandsCorrectly = deepEqual(expanded, expectedFrames);
207
+ console.log(' Expands correctly:', expandsCorrectly ? '✅' : '❌');
208
+ const passed = isDetected && isValid && expandsCorrectly;
209
+ console.log(` Result: ${passed ? '✅ PASS' : '❌ FAIL'}`);
210
+ return passed;
211
+ }
212
+ /**
213
+ * Test 6: Compression Stats
214
+ */
215
+ function testCompressionStats() {
216
+ console.log('\n Test 6: Compression Stats');
217
+ console.log(' ' + '-'.repeat(40));
218
+ const frames = [
219
+ {
220
+ rotationValues: { head: 0, leftArm: 0, rightArm: 0, leftLeg: 0, rightLeg: 0 },
221
+ selfRotationValues: { torso: 0, leftHand: 0, rightHand: 0 },
222
+ dimensionValues: { head: { width: 80, height: 80 }, torso: { width: 60, height: 120 } },
223
+ visibility: { head: true, torso: true }
224
+ },
225
+ {
226
+ rotationValues: { head: 0.1, leftArm: 0, rightArm: 0, leftLeg: 0, rightLeg: 0 }, // Only head changed
227
+ selfRotationValues: { torso: 0, leftHand: 0, rightHand: 0 },
228
+ dimensionValues: { head: { width: 80, height: 80 }, torso: { width: 60, height: 120 } },
229
+ visibility: { head: true, torso: true }
230
+ },
231
+ {
232
+ rotationValues: { head: 0.2, leftArm: 0, rightArm: 0, leftLeg: 0, rightLeg: 0 }, // Only head changed
233
+ selfRotationValues: { torso: 0, leftHand: 0, rightHand: 0 },
234
+ dimensionValues: { head: { width: 80, height: 80 }, torso: { width: 60, height: 120 } },
235
+ visibility: { head: true, torso: true }
236
+ }
237
+ ];
238
+ const diffAnimation = createDiffBasedAnimation(frames);
239
+ const stats = calculateCompressionStats(frames, diffAnimation);
240
+ console.log(' Original size:', stats.originalSize, 'bytes');
241
+ console.log(' Compressed size:', stats.compressedSize, 'bytes');
242
+ console.log(' Saved:', stats.savedBytes, 'bytes');
243
+ console.log(' Compression ratio:', stats.compressionRatio);
244
+ // Should have significant compression since only one value changes per frame
245
+ const hasSavings = stats.savedBytes > 0;
246
+ const hasRatio = parseFloat(stats.compressionRatio) > 0;
247
+ console.log(' Has savings:', hasSavings ? '✅' : '❌');
248
+ console.log(' Has compression ratio:', hasRatio ? '✅' : '❌');
249
+ const passed = hasSavings && hasRatio;
250
+ console.log(` Result: ${passed ? '✅ PASS' : '❌ FAIL'}`);
251
+ return passed;
252
+ }
253
+ /**
254
+ * Test 7: Format Detection
255
+ */
256
+ function testFormatDetection() {
257
+ console.log('\n Test 7: Format Detection');
258
+ console.log(' ' + '-'.repeat(40));
259
+ // Full-state format (should NOT be detected as diff)
260
+ const fullStateFormat = [
261
+ { rotationValues: { head: 0 }, imagePaths: { head: 'abc' }, dimensionValues: { head: { width: 80, height: 80 } } },
262
+ { rotationValues: { head: 0.5 }, imagePaths: { head: 'abc' }, dimensionValues: { head: { width: 80, height: 80 } } }
263
+ ];
264
+ // Diff format (should be detected)
265
+ const diffFormat = [
266
+ { rotationValues: { head: 0 }, imagePaths: { head: 'abc' }, dimensionValues: { head: { width: 80, height: 80 } } },
267
+ { rotationValues: { head: 0.5 } } // Missing imagePaths and dimensionValues (diff!)
268
+ ];
269
+ const fullStateDetected = !isDiffBasedFormat(fullStateFormat);
270
+ const diffDetected = isDiffBasedFormat(diffFormat);
271
+ console.log(' Full-state NOT detected as diff:', fullStateDetected ? '✅' : '❌');
272
+ console.log(' Diff format detected:', diffDetected ? '✅' : '❌');
273
+ const passed = fullStateDetected && diffDetected;
274
+ console.log(` Result: ${passed ? '✅ PASS' : '❌ FAIL'}`);
275
+ return passed;
276
+ }
277
+ /**
278
+ * Test 8: Load Animation (Smart Loader)
279
+ */
280
+ function testLoadAnimation() {
281
+ console.log('\n Test 8: Load Animation (Smart Loader)');
282
+ console.log(' ' + '-'.repeat(40));
283
+ // Test with diff format
284
+ const diffFormat = [
285
+ { rotationValues: { head: 0 }, imagePaths: { head: 'abc' } },
286
+ { rotationValues: { head: 0.5 } }
287
+ ];
288
+ const loadedDiff = loadAnimation(diffFormat);
289
+ const diffExpanded = loadedDiff.length === 2 && loadedDiff[1].imagePaths?.head === 'abc';
290
+ console.log(' Diff format loaded and expanded:', diffExpanded ? '✅' : '❌');
291
+ // Test with full-state format
292
+ const fullStateFormat = [
293
+ { rotationValues: { head: 0 }, imagePaths: { head: 'abc' } },
294
+ { rotationValues: { head: 0.5 }, imagePaths: { head: 'abc' } }
295
+ ];
296
+ const loadedFull = loadAnimation(fullStateFormat);
297
+ const fullStatePassthrough = deepEqual(loadedFull, fullStateFormat);
298
+ console.log(' Full-state passed through:', fullStatePassthrough ? '✅' : '❌');
299
+ const passed = diffExpanded && fullStatePassthrough;
300
+ console.log(` Result: ${passed ? '✅ PASS' : '❌ FAIL'}`);
301
+ return passed;
302
+ }
303
+ /**
304
+ * Test 9: Complex Character Animation
305
+ */
306
+ function testComplexCharacterAnimation() {
307
+ console.log('\n Test 9: Complex Character Animation');
308
+ console.log(' ' + '-'.repeat(40));
309
+ const frames = [
310
+ // Frame 0: T-pose
311
+ {
312
+ rotationValues: {
313
+ head: 0,
314
+ leftUpperArm: -Math.PI / 2,
315
+ rightUpperArm: -Math.PI / 2,
316
+ leftThigh: 0,
317
+ rightThigh: 0
318
+ },
319
+ eyes: {
320
+ leftIrisXCoor: 0,
321
+ leftIrisYCoor: 0,
322
+ rightIrisXCoor: 0,
323
+ rightIrisYCoor: 0
324
+ },
325
+ mouth: {
326
+ xCoor: 0,
327
+ yCoor: 0
328
+ }
329
+ },
330
+ // Frame 1: Head turns, eyes look left
331
+ {
332
+ rotationValues: {
333
+ head: 0.3, // Changed
334
+ leftUpperArm: -Math.PI / 2,
335
+ rightUpperArm: -Math.PI / 2,
336
+ leftThigh: 0,
337
+ rightThigh: 0
338
+ },
339
+ eyes: {
340
+ leftIrisXCoor: -5, // Changed
341
+ leftIrisYCoor: 0,
342
+ rightIrisXCoor: -5, // Changed
343
+ rightIrisYCoor: 0
344
+ },
345
+ mouth: {
346
+ xCoor: 0,
347
+ yCoor: 0
348
+ }
349
+ },
350
+ // Frame 2: Arms down, eyes center
351
+ {
352
+ rotationValues: {
353
+ head: 0.3,
354
+ leftUpperArm: 0, // Changed
355
+ rightUpperArm: 0, // Changed
356
+ leftThigh: 0,
357
+ rightThigh: 0
358
+ },
359
+ eyes: {
360
+ leftIrisXCoor: 0, // Changed
361
+ leftIrisYCoor: 0,
362
+ rightIrisXCoor: 0, // Changed
363
+ rightIrisYCoor: 0
364
+ },
365
+ mouth: {
366
+ xCoor: 0,
367
+ yCoor: 0
368
+ }
369
+ }
370
+ ];
371
+ const diffAnimation = createDiffBasedAnimation(frames);
372
+ const expandedFrames = expandDiffBasedAnimation(diffAnimation);
373
+ // Verify each frame matches
374
+ let allMatch = true;
375
+ for (let i = 0; i < frames.length; i++) {
376
+ if (!deepEqual(frames[i], expandedFrames[i])) {
377
+ console.log(` Frame ${i} mismatch ❌`);
378
+ allMatch = false;
379
+ }
380
+ }
381
+ console.log(' All frames match after round-trip:', allMatch ? '✅' : '❌');
382
+ // Check compression
383
+ const stats = calculateCompressionStats(frames, diffAnimation);
384
+ const hasCompression = stats.savedBytes > 0;
385
+ console.log(' Achieved compression:', hasCompression ? '✅' : '❌');
386
+ console.log(' Compression ratio:', stats.compressionRatio);
387
+ const passed = allMatch && hasCompression;
388
+ console.log(` Result: ${passed ? '✅ PASS' : '❌ FAIL'}`);
389
+ return passed;
390
+ }
391
+ /**
392
+ * Test 10: Mouth Shape Animation
393
+ */
394
+ function testMouthShapeAnimation() {
395
+ console.log('\n Test 10: Mouth Shape Animation');
396
+ console.log(' ' + '-'.repeat(40));
397
+ const frames = [
398
+ {
399
+ rotationValues: { head: 0 },
400
+ mouth: {
401
+ width: 60,
402
+ height: 40,
403
+ xCoor: 0,
404
+ yCoor: -50
405
+ }
406
+ },
407
+ {
408
+ rotationValues: { head: 0 },
409
+ mouth: {
410
+ width: 70, // Changed
411
+ height: 40,
412
+ xCoor: 0,
413
+ yCoor: -50
414
+ }
415
+ },
416
+ {
417
+ rotationValues: { head: 0 },
418
+ mouth: {
419
+ width: 70,
420
+ height: 50, // Changed
421
+ xCoor: 2, // Changed
422
+ yCoor: -50
423
+ }
424
+ }
425
+ ];
426
+ const diffAnimation = createDiffBasedAnimation(frames);
427
+ // Diff 1 should only have mouth.width
428
+ const diff1HasOnlyWidth = !!(diffAnimation[1].mouth &&
429
+ Object.keys(diffAnimation[1].mouth).length === 1 &&
430
+ diffAnimation[1].mouth.width === 70);
431
+ console.log(' Diff 1 has only changed mouth property:', diff1HasOnlyWidth ? '✅' : '❌');
432
+ // Expand and verify
433
+ const expandedFrames = expandDiffBasedAnimation(diffAnimation);
434
+ const roundTripMatch = deepEqual(frames, expandedFrames);
435
+ console.log(' Round-trip match:', roundTripMatch ? '✅' : '❌');
436
+ const passed = diff1HasOnlyWidth && roundTripMatch;
437
+ console.log(` Result: ${passed ? '✅ PASS' : '❌ FAIL'}`);
438
+ return passed;
439
+ }
440
+ /**
441
+ * Main test runner
442
+ */
443
+ async function runAllTests() {
444
+ console.log('\n🧪 Animation Diff System Tests');
445
+ console.log('='.repeat(50));
446
+ const results = {
447
+ 'Basic Diff Creation': testBasicDiffCreation(),
448
+ 'Nested Object Diffs': testNestedObjectDiffs(),
449
+ 'No Changes (Empty Diff)': testNoChanges(),
450
+ 'Multiple Property Changes': testMultiplePropertyChanges(),
451
+ 'Legacy Verbose Format': testLegacyVerboseFormat(),
452
+ 'Compression Stats': testCompressionStats(),
453
+ 'Format Detection': testFormatDetection(),
454
+ 'Smart Loader': testLoadAnimation(),
455
+ 'Complex Character Animation': testComplexCharacterAnimation(),
456
+ 'Mouth Shape Animation': testMouthShapeAnimation()
457
+ };
458
+ // Summary
459
+ console.log('\n' + '='.repeat(50));
460
+ console.log('📊 Test Summary:');
461
+ const passed = Object.values(results).filter(r => r).length;
462
+ const total = Object.keys(results).length;
463
+ console.log(` ${passed}/${total} tests passed`);
464
+ Object.entries(results).forEach(([name, result]) => {
465
+ console.log(` ${result ? '✅' : '❌'} ${name}`);
466
+ });
467
+ const allPassed = passed === total;
468
+ if (allPassed) {
469
+ console.log('\n✅ All animation diff tests PASSED\n');
470
+ }
471
+ else {
472
+ console.log('\n❌ Some animation diff tests FAILED\n');
473
+ }
474
+ return allPassed;
475
+ }
476
+ // Run tests
477
+ async function main() {
478
+ try {
479
+ const success = await runAllTests();
480
+ process.exit(success ? 0 : 1);
481
+ }
482
+ catch (error) {
483
+ console.error('❌ Test failed with error:', error);
484
+ process.exit(1);
485
+ }
486
+ }
487
+ main();
488
+ //# sourceMappingURL=test-animation-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-animation-diff.js","sourceRoot":"","sources":["../../tests/test-animation-diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Tests for distark-check CLI commands
3
+ *
4
+ * Tests render, verify, animate, and diff commands using the tank.json fixture.
5
+ * Query is tested structurally (no API key required for test).
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=test-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-cli.d.ts","sourceRoot":"","sources":["../../tests/test-cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}