> But it's quite possible that argument could be readonly while not a
> string, a simple example is a return value of a function:
> 
> % perl -le 'a(b(), "b"); sub a {($_[0], $_[1]) = ($_[1], $_[0]);}; \
>             sub b { 5 }'
> Modification of a read-only value attempted at -e line 1.

I think you need to revisit that example :)

nevertheless, the by-reference nature of $@ was getting in the way of a few
mod_perl tests that I didn't notice before, so I needed to use intermediate
variables anyway :)

> I'd rather see t_is_equal and t_cmp have identical API, if it's not too
> much of a trouble to you.

ok, the attached patch reflects that.

> btw, you don't need to craft \n in t_debug:
> just pass an array and it'll add them for you:

done

--Geoff
Index: Changes
===================================================================
RCS file: /home/cvs/httpd-test/perl-framework/Apache-Test/Changes,v
retrieving revision 1.137
diff -u -r1.137 Changes
--- Changes	28 May 2004 02:07:35 -0000	1.137
+++ Changes	9 Jun 2004 19:22:53 -0000
@@ -8,6 +8,12 @@
 
 =item 1.12-dev
 
+switch the order of arguments in t_cmp() so that it matches
+Test::More::is() and other Test::More functions.  the new call is
+  t_cmp($received, $expected, $comment);
+support for $expected as the first argument marked as deprecated
+and scheduled for removal with Apache-Test 1.15. [Geoffrey Young]
+
 add skip_reason() to Apache::Test, which provides a mechanism for
 user-specified skip messages [Geoffrey Young]
 
Index: lib/Apache/TestUtil.pm
===================================================================
RCS file: /home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestUtil.pm,v
retrieving revision 1.39
diff -u -r1.39 TestUtil.pm
--- lib/Apache/TestUtil.pm	2 Jun 2004 02:13:23 -0000	1.39
+++ lib/Apache/TestUtil.pm	9 Jun 2004 19:22:55 -0000
@@ -59,6 +59,16 @@
     my ($a, $b) = @_;
     return 0 unless @_ == 2;
 
+    # this was added in Apache::Test::VERSION 1.12 - remove deprecated
+    # logic in 1.15.
+    if (UNIVERSAL::isa($a, 'Regexp')) {
+        my @warning = ("WARNING!!! t_is_equal() argument order has changed.",
+                       "use of a regular expression as the first argument",
+                       "is deprecated.  support will be removed soon.");
+        t_debug(@warning);
+        ($a, $b) = ($b, $a);
+    }
+
     if (defined $a && defined $b) {
         my $ref_a = ref $a;
         my $ref_b = ref $b;
@@ -78,8 +88,8 @@
                 t_is_equal($a->{$key}, $b->{$key}) || return 0;
             }
         }
-        elsif ($ref_a eq 'Regexp') {
-            return $b =~ $a;
+        elsif ($ref_b eq 'Regexp') {
+            return $a =~ $b;
         }
         else {
             # try to compare the references
@@ -97,13 +107,25 @@
 
 sub t_cmp ($$;$) {
     Carp::carp(join(":", (caller)[1..2]) . 
-        ' usage: $res = t_cmp($expected, $received, [$comment])')
+        ' usage: $res = t_cmp($received, $expected, [$comment])')
             if @_ < 2 || @_ > 3;
 
+    my ($received, $expected) = @_;
+
+    # this was added in Apache::Test::VERSION 1.12 - remove deprecated
+    # logic in 1.15.
+    if (UNIVERSAL::isa($_[0], 'Regexp')) {
+        my @warning = ("WARNING!!! t_cmp() argument order has changed.",
+                       "use of a regular expression as the first argument",
+                       "is deprecated.  support will be removed soon.");
+        t_debug(@warning);
+        ($received, $expected) = ($expected, $received);
+    }
+
     t_debug("testing : " . pop) if @_ == 3;
-    t_debug("expected: " . struct_as_string(0, $_[0]));
-    t_debug("received: " . struct_as_string(0, $_[1]));
-    return t_is_equal($_[0], $_[1]);
+    t_debug("received: " . struct_as_string(0, $received));
+    t_debug("expected: " . struct_as_string(0, $expected));
+    return t_is_equal($received, $expected);
 }
 
 # Essentially t_cmp, but on Win32, first converts pathnames
@@ -405,7 +427,7 @@
 
 =item t_cmp()
 
-  t_cmp($expected, $received, $comment);
+  t_cmp($received, $expected, $comment);
 
 t_cmp() prints the values of I<$comment>, I<$expected> and
 I<$received>. e.g.:
@@ -443,9 +465,9 @@
         "hash of array of hashes");
 
 You can also compare the second argument against the first as a
-regex. Use the C<qr//> function in the first argument. For example:
+regex. Use the C<qr//> function in the second argument. For example:
 
-  t_cmp(qr/^abc/, "abcd", "regex compare");
+  t_cmp("abcd", qr/^abc/, "regex compare");
 
 will do:
 
@@ -584,10 +606,10 @@
 hashes, arrays, scalars, undefs or a combination of any of these.  See
 t_cmp() for an example.
 
-If C<$a> is a regex reference, the regex comparison C<$b =~ $a> is
+If C<$b> is a regex reference, the regex comparison C<$a =~ $b> is
 performed. For example:
 
-  t_is_equal(qr{^Apache}, $server_version);
+  t_is_equal($server_version, qr{^Apache});
 
 If comparing non-scalars make sure to pass the references to the
 datastructures.

Reply via email to