Multi events bug fix
This MR is complete and tested but DO NOT MERGE until solarus-games/solarus!1335 (merged) has been merged into the Solarus engine. Without the sol.main.rawget()
function this script will have errors.
EDIT: rawget has been merged in the solarus engine so this MR can now be merged. The pipeline has been re-run and now passes.
Closes #22 (closed)
Also includes a suite of unit tests for the multi_events script located in the data/maps/tests/multi_events/
directory.
The current version of the multi-events script (that this MR replaces) fails a number of the tests on account of the bugs with how it embeds metatable events at the time the first event is registered and later registrations to the metatable are thus ignored.
All the tests below do pass with the fixed version of the multi-events script from this MR. The pipeline shows it failing, but that is because sol.main.rawget()
could not be found. I will re-run the pipeline once that function becomes available.
Failing Unit Tests
map tests/multi_events/test_meta_events1
Test 6 (change meta event)
-
maps/tests/multi_events/test_meta_events1.lua:89 - event sequence failed:
- expected
'sprite3a;unregistered_meta2;sprite3b'
- got
'sprite3a;unregistered_meta;sprite3b'
- (
unregistered_meta
did not get replaced byunregistered_meta2
)
- expected
-
maps/tests/multi_events/test_meta_events1.lua:92 - event sequence failed:
- expected
'sprite2b;unregistered_meta2;sprite2a;sprite2c'
- got
'sprite2b;unregistered_meta;sprite2a;sprite2c'
- (
unregistered_meta
did not get replaced byunregistered_meta2
)
- expected
-
Note Test 6 does pass for
sprite1
which uses the sequence'sprite1c;unregistered_meta2;sprite1a;sprite1b;sprite1d'
Test 7 (register another meta event)
-
maps/tests/multi_events/test_meta_events1.lua:105 - event sequence failed:
- expected
'sprite2b;unregistered_meta2;meta3;sprite2a;sprite2c'
- got
'sprite2b;unregistered_meta;sprite2a;sprite2c'
- (newly registered
meta3
did not get added to event chain)
- expected
-
maps/tests/multi_events/test_meta_events1.lua:108 - event sequence failed:
- expected
'sprite3a;unregistered_meta2;meta3;sprite3b'
- got
'sprite3a;unregistered_meta;sprite3b'
- (newly registered
meta3
did not get added to event chain)
- expected
-
Note Test 7 does pass for
sprite1
which uses the sequence'sprite1c;unregistered_meta2;meta3;sprite1a;sprite1b;sprite1d'
Test 8 (register another event after registered meta event)
-
maps/tests/multi_events/test_meta_events1.lua:115 - event sequence failed:
- expected
'sprite3c;sprite3a;unregistered_meta2;meta3;sprite3b'
- got
'sprite3c;sprite3a;unregistered_meta;sprite3b'
- (fails because sequence still incorrect from test 7)
- expected
-
maps/tests/multi_events/test_meta_events1.lua:121 - event sequence failed:
- expected
'sprite2b;unregistered_meta2;meta3;sprite2a;sprite2c;sprite2d'
- got
'sprite2b;unregistered_meta;sprite2a;sprite2c;sprite2d'
- (fails because sequence still incorrect from test 7)
- expected
map tests/multi_events/test_meta_events2
Test 4 (register additional meta event)
-
maps/tests/multi_events/test_meta_events2.lua:92 - event sequence failed:
- expected
'sprite4a;sprite_meta2;sprite_meta1;sprite4b'
- got
'sprite4a;sprite_meta1;sprite4b'
- (meta event
sprite_meta2
not added to chain)
- expected
-
maps/tests/multi_events/test_meta_events2.lua:95 - event sequence failed:
- expected
'sprite3b;sprite_meta2;sprite_meta1;sprite3a'
- got
'sprite3b;sprite_meta1;sprite3a'
- (meta event
sprite_meta2
not added to chain)
- expected
-
Note Test 4 does pass for
sprite1
which uses the sequence'sprite1b;sprite_meta2;sprite_meta1;sprite1a;sprite1c'
-
Note Test 4 does pass for
sprite2
which use the sequence'sprite2c;sprite2a;sprite_meta2;sprite_meta1;sprite2b'
map tests/multi_events/test_meta_meta_events
Test 2 (Change the metatable)
-
maps/tests/multi_events/test_meta_meta_events.lua:42 - event sequence failed:
- expected
'mt_mt2;obj1a;obj1b'
- got
'mt_mt1;obj1a;obj1b'
- (
mt_mt1
did not get replaced bymt_mt2
)
- expected