]> err.no Git - libchamplain/commitdiff
Run the animations within an event loop
authorEmmanuel Rodriguez <emmanuel.rodriguez@gmail.com>
Wed, 23 Sep 2009 16:34:19 +0000 (18:34 +0200)
committerPierre-Luc Beaudoin <pierre-luc@pierlux.com>
Sat, 26 Sep 2009 13:17:23 +0000 (09:17 -0400)
bindings/perl/Champlain/t/ChamplainLayer.t

index c1ae40ab4439a9212faab66dc28ea6a616a6cc1b..e6ab0427c2f6151bad16ee3d59a3dbb7828984f0 100644 (file)
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Clutter::TestHelper tests => 9;
+use Clutter::TestHelper tests => 12;
 
 use Champlain;
 
@@ -32,17 +32,43 @@ sub tests {
        $layer->hide();
        ok(!$layer->get('visible'), "hide()");
 
-       # Too hard to test, but at least we call them
-       $layer->animate_in_all_markers();
+       # Test the animations by starting them and creating an event loop. The event
+       # loop will timeout after a while assuming that the animation is over.
+       ok($marker->get('opacity'));
        $layer->animate_out_all_markers();
+       run_event_loop();
+       is($marker->get('opacity'), 0, 'animate_out_all_markers()');
+
+       $layer->animate_in_all_markers();
+       run_event_loop();
+       is($marker->get('opacity'), 255, 'animate_in_all_markers()');
 
        # Show/Hide the markers
        ok($marker->get('visible'), "marker is not visible");
        $layer->hide_all_markers();
+       run_event_loop();
        ok(!$marker->get('visible'), "hide_all_markers()");
 
-
        $layer->show_all_markers();
+       run_event_loop();
        ok($marker->get('visible'), "show_all_markers()");
+
        return 0;
 }
+
+#
+# Runs a main loop for the purpose of executing one animation. The main loop is
+# timed in case where the test doesn't work.
+#
+sub run_event_loop {
+       my ($view) = @_;
+
+       # Give us a bit of time to get there since this is an animation and it
+       # requires an event loop. We add an idle timeout in order to make sure that we
+       # don't wait forever.
+       Glib::Timeout->add(2_000, sub {
+               Clutter->main_quit();
+               return FALSE;
+       });
+       Clutter->main();
+}