Split routines that don't rely on C functions into winetest.pm so that
they can be used from a normal Perl script.
diff --git a/programs/regedit/tests/regedit.pl b/programs/regedit/tests/regedit.pl
index 8072e7b..374d3ea 100644
--- a/programs/regedit/tests/regedit.pl
+++ b/programs/regedit/tests/regedit.pl
@@ -21,7 +21,7 @@
use strict;
use diagnostics;
-use wine;
+use winetest;
$main::orig_reg = './tests/orig.reg';
diff --git a/programs/winetest/include/wine.pm b/programs/winetest/include/wine.pm
index e6d890c..2ca244a 100644
--- a/programs/winetest/include/wine.pm
+++ b/programs/winetest/include/wine.pm
@@ -24,9 +24,7 @@
package wine;
use strict;
-use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD $todo_level
- $successes $failures $todo_successes $todo_failures
- $winetest_report_success
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD
%return_types %prototypes %loaded_modules);
require Exporter;
@@ -39,14 +37,6 @@
@EXPORT = qw(
AUTOLOAD
alloc_callback
- assert
- hd
- ok
- todo
- todo_wine
- trace
- wc
- wclen
);
$VERSION = '0.01';
@@ -54,17 +44,9 @@
# Global variables
$wine::err = 0;
-$wine::exit_status = 0;
$wine::debug = defined($ENV{WINETEST_DEBUG}) ? $ENV{WINETEST_DEBUG} : 1;
-$wine::platform = defined($ENV{WINETEST_PLATFORM}) ? $ENV{WINETEST_PLATFORM} : "windows";
-$todo_level = 0;
-$successes = 0;
-$failures = 0;
-$todo_successes = 0;
-$todo_failures = 0;
%loaded_modules = ();
-$winetest_report_success = defined($ENV{WINETEST_REPORT_SUCCESS}) ? $ENV{WINETEST_REPORT_SUCCESS} : 0;
# --------------------------------------------------------------
@@ -76,7 +58,7 @@
# | access to them. But I haven't worked it out |
# | yet ... |
# --------------------------------------------------------------
-%return_types = (
+%return_types = (
"void" => 0,
"int" => 1, "long" => 1,
"word" => 2,
@@ -265,7 +247,7 @@
# ----------------------------------------------
my $sub_ref = shift;
my @callback_arg_types = @_;
-
+
# [todo] Check args
# [todo] Some way of specifying args passed to callback
@@ -280,298 +262,6 @@
return alloc_thunk ($sub_ref, @callback_arg_types);
}
-
-# ----------------------------------------------------------------------
-# | Subroutine: hd |
-# | |
-# | Purpose: Display a hex dump of a string |
-# | |
-# | Usage: hd STR |
-# | Usage: hd STR, LENGTH |
-# | |
-# | Returns: (none) |
-# ----------------------------------------------------------------------
-sub hd($;$)
-{
- # Locals
- my ($buf, $length);
- my $first;
- my ($str1, $str2, $str, $t);
- my ($c, $x);
-
-# Begin sub hd
-
- # --------------------------------------------------------------
- # | Get args; if no BUF specified, blow |
- # --------------------------------------------------------------
- $buf = shift;
- $length = (shift or length ($buf));
- return
- if ((not defined ($buf)) || ($length <= 0));
-
- # --------------------------------------------------------------
- # | Initialize |
- # --------------------------------------------------------------
- $first = 1;
- $str1 = "00000:";
- $str2 = "";
-
- # --------------------------------------------------------------
- # | For each character |
- # --------------------------------------------------------------
- for (0 .. ($length - 1))
- {
- $c = substr ($buf, $_, 1);
- $x = sprintf ("%02x", ord ($c));
- $str1 .= (" " . $x);
- $str2 .= (((ord ($c) >= 33) && (ord ($c) <= 126)) ? $c : ".");
-
- # --------------------------------------------------------------
- # | Every group of 4, add an extra space |
- # --------------------------------------------------------------
- if
- (
- ((($_ + 1) % 16) == 4) ||
- ((($_ + 1) % 16) == 12)
- )
- {
- $str1 .= " ";
- $str2 .= " ";
- }
-
- # --------------------------------------------------------------
- # | Every group of 8, add a '-' |
- # --------------------------------------------------------------
- elsif
- (
- ((($_ + 1) % 16) == 8)
- )
- {
- $str1 .= " -";
- $str2 .= " ";
- }
-
- # --------------------------------------------------------------
- # | Every group of 16, dump |
- # --------------------------------------------------------------
- if
- (
- ((($_ + 1) % 16) == 0) ||
- ($_ == ($length - 1))
- )
- {
- $str = sprintf ("%-64s%s", $str1, $str2);
- if ($first)
- {
- $t = ("-" x length ($str));
- print " $t\n";
- print " | $length bytes\n";
- print " $t\n";
- $first = 0;
- }
- print " $str\n";
- $str1 = sprintf ("%05d:", ($_ + 1));
- $str2 = "";
- if ($_ == ($length - 1))
- {
- print " $t\n";
- }
- }
-
- } # end for
-
-
- # --------------------------------------------------------------
- # | Exit point |
- # --------------------------------------------------------------
- return;
-
-} # End sub hd
-
-
-
-# ----------------------------------------------------------------------
-# | Subroutine: wc |
-# | |
-# | Purpose: Generate unicode string |
-# | |
-# | Usage: wc ASCII_STRING |
-# | |
-# | Returns: string generated |
-# ----------------------------------------------------------------------
-sub wc($)
-{
- return pack("S*",unpack("C*",shift));
-} # End sub wc
-
-
-
-# ----------------------------------------------------------------------
-# | Subroutine: wclen |
-# | |
-# | Purpose: Return length of unicode string |
-# | |
-# | Usage: wclen UNICODE_STRING |
-# | |
-# | Returns: string generated |
-# ----------------------------------------------------------------------
-sub wclen($)
-{
- # Locals
- my $str = shift;
- my ($c1, $c2, $n);
-
-# Begin sub wclen
-
- $n = 0;
- while (length ($str) > 0)
- {
- $c1 = substr ($str, 0, 1, "");
- $c2 = substr ($str, 0, 1, "");
- (($c1 eq "\x00") && ($c2 eq "\x00")) ? last : $n++;
- }
-
- return ($n);
-
-} # End sub wclen
-
-
-
-# ----------------------------------------------------------------------
-# Subroutine: ok
-#
-# Purpose: Print warning if something fails
-#
-# Usage: ok CONDITION [DESCRIPTION]
-#
-# Returns: (none)
-# ----------------------------------------------------------------------
-sub ok($;$)
-{
- my $assertion = shift;
- my $description = shift;
- my ($filename, $line) = (caller (0))[1,2];
- if ($todo_level)
- {
- if ($assertion)
- {
- print STDERR ("$filename:$line: Test succeeded inside todo block" .
- ($description ? ": $description" : "") . "\n");
- $todo_failures++;
- }
- else { $todo_successes++; }
- }
- else
- {
- if (!$assertion)
- {
- print STDERR ("$filename:$line: Test failed" .
- ($description ? ": $description" : "") . "\n");
- $failures++;
- }
- else
- {
- print STDERR ("$filename:$line: Test succeeded\n") if ($winetest_report_success);
- $successes++;
- }
- }
-}
-
-
-# ----------------------------------------------------------------------
-# Subroutine: assert
-#
-# Purpose: Print error and die if something fails
-#
-# Usage: assert CONDITION [DESCRIPTION]
-#
-# Returns: (none)
-# ----------------------------------------------------------------------
-sub assert($;$)
-{
- my $assertion = shift;
- my $description = shift;
- my ($filename, $line) = (caller (0))[1,2];
- unless ($assertion)
- {
- die ("$filename:$line: Assertion failed" . ($description ? ": $description" : "") . "\n");
- }
-}
-
-
-# ----------------------------------------------------------------------
-# Subroutine: trace
-#
-# Purpose: Print debugging traces
-#
-# Usage: trace format [arguments]
-# ----------------------------------------------------------------------
-sub trace($@)
-{
- return unless ($wine::debug > 0);
- my $format = shift;
- my $filename = (caller(0))[1];
- $filename =~ s!.*/!!;
- printf "trace:$filename $format", @_;
-}
-
-# ----------------------------------------------------------------------
-# Subroutine: todo
-#
-# Purpose: Specify a block of code as todo for a given platform
-#
-# Usage: todo name coderef
-# ----------------------------------------------------------------------
-sub todo($$)
-{
- my ($platform,$code) = @_;
- if ($wine::platform eq $platform)
- {
- $todo_level++;
- eval &$code;
- $todo_level--;
- }
- else
- {
- eval &$code;
- }
-}
-
-
-# ----------------------------------------------------------------------
-# Subroutine: todo_wine
-#
-# Purpose: Specify a block of test as todo for the Wine platform
-#
-# Usage: todo_wine { code }
-# ----------------------------------------------------------------------
-sub todo_wine(&)
-{
- my $code = shift;
- todo( "wine", $code );
-}
-
-
-# ----------------------------------------------------------------------
-# Subroutine: END
-#
-# Purpose: Called at the end of execution, print results summary
-# ----------------------------------------------------------------------
-END
-{
- return if $?; # got some other error already
- if ($wine::debug > 0)
- {
- my $filename = (caller(0))[1];
- printf STDERR ("%s: %d tests executed, %d marked as todo, %d %s.\n",
- $filename, $successes + $failures + $todo_successes + $todo_failures,
- $todo_successes, $failures + $todo_failures,
- ($failures + $todo_failures != 1) ? "failures" : "failure" );
- }
- $? = ($failures + $todo_failures < 255) ? $failures + $todo_failures : 255;
-}
-
-
# Autoload methods go after =cut, and are processed by the autosplit program.
1;
__END__
diff --git a/programs/winetest/include/winetest.pm b/programs/winetest/include/winetest.pm
new file mode 100644
index 0000000..39e3b73
--- /dev/null
+++ b/programs/winetest/include/winetest.pm
@@ -0,0 +1,346 @@
+# --------------------------------------------------------------------
+# Main routines for the Wine test environment
+#
+# Copyright 2001 John F Sturtz for Codeweavers
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+# --------------------------------------------------------------------
+
+package winetest;
+
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $todo_level
+ $successes $failures $todo_successes $todo_failures $winetest_report_success);
+
+require Exporter;
+
+@ISA = qw(Exporter);
+
+# Items to export into callers namespace by default. Note: do not export
+# names by default without a very good reason. Use EXPORT_OK instead.
+# Do not simply export all your public functions/methods/constants.
+@EXPORT = qw(
+ assert
+ hd
+ ok
+ todo
+ todo_wine
+ trace
+ wc
+ wclen
+ );
+
+# Global variables
+$wine::debug = defined($ENV{WINETEST_DEBUG}) ? $ENV{WINETEST_DEBUG} : 1;
+$wine::platform = defined($ENV{WINETEST_PLATFORM}) ? $ENV{WINETEST_PLATFORM} : "windows";
+
+$todo_level = 0;
+$successes = 0;
+$failures = 0;
+$todo_successes = 0;
+$todo_failures = 0;
+$winetest_report_success = defined($ENV{WINETEST_REPORT_SUCCESS}) ? $ENV{WINETEST_REPORT_SUCCESS} : 0;
+
+# ----------------------------------------------------------------------
+# | Subroutine: hd |
+# | |
+# | Purpose: Display a hex dump of a string |
+# | |
+# | Usage: hd STR |
+# | Usage: hd STR, LENGTH |
+# | |
+# | Returns: (none) |
+# ----------------------------------------------------------------------
+sub hd($;$)
+{
+ # Locals
+ my ($buf, $length);
+ my $first;
+ my ($str1, $str2, $str, $t);
+ my ($c, $x);
+
+# Begin sub hd
+
+ # --------------------------------------------------------------
+ # | Get args; if no BUF specified, blow |
+ # --------------------------------------------------------------
+ $buf = shift;
+ $length = (shift or length ($buf));
+ return
+ if ((not defined ($buf)) || ($length <= 0));
+
+ # --------------------------------------------------------------
+ # | Initialize |
+ # --------------------------------------------------------------
+ $first = 1;
+ $str1 = "00000:";
+ $str2 = "";
+
+ # --------------------------------------------------------------
+ # | For each character |
+ # --------------------------------------------------------------
+ for (0 .. ($length - 1))
+ {
+ $c = substr ($buf, $_, 1);
+ $x = sprintf ("%02x", ord ($c));
+ $str1 .= (" " . $x);
+ $str2 .= (((ord ($c) >= 33) && (ord ($c) <= 126)) ? $c : ".");
+
+ # --------------------------------------------------------------
+ # | Every group of 4, add an extra space |
+ # --------------------------------------------------------------
+ if
+ (
+ ((($_ + 1) % 16) == 4) ||
+ ((($_ + 1) % 16) == 12)
+ )
+ {
+ $str1 .= " ";
+ $str2 .= " ";
+ }
+
+ # --------------------------------------------------------------
+ # | Every group of 8, add a '-' |
+ # --------------------------------------------------------------
+ elsif
+ (
+ ((($_ + 1) % 16) == 8)
+ )
+ {
+ $str1 .= " -";
+ $str2 .= " ";
+ }
+
+ # --------------------------------------------------------------
+ # | Every group of 16, dump |
+ # --------------------------------------------------------------
+ if
+ (
+ ((($_ + 1) % 16) == 0) ||
+ ($_ == ($length - 1))
+ )
+ {
+ $str = sprintf ("%-64s%s", $str1, $str2);
+ if ($first)
+ {
+ $t = ("-" x length ($str));
+ print " $t\n";
+ print " | $length bytes\n";
+ print " $t\n";
+ $first = 0;
+ }
+ print " $str\n";
+ $str1 = sprintf ("%05d:", ($_ + 1));
+ $str2 = "";
+ if ($_ == ($length - 1))
+ {
+ print " $t\n";
+ }
+ }
+
+ } # end for
+
+
+ # --------------------------------------------------------------
+ # | Exit point |
+ # --------------------------------------------------------------
+ return;
+
+} # End sub hd
+
+
+
+# ----------------------------------------------------------------------
+# | Subroutine: wc |
+# | |
+# | Purpose: Generate unicode string |
+# | |
+# | Usage: wc ASCII_STRING |
+# | |
+# | Returns: string generated |
+# ----------------------------------------------------------------------
+sub wc($)
+{
+ return pack("S*",unpack("C*",shift));
+} # End sub wc
+
+
+
+# ----------------------------------------------------------------------
+# | Subroutine: wclen |
+# | |
+# | Purpose: Return length of unicode string |
+# | |
+# | Usage: wclen UNICODE_STRING |
+# | |
+# | Returns: string generated |
+# ----------------------------------------------------------------------
+sub wclen($)
+{
+ # Locals
+ my $str = shift;
+ my ($c1, $c2, $n);
+
+# Begin sub wclen
+
+ $n = 0;
+ while (length ($str) > 0)
+ {
+ $c1 = substr ($str, 0, 1, "");
+ $c2 = substr ($str, 0, 1, "");
+ (($c1 eq "\x00") && ($c2 eq "\x00")) ? last : $n++;
+ }
+
+ return ($n);
+
+} # End sub wclen
+
+
+
+# ----------------------------------------------------------------------
+# Subroutine: ok
+#
+# Purpose: Print warning if something fails
+#
+# Usage: ok CONDITION [DESCRIPTION]
+#
+# Returns: (none)
+# ----------------------------------------------------------------------
+sub ok($;$)
+{
+ my $assertion = shift;
+ my $description = shift;
+ my ($filename, $line) = (caller (0))[1,2];
+ if ($todo_level)
+ {
+ if ($assertion)
+ {
+ print STDERR ("$filename:$line: Test succeeded inside todo block" .
+ ($description ? ": $description" : "") . "\n");
+ $todo_failures++;
+ }
+ else { $todo_successes++; }
+ }
+ else
+ {
+ if (!$assertion)
+ {
+ print STDERR ("$filename:$line: Test failed" .
+ ($description ? ": $description" : "") . "\n");
+ $failures++;
+ }
+ else
+ {
+ print STDERR ("$filename:$line: Test succeeded\n") if ($winetest_report_success);
+ $successes++;
+ }
+ }
+}
+
+
+# ----------------------------------------------------------------------
+# Subroutine: assert
+#
+# Purpose: Print error and die if something fails
+#
+# Usage: assert CONDITION [DESCRIPTION]
+#
+# Returns: (none)
+# ----------------------------------------------------------------------
+sub assert($;$)
+{
+ my $assertion = shift;
+ my $description = shift;
+ my ($filename, $line) = (caller (0))[1,2];
+ unless ($assertion)
+ {
+ die ("$filename:$line: Assertion failed" . ($description ? ": $description" : "") . "\n");
+ }
+}
+
+
+# ----------------------------------------------------------------------
+# Subroutine: trace
+#
+# Purpose: Print debugging traces
+#
+# Usage: trace format [arguments]
+# ----------------------------------------------------------------------
+sub trace($@)
+{
+ return unless ($wine::debug > 0);
+ my $format = shift;
+ my $filename = (caller(0))[1];
+ $filename =~ s!.*/!!;
+ printf "trace:$filename $format", @_;
+}
+
+# ----------------------------------------------------------------------
+# Subroutine: todo
+#
+# Purpose: Specify a block of code as todo for a given platform
+#
+# Usage: todo name coderef
+# ----------------------------------------------------------------------
+sub todo($$)
+{
+ my ($platform,$code) = @_;
+ if ($wine::platform eq $platform)
+ {
+ $todo_level++;
+ eval &$code;
+ $todo_level--;
+ }
+ else
+ {
+ eval &$code;
+ }
+}
+
+
+# ----------------------------------------------------------------------
+# Subroutine: todo_wine
+#
+# Purpose: Specify a block of test as todo for the Wine platform
+#
+# Usage: todo_wine { code }
+# ----------------------------------------------------------------------
+sub todo_wine(&)
+{
+ my $code = shift;
+ todo( "wine", $code );
+}
+
+
+# ----------------------------------------------------------------------
+# Subroutine: END
+#
+# Purpose: Called at the end of execution, print results summary
+# ----------------------------------------------------------------------
+END
+{
+ return if $?; # got some other error already
+ if ($wine::debug > 0)
+ {
+ my $filename = (caller(0))[1];
+ printf STDERR ("%s: %d tests executed, %d marked as todo, %d %s.\n",
+ $filename, $successes + $failures + $todo_successes + $todo_failures,
+ $todo_successes, $failures + $todo_failures,
+ ($failures + $todo_failures != 1) ? "failures" : "failure" );
+ }
+ $? = ($failures + $todo_failures < 255) ? $failures + $todo_failures : 255;
+}
+
+1;
diff --git a/programs/winetest/tests/wine.pl b/programs/winetest/tests/wine.pl
index 17e5d9f..53ad230 100644
--- a/programs/winetest/tests/wine.pl
+++ b/programs/winetest/tests/wine.pl
@@ -19,6 +19,7 @@
#
use wine;
+use winetest;
use kernel32;