From: Emmanuel Rodriguez Date: Wed, 23 Sep 2009 16:34:19 +0000 (+0200) Subject: Run the animations within an event loop X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=56585857e1f22b7717db789bb93dd2ce995ce0fa;p=libchamplain Run the animations within an event loop --- diff --git a/bindings/perl/Champlain/t/ChamplainLayer.t b/bindings/perl/Champlain/t/ChamplainLayer.t index c1ae40a..e6ab042 100644 --- a/bindings/perl/Champlain/t/ChamplainLayer.t +++ b/bindings/perl/Champlain/t/ChamplainLayer.t @@ -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(); +}