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

index 1a212ee16cb06a317cfae1fcc2865cc12c682ebe..4ed2292e110845fc9bbfa5f80f522b92381aef9e 100644 (file)
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Clutter::TestHelper tests => 8;
+use Clutter::TestHelper tests => 13;
 
 use Champlain;
 
@@ -30,12 +30,42 @@ sub tests {
        $marker->set_highlighted(FALSE);
        is($marker->get_highlighted(), FALSE, "Changed highlighted to false");
 
-    # Can't be tested but at least we call them
-    $marker->animate_in();
-    $marker->animate_in_with_delay(200);
-    $marker->animate_out();
-    $marker->animate_out_with_delay(200);
+       # 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'));
+       $marker->animate_out();
+       run_event_loop();
+       is($marker->get('opacity'), 0, 'animate_out()');
+
+       $marker->animate_in();
+       run_event_loop();
+       is($marker->get('opacity'), 255, 'animate_in()');
+
+       $marker->animate_out_with_delay(200);
+       run_event_loop();
+       is($marker->get('opacity'), 0, 'animate_out_with_delay()');
+
+       $marker->animate_in_with_delay(200);
+       run_event_loop();
+       is($marker->get('opacity'), 255, 'animate_in_with_delay()');
 
        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();
+}