diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AnimationStateTests.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AnimationStateTests.java index f35c200d5..9aa3eb699 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AnimationStateTests.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AnimationStateTests.java @@ -100,6 +100,13 @@ public class AnimationStateTests { } private void add (Result result) { + while (expected.size > actual.size) { + Result note = expected.get(actual.size); + if (!note.note) break; + actual.add(note); + log(note.name); + } + String message = result.toString(); if (actual.size >= expected.size) { message += "FAIL: "; @@ -151,7 +158,7 @@ public class AnimationStateTests { expect(0, "dispose", 0, 0), // expect(1, "dispose", 0, 0), // - // First 2 set/addAnimation calls are done. + note("First 2 set/addAnimation calls are done."), expect(0, "start", 0, 0), // expect(0, "event 0", 0, 0), // @@ -580,7 +587,7 @@ public class AnimationStateTests { expect(1, "event 0", 0, 0), // expect(1, "event 14", 0.5f, 0.5f), // - // First 2 setAnimation calls are done. + note("First 2 setAnimation calls are done."), expect(1, "interrupt", 0.8f, 0.8f), // @@ -612,7 +619,7 @@ public class AnimationStateTests { } }); - setup("setAnimation twice with mix", // 22 + setup("setAnimation twice with mixing", // 22 expect(0, "start", 0, 0), // expect(0, "interrupt", 0, 0), // expect(0, "end", 0, 0), // @@ -621,7 +628,7 @@ public class AnimationStateTests { expect(1, "start", 0, 0), // expect(1, "event 0", 0, 0), // - // First 2 setAnimation calls are done. + note("First 2 setAnimation calls are done."), expect(1, "interrupt", 0.2f, 0.2f), // @@ -633,7 +640,70 @@ public class AnimationStateTests { expect(2, "start", 0, 0.2f), // expect(2, "event 0", 0.1f, 0.3f), // - // Second 2 setAnimation calls are done. + note("Second 2 setAnimation calls are done."), + + expect(2, "interrupt", 0.2f, 0.4f), // + + expect(1, "start", 0, 0.4f), // + expect(1, "interrupt", 0, 0.4f), // + expect(1, "end", 0, 0.4f), // + expect(1, "dispose", 0, 0.4f), // + + expect(0, "start", 0, 0.4f), // + expect(0, "event 0", 0.1f, 0.5f), // + + expect(2, "end", 0.3f, 0.6f), // + expect(2, "dispose", 0.3f, 0.6f), // + + expect(0, "event 14", 0.5f, 0.9f), // + + expect(1, "complete", 1, 1), // + expect(1, "end", 1, 1.1f), // + expect(1, "dispose", 1, 1.1f), // + + expect(0, "event 30", 1, 1.4f), // + expect(0, "complete", 1, 1.4f), // + expect(0, "end", 1, 1.5f), // + expect(0, "dispose", 1, 1.5f) // + ); + stateData.setDefaultMix(0.6f); + state.setAnimation(0, "events0", false); // First should be ignored. + state.setAnimation(0, "events1", false); + run(0.1f, 1000, new TestListener() { + public void frame (float time) { + if (MathUtils.isEqual(time, 0.2f)) { + state.setAnimation(0, "events0", false); // First should be ignored. + state.setAnimation(0, "events2", false); + } + if (MathUtils.isEqual(time, 0.4f)) { + state.setAnimation(0, "events1", false); // First should be ignored. + state.setAnimation(0, "events0", false).setTrackEnd(1); + } + } + }); + + setup("setAnimation twice with multiple mixing", // 23 + expect(0, "start", 0, 0), // + expect(0, "interrupt", 0, 0), // + expect(0, "end", 0, 0), // + expect(0, "dispose", 0, 0), // + + expect(1, "start", 0, 0), // + expect(1, "event 0", 0, 0), // + + note("First 2 setAnimation calls are done."), + + expect(1, "interrupt", 0.2f, 0.2f), // + + expect(0, "start", 0, 0.2f), // + expect(0, "interrupt", 0, 0.2f), // + expect(0, "end", 0, 0.2f), // + expect(0, "dispose", 0, 0.2f), // + + expect(2, "start", 0, 0.2f), // + expect(2, "event 0", 0.1f, 0.3f), // + + note("Second 2 setAnimation calls are done."), expect(2, "interrupt", 0.2f, 0.4f), // @@ -659,6 +729,7 @@ public class AnimationStateTests { expect(0, "dispose", 1, 1.5f) // ); stateData.setDefaultMix(0.6f); + state.setMultipleMixing(true); state.setAnimation(0, "events0", false); // First should be ignored. state.setAnimation(0, "events1", false); run(0.1f, 1000, new TestListener() { @@ -673,8 +744,9 @@ public class AnimationStateTests { } } }); + state.setMultipleMixing(false); - setup("addAnimation with delay on empty track", // 23 + setup("addAnimation with delay on empty track", // 24 expect(0, "start", 0, 0), // expect(0, "event 0", 0, 5), // expect(0, "event 14", 0.5f, 5.5f), // @@ -686,7 +758,7 @@ public class AnimationStateTests { state.addAnimation(0, "events0", false, 5).setTrackEnd(1); run(0.1f, 10, null); - setup("setAnimation during AnimationStateListener"); // 24 + setup("setAnimation during AnimationStateListener"); // 25 state.addListener(new AnimationStateListener() { public void start (TrackEntry entry) { if (entry.getAnimation().getName().equals("events0")) state.setAnimation(1, "events1", false); @@ -717,7 +789,7 @@ public class AnimationStateTests { state.setAnimation(1, "events1", false).setTrackEnd(1); run(0.1f, 10, null); - setup("clearTrack", // 25 + setup("clearTrack", // 26 expect(0, "start", 0, 0), // expect(0, "event 0", 0, 0), // expect(0, "event 14", 0.5f, 0.5f), // @@ -731,7 +803,7 @@ public class AnimationStateTests { } }); - setup("setEmptyAnimation", // 26 + setup("setEmptyAnimation", // 27 expect(0, "start", 0, 0), // expect(0, "event 0", 0, 0), // expect(0, "event 14", 0.5f, 0.5f), // @@ -753,7 +825,7 @@ public class AnimationStateTests { } }); - setup("TrackEntry listener"); // 27 + setup("TrackEntry listener"); // 28 final AtomicInteger counter = new AtomicInteger(); state.addAnimation(0, "events0", false, 0).setListener(new AnimationStateListener() { public void start (TrackEntry entry) { @@ -785,7 +857,7 @@ public class AnimationStateTests { state.setAnimation(1, "events1", false).setTrackEnd(1); run(0.1f, 10, null); if (counter.get() != 15082016) { - log("TEST 26 FAILED! " + counter); + log("TEST 28 FAILED! " + counter); System.exit(0); } @@ -893,6 +965,13 @@ public class AnimationStateTests { return result; } + Result note (String message) { + Result result = new Result(); + result.name = message; + result.note = true; + return result; + } + void log (String message) { System.out.println(message); } @@ -901,6 +980,7 @@ public class AnimationStateTests { String name; int animationIndex; float trackTime, totalTime; + boolean note; public int hashCode () { int result = 31 + animationIndex;