perl-Tk/Tk-804.032-fix-race-condition-in-errordialog.t.patch

73 lines
2.3 KiB
Diff

From 04794000cf849e0c03a9e056222fb4758a55b04b Mon Sep 17 00:00:00 2001
From: Slaven Rezic <slaven@rezic.de>
Date: Sun, 27 Apr 2014 21:06:21 +0200
Subject: [PATCH 06/10] fix race condition in errordialog.t
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Test used to fail if the afterIdle callback with the die() was
executed after the checking callback. This could happen on slow (e.g.
remote) X11 connections.
Signed-off-by: Petr Písař <ppisar@redhat.com>
---
t/errordialog.t | 33 +++++++++++++++++++--------------
1 file changed, 19 insertions(+), 14 deletions(-)
diff --git a/t/errordialog.t b/t/errordialog.t
index 3036e5b..ffd1b71 100755
--- a/t/errordialog.t
+++ b/t/errordialog.t
@@ -27,21 +27,13 @@ use_ok 'Tk::ErrorDialog';
my $mw = tkinit;
$mw->geometry("+10+10");
-my $errmsg = "Intentional error.";
-$mw->afterIdle(sub { die "$errmsg\n" });
-
my $ed;
-$mw->after(100, sub {
- my $dialog = search_error_dialog($mw);
- isa_ok($dialog, "Tk::Dialog", "dialog");
- $ed = $dialog;
- my $error_stacktrace_toplevel = search_error_stacktrace_toplevel($mw);
- isa_ok($error_stacktrace_toplevel, 'Tk::ErrorDialog', 'Found stacktrace window');
- is($error_stacktrace_toplevel->state, 'withdrawn', 'Stacktrace not visible');
- $error_stacktrace_toplevel->geometry('+0+0'); # for WMs with interactive placement
- $dialog->SelectButton('Stack trace');
- second_error();
- });
+
+my $errmsg = "Intentional error.";
+$mw->afterIdle(sub {
+ $mw->after(100, \&first_error);
+ die "$errmsg\n";
+ });
$mw->after(20*1000, sub {
if (Tk::Exists($mw)) {
@@ -51,6 +43,19 @@ $mw->after(20*1000, sub {
});
MainLoop;
+# fills $ed
+sub first_error {
+ my $dialog = search_error_dialog($mw);
+ isa_ok($dialog, "Tk::Dialog", "dialog");
+ $ed = $dialog;
+ my $error_stacktrace_toplevel = search_error_stacktrace_toplevel($mw);
+ isa_ok($error_stacktrace_toplevel, 'Tk::ErrorDialog', 'Found stacktrace window');
+ is($error_stacktrace_toplevel->state, 'withdrawn', 'Stacktrace not visible');
+ $error_stacktrace_toplevel->geometry('+0+0'); # for WMs with interactive placement
+ $dialog->SelectButton('Stack trace');
+ second_error();
+}
+
sub second_error {
$mw->afterIdle(sub { die "$errmsg\n" });
$mw->after(100, sub {
--
1.9.3