From af32890941eb9a3af0f33adb33947575c215aa16 Mon Sep 17 00:00:00 2001 From: lenemter Date: Wed, 29 Apr 2026 01:45:06 +0300 Subject: [PATCH 1/2] Tests: compile into a single executable --- tests/Main.vala | 18 ++++++++++++++++++ tests/MutterTestCase.vala | 8 ++++++-- tests/TestCase.vala | 8 ++------ tests/lib/GestureControllerTest.vala | 10 +--------- tests/lib/PropertyTargetTest.vala | 8 -------- tests/lib/SetupTest.vala | 10 +--------- tests/lib/SwipeTriggerTest.vala | 8 -------- tests/lib/meson.build | 19 ------------------- tests/meson.build | 26 +++++++++++++++++++++++++- 9 files changed, 53 insertions(+), 62 deletions(-) create mode 100644 tests/Main.vala delete mode 100644 tests/lib/meson.build diff --git a/tests/Main.vala b/tests/Main.vala new file mode 100644 index 000000000..7ef770b1f --- /dev/null +++ b/tests/Main.vala @@ -0,0 +1,18 @@ +/* + * Copyright 2026 elementary, Inc. (https://elementary.io) + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +namespace Gala { + public int main (string[] args) { + TestCase[] test_cases = { + new SetupTest (), + new GestureControllerTest (), + new PropertyTargetTest (), + new SwipeTriggerTest (), + }; + + Test.init (ref args); + return Test.run (); + } +} diff --git a/tests/MutterTestCase.vala b/tests/MutterTestCase.vala index 6b43abc91..e17ec9d33 100644 --- a/tests/MutterTestCase.vala +++ b/tests/MutterTestCase.vala @@ -25,12 +25,16 @@ public abstract class Gala.MutterTestCase : Gala.TestCase { "--virtual-monitor", "1280x720@60" }; - protected Meta.Context context { get; private set; } - protected Clutter.Stage stage { get { return (Clutter.Stage) context.get_backend ().get_stage (); } } + protected static Meta.Context? context { get; private set; } + protected static Clutter.Stage? stage { get { return (Clutter.Stage) context?.get_backend ().get_stage (); } } private MainLoop? main_loop; construct { + if (context != null) { + return; + } + context = new Meta.Context (""); unowned var unowned_args = MUTTER_ARGS; diff --git a/tests/TestCase.vala b/tests/TestCase.vala index d35535165..50af3b7f2 100644 --- a/tests/TestCase.vala +++ b/tests/TestCase.vala @@ -12,18 +12,14 @@ public abstract class Gala.TestCase : Object { public delegate void TestMethod (); - public string name { get; construct; } - private GLib.TestSuite suite; construct { - suite = new GLib.TestSuite (name); + suite = new GLib.TestSuite (this.get_class ().get_type ().name ()); } - public int run (string[] args) { - Test.init (ref args); + public override void constructed () { TestSuite.get_root ().add_suite ((owned) suite); - return Test.run (); } protected void add_test (string name, TestMethod test) { diff --git a/tests/lib/GestureControllerTest.vala b/tests/lib/GestureControllerTest.vala index 96c31d93f..ded64831e 100644 --- a/tests/lib/GestureControllerTest.vala +++ b/tests/lib/GestureControllerTest.vala @@ -19,7 +19,7 @@ internal class Gala.MockTrigger : Object, GestureTrigger { return true; } - public override void enable_backends (GestureController controller) { + public void enable_backends (GestureController controller) { controller.enable_backend (backend); } } @@ -93,10 +93,6 @@ public class Gala.GestureControllerTest : MutterTestCase { private GestureController controller; private MockTarget target; - public GestureControllerTest () { - Object (name: "GestureControllerTest"); - } - construct { add_test ("Test basic propagation", test_basic_propagation); add_test ("Test two immediate gotos", test_two_immediate_gotos); @@ -201,7 +197,3 @@ public class Gala.GestureControllerTest : MutterTestCase { run_main_loop (); } } - -public int main (string[] args) { - return new Gala.GestureControllerTest ().run (args); -} diff --git a/tests/lib/PropertyTargetTest.vala b/tests/lib/PropertyTargetTest.vala index 054da2207..2c0ae3751 100644 --- a/tests/lib/PropertyTargetTest.vala +++ b/tests/lib/PropertyTargetTest.vala @@ -12,10 +12,6 @@ public class Gala.PropertyTargetTest : TestCase { private MockObject? target; private PropertyTarget? default_int_prop_target; - public PropertyTargetTest () { - Object (name: "PropertyTarget"); - } - construct { add_test ("simple propagation", test_simple_propagation); add_test ("double propagation", test_double_propagation); @@ -151,7 +147,3 @@ public class Gala.PropertyTargetTest : TestCase { assert_finalize_object (ref target); } } - -public int main (string[] args) { - return new Gala.PropertyTargetTest ().run (args); -} diff --git a/tests/lib/SetupTest.vala b/tests/lib/SetupTest.vala index f90ac1455..ba55b74c6 100644 --- a/tests/lib/SetupTest.vala +++ b/tests/lib/SetupTest.vala @@ -12,10 +12,6 @@ * and allows us to interact with it, e.g. by creating a Clutter actor. */ public class Gala.SetupTest : MutterTestCase { - public SetupTest () { - Object (name: "SetupTest"); - } - construct { add_test ("Test setup successful", test_setup_successful); add_test ("Test main loop", test_main_loop); @@ -39,7 +35,7 @@ public class Gala.SetupTest : MutterTestCase { var stage = backend.get_stage (); assert_true (stage != null); assert_true (stage is Clutter.Stage); - assert_true (this.stage == stage); + assert_true (MutterTestCase.stage == stage); // Creating an actor requires clutter machinery to be set up, so check this var actor = new Clutter.Actor (); @@ -88,7 +84,3 @@ public class Gala.SetupTest : MutterTestCase { assert_cmpint (frames, GT, 0); } } - -public int main (string[] args) { - return new Gala.SetupTest ().run (args); -} diff --git a/tests/lib/SwipeTriggerTest.vala b/tests/lib/SwipeTriggerTest.vala index b937bb3c9..4810e64b6 100644 --- a/tests/lib/SwipeTriggerTest.vala +++ b/tests/lib/SwipeTriggerTest.vala @@ -9,10 +9,6 @@ public class Gala.SwipeTriggerTest : MutterTestCase { private Clutter.Actor? actor; private SwipeTrigger? trigger; - public SwipeTriggerTest () { - Object (name: "SwipeTriggerTest"); - } - construct { add_test ("Test finalize trigger first", test_finalize_trigger_first); add_test ("Test finalize actor first", test_finalize_actor_first); @@ -56,7 +52,3 @@ public class Gala.SwipeTriggerTest : MutterTestCase { assert_finalize_object (ref trigger); } } - -public int main (string[] args) { - return new Gala.SwipeTriggerTest ().run (args); -} diff --git a/tests/lib/meson.build b/tests/lib/meson.build deleted file mode 100644 index aae6fb5f4..000000000 --- a/tests/lib/meson.build +++ /dev/null @@ -1,19 +0,0 @@ -tests = [ - 'GestureControllerTest', - 'PropertyTargetTest', - 'SetupTest', - 'SwipeTriggerTest', -] - -foreach test : tests - test_executable = executable( - test, - '@0@.vala'.format(test), - common_test_sources, - gala_lib_sources, - dependencies: gala_base_dep, - install: false, - ) - - test(test, test_executable, suite: ['Gala', 'Gala/lib'], is_parallel: false) -endforeach diff --git a/tests/meson.build b/tests/meson.build index 5d7a42304..2d1e5f5bd 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -1,6 +1,30 @@ common_test_sources = files( + 'Main.vala', 'MutterTestCase.vala', 'TestCase.vala', ) -subdir('lib') +lib_tests = [ + 'GestureControllerTest', + 'PropertyTargetTest', + 'SetupTest', + 'SwipeTriggerTest', +] + +lib_test_sources = files() +foreach lib_test : lib_tests + lib_test_sources += 'lib' / '@0@.vala'.format(lib_test) +endforeach + +test_executable = executable( + 'io.elementary.gala.tests', + common_test_sources, + lib_test_sources, + gala_lib_sources, + dependencies: gala_base_dep, + install: false, +) + +foreach lib_test : lib_tests + test(lib_test, test_executable, args: ['-p', '/Gala@0@'.format(lib_test)], suite: ['Gala', 'Gala/lib'], is_parallel: false) +endforeach From 159a70f25a11d5f50aceb86a22b8172419ec3b6d Mon Sep 17 00:00:00 2001 From: lenemter Date: Thu, 30 Apr 2026 16:01:55 +0300 Subject: [PATCH 2/2] GestureControllerTest: make sure actor is properly destroyed --- tests/lib/GestureControllerTest.vala | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/tests/lib/GestureControllerTest.vala b/tests/lib/GestureControllerTest.vala index ded64831e..a21c72ec7 100644 --- a/tests/lib/GestureControllerTest.vala +++ b/tests/lib/GestureControllerTest.vala @@ -92,6 +92,7 @@ public class Gala.GestureControllerTest : MutterTestCase { private MockBackend backend; private GestureController controller; private MockTarget target; + private Clutter.Actor actor; construct { add_test ("Test basic propagation", test_basic_propagation); @@ -101,7 +102,7 @@ public class Gala.GestureControllerTest : MutterTestCase { public override void set_up () { base.set_up (); - var actor = new Clutter.Actor (); + actor = new Clutter.Actor (); stage.add_child (actor); backend = new MockBackend (); @@ -121,11 +122,14 @@ public class Gala.GestureControllerTest : MutterTestCase { } public override void tear_down () { - stage.remove_child (target.actor); + if (actor != null) { + stage.remove_child (actor); + } backend = null; controller = null; target = null; + actor = null; base.tear_down (); } @@ -164,6 +168,10 @@ public class Gala.GestureControllerTest : MutterTestCase { assert_finalize_object (ref target); assert_finalize_object (ref controller); assert_finalize_object (ref backend); + + assert_nonnull (&actor); + stage.remove_child (actor); + assert_finalize_object (ref actor); } /**