Francois Gouget : winetest/dissect: Add support for IgnoreExceptions.

Alexandre Julliard julliard at winehq.org
Mon Feb 15 16:01:14 CST 2021


Module: tools
Branch: master
Commit: caa31aa29bb563bb054a6ef9f3fa972a32628e40
URL:    https://source.winehq.org/git/tools.git/?a=commit;h=caa31aa29bb563bb054a6ef9f3fa972a32628e40

Author: Francois Gouget <fgouget at codeweavers.com>
Date:   Fri Feb 12 17:22:51 2021 +0100

winetest/dissect: Add support for IgnoreExceptions.

Any exception occurring while IgnoreExceptions=1 is expected and should
be ignored.

Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 winetest/dissect | 71 ++++++++++++++++++++++++++++++++++++++------------------
 1 file changed, 48 insertions(+), 23 deletions(-)

diff --git a/winetest/dissect b/winetest/dissect
index d2ef10d..4341999 100755
--- a/winetest/dissect
+++ b/winetest/dissect
@@ -448,7 +448,7 @@ my $unitsize = 0;
 my %units;
 my ($failures, $todo, $skipped) = (0, 0, 0);
 my ($s_failures, $s_todo, $s_skipped, $s_total) = (0, 0, 0, 0);
-my (%pids, $rc, $summary, $broken);
+my (%pids, $rc, $summary, $broken, $ignore_exceptions);
 my ($extra_failures, $failed_units) = (0, 0);
 
 sub get_source_link($$)
@@ -583,7 +583,7 @@ sub close_test_unit($)
     $unitsize = 0;
     $failures = $todo = $skipped = 0;
     $s_failures = $s_todo = $s_skipped = $s_total = 0;
-    $extra_failures = $broken = 0;
+    $extra_failures = $broken = $ignore_exceptions = 0;
     $rc = $summary = undef;
     %pids = ();
 }
@@ -661,45 +661,70 @@ while ($line = <IN>) {
         # Don't complain and don't count misplaced skips
         $skipped++ if ($units{$l_unit});
     }
+    elsif (($unit ne "" and
+            $line =~ /^(.*?)($units_re)\.c:(\d+): (IgnoreExceptions=([01]).*)$/) or
+         $line =~ /^()([_.a-z0-9]+)\.c:(\d+): (IgnoreExceptions=([01]).*)$/)
+    {
+      my ($pollution, $l_unit, $l_num, $l_text, $l_ignore) = ($1, $2, $3, $4, $5);
+      add_test_line("", escapeHTML($pollution) .
+                        get_source_link($l_unit, $l_num) .": ".
+                        escapeHTML($l_text));
+      $ignore_exceptions = $l_ignore;
+    }
     elsif (($unit ne "" and
             $line =~ /([0-9a-f]+):($units_re): unhandled exception [0-9a-fA-F]{8} at /) or
            $line =~ /^([0-9a-f]+):([_.a-z0-9]+): unhandled exception [0-9a-fA-F]{8} at /)
     {
         my ($l_pid, $l_unit) = ($1, $2);
-        if ($units{$l_unit})
+        my $class = "";
+        if (!$ignore_exceptions)
         {
-          # This also replaces a test summary line.
-          $pids{$l_pid || 0} = 1;
-          $s_failures++;
+            $class = "failed";
+            if ($units{$l_unit})
+            {
+                # This also replaces a test summary line.
+                $pids{$l_pid || 0} = 1;
+                $s_failures++;
+            }
+            check_unit($l_unit, "unhandled exception");
+            $failures++;
         }
-        add_test_line("failed", escapeHTML($line));
-        check_unit($l_unit, "unhandled exception");
-        $failures++;
+        add_test_line($class, escapeHTML($line));
     }
     elsif ($line =~ /Unhandled exception: .* in .* code /)
     {
-        # This also replaces a test summary line. The pid is unknown so use 0.
-        $pids{0} = 1;
-        $s_failures++;
-        $failures++;
-        add_test_line("failed", escapeHTML($line));
+        my $class = "";
+        if (!$ignore_exceptions)
+        {
+            $class = "failed";
+            # This also replaces a test summary line.
+            $pids{0} = 1; # the pid is unknown so use 0
+            $s_failures++;
+            $failures++;
+        }
+        add_test_line($class, escapeHTML($line));
     }
     elsif (($unit ne "" and
             $line =~ /^(.*?)($units_re)\.c:(\d+): (unhandled exception [0-9a-fA-F]{8} in child process ([0-9a-f]+).*)$/) or
            $line =~ /^()([_.a-z0-9]+)\.c:(\d+): (unhandled exception [0-9a-fA-F]{8} in child process ([0-9a-f]+).*)$/)
     {
         my ($pollution, $l_unit, $l_num, $l_text, $l_pid) = ($1, $2, $3, $4, $5);
-        if ($units{$l_unit})
+        my $class = "";
+        if (!$ignore_exceptions)
         {
-          # This also replaces a test summary line.
-          $pids{$l_pid || 0} = 1;
-          $s_failures++;
+            $class = "failed";
+            if ($units{$l_unit})
+            {
+                # This also replaces a test summary line.
+                $pids{$l_pid || 0} = 1;
+                $s_failures++;
+            }
+            check_unit($l_unit, "child exception");
+            $failures++;
         }
-        add_test_line("failed", escapeHTML($pollution) .
-                                get_source_link($l_unit, $l_num) .": ".
-                                escapeHTML($l_text));
-        check_unit($l_unit, "child exception");
-        $failures++;
+        add_test_line($class, escapeHTML($pollution) .
+                              get_source_link($l_unit, $l_num) .": ".
+                              escapeHTML($l_text));
     }
     elsif (($unit ne "" and
             $line =~ /^(.*?)($units_re)\.c:(\d+): (.*)$/) or




More information about the wine-cvs mailing list