73 lines
2.3 KiB
Diff
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
|
|
|