Skip to content

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 by unregistered_meta2)
  • 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 by unregistered_meta2)
  • 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)
  • 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)
  • 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)
  • 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)

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)
  • 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)
  • 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)
Edited by llamazing

Merge request reports