From 909ada9f18803519495c8c9f4bf786ffbaa5919b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Ritzl?= Date: Sun, 10 May 2020 22:51:08 +0200 Subject: [PATCH] Fix issue when a layout changes and there's an ongoing transition --- monarch/transitions/gui.lua | 3 ++- test/test.script | 2 ++ test/test_transitions.lua | 46 +++++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 test/test_transitions.lua diff --git a/monarch/transitions/gui.lua b/monarch/transitions/gui.lua index bbf6606..c29f3cd 100644 --- a/monarch/transitions/gui.lua +++ b/monarch/transitions/gui.lua @@ -174,6 +174,7 @@ local function create() if t.in_progress_count == 0 then table.insert(t.urls, msg.url()) current_transition = t + current_transition.id = transition_id if #t.transitions > 0 then for i=1,#t.transitions do local transition = t.transitions[i] @@ -206,7 +207,7 @@ local function create() transition.fn(transition.node, transition.node_data, transition.easing, 0, 0) end if current_transition.in_progress_count > 0 then - finish_transition(message_id) + finish_transition(current_transition.id) end end elseif message_id == monarch.TRANSITION.SHOW_IN diff --git a/test/test.script b/test/test.script index 563963e..7f90d7d 100644 --- a/test/test.script +++ b/test/test.script @@ -2,11 +2,13 @@ local deftest = require "deftest.deftest" local test_monarch = require "test.test_monarch" local test_callback_tracker = require "test.test_callback_tracker" +local test_transitions = require "test.test_transitions" function init(self) deftest.add(test_monarch) deftest.add(test_callback_tracker) + deftest.add(test_transitions) deftest.run({ coverage = { enabled = true }, pattern = "", diff --git a/test/test_transitions.lua b/test/test_transitions.lua new file mode 100644 index 0000000..dbda472 --- /dev/null +++ b/test/test_transitions.lua @@ -0,0 +1,46 @@ +local cowait = require "test.cowait" +local mock_msg = require "test.msg" +local mock_gui = require "deftest.mock.gui" +local unload = require "deftest.util.unload" +local monarch = require "monarch.monarch" +local transitions = require "monarch.transitions.gui" +local easing = require "monarch.transitions.easings" + +return function() + +describe("transitions", function() + before(function() + mock_msg.mock() + mock_gui.mock() + transitions = require "monarch.transitions.gui" + end) + + after(function() + mock_msg.unmock() + mock_gui.unmock() + unload.unload("monarch%..*") + end) + + + it("should replay and immediately finish on layout change", function() + function dummy_transition(node, to, easing, duration, delay, cb) + print("dummy transition") + end + + local node = gui.new_box_node(vmath.vector3(), vmath.vector3(100, 100, 0)) + local duration = 2 + local t = transitions.create(node) + .show_in(dummy_transition, easing.OUT, duration, delay or 0) + .show_out(dummy_transition, easing.IN, duration, delay or 0) + .back_in(dummy_transition, easing.OUT, duration, delay or 0) + .back_out(dummy_transition, easing.IN, duration, delay or 0) + + t.handle(monarch.TRANSITION.SHOW_IN) + t.handle(hash("layout_changed")) + local messages = mock_msg.messages(msg.url()) + assert(#messages == 1, "Expected one message to have been received") + assert(messages[1].message_id == monarch.TRANSITION.DONE, "Expected a TRANSITION.DONE message") + end) +end) + +end