You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Erik Hülsmann <e....@gmx.net> on 2003/08/30 17:24:09 UTC

Re: [PATCH] Re: Code cleanup: Harmonized tests (Take 2)

Sorry, meant to send the message below to the list too. Was accedentally only sent to cmpilato and Fitz

bye,


Erik


------- Original message -------
Hi!


Ok, I sat down and started rewriting svntest.main.svn_run to svntest.actions.run_and_verify_svn calls. I left alone those instances where the context does not do any output-checks.

The code is not completely finished: there is one tests which keeps failing. I have not been able to find out why yet: 
 
XPASS: commit_tests.py 15: hook testing

Looking at the code I don't understand why commit_tests.py 15 should be marked XFail.

I thought I could submit this before the final state of the patch, because it would take quite some time to review it anyway. And I would have some time to fix commit_tests 15 before the patch is accepted anyway.

One last remark cmpilato wrote he would have liked to have the space changes as a separate patch. I decided that if you all don't mind too much, I could make a separate patch doing the rest of the space changes, but leaving the current patch as-is. Since it would take so much time to undo the space-change stuff...

BTW: the patch statistics have become a bit more aggressive than they were:
Total number of lines:   6100
Number of lines added:   1236
Number of lines removed: 1819


Let me know what you think.


bye,

Erik.


Log:
[[[
Rewrite the test suite to new philosophy where
exceptions are raised to pass errors back to
the caller.

* subversion/tests/clients/cmdline/basic_tests.py
* subversion/tests/clients/cmdline/commit_tests.py
* subversion/tests/clients/cmdline/copy_tests.py
* subversion/tests/clients/cmdline/diff_tests.py
* subversion/tests/clients/cmdline/export_tests.py
* subversion/tests/clients/cmdline/externals_tests.py
* subversion/tests/clients/cmdline/log_tests.py
* subversion/tests/clients/cmdline/merge_tests.py
* subversion/tests/clients/cmdline/prop_tests.py
* subversion/tests/clients/cmdline/schedule_tests.py
* subversion/tests/clients/cmdline/stat_tests.py
* subversion/tests/clients/cmdline/svnadmin_tests.py
* subversion/tests/clients/cmdline/svnlook_tests.py
* subversion/tests/clients/cmdline/trans_tests.py
* subversion/tests/clients/cmdline/update_tests.py
* subversion/tests/clients/cmdline/utf8_tests.py


]]]


>> "B. W. Fitzpatrick" <fi...@red-bean.com> writes:
>> 
>> > > > Last week I submitted a little change to the svnversion test. Before
>> > > > the test was found acceptable, I had to rewrite it so that it was
>> > > > written as a 'new style' test: one which uses the Python exception
>> > > > handling instead of the return 0 / return 1 structure.
>> > > 
>> > > I'm reviewing this now.
>> > 
>> > I have a few comments about the patch:
>> > 
>> > 1. Yay!
>> > 
>> > 2. I'd like to see the whitespace changes in a separate patch, but
>> >    that's not really A Big Deal.
>> > 
>> > 3. I found a couple of places where you're doing this:
>> > 
>> >   stat_output, err_output = svntest.main.run_svn(None, 'stat', '-vN')
>> >   if err_output:
>> >     raise svntest.Failure       
>> > 
>> > I'd like to see you use
>> > 
>> > run_and_verify_svn(message, expected_stdout, expected_stderr, *varargs):
>> > 
>> > in these cases.  It integrates the checking for different outputs on
>> > stderr and stdout.  I've already converted a bunch of the tests to use
>> > it, so there are plenty of examples.
>> 
>> These fixes, plus addressing the "raise 1" oopsy, plus my sudden lack
>> of immediate time to review and apply the patch are good reasons to
>> suggest that the patch be resubmitted with the proper fixes in place.
>> At that later date, perhaps I'll have more review/application time to
>> offer.
>
>OK.  Erik, if you want to make those changes and resubmit, I'll do my
>best to review ASAP, but I can't guarantee anything this week cause
>I'm swamperoonied.
>
>-Fitz
>



Index: diff_tests.py
===================================================================
--- diff_tests.py	(revision 6929)
+++ diff_tests.py	(working copy)
@@ -21,6 +21,7 @@
 
 # Our testing module
 import svntest
+from svntest import SVNAnyOutput
 
 # (abbreviation)
 Skip = svntest.testcase.Skip
@@ -405,7 +406,6 @@
   "multiple revisions diff'd forwards and backwards"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # rev 2
@@ -445,7 +445,6 @@
   "non-recursive behaviour"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   change_diff_commit_diff(wc_dir, 1,
@@ -484,7 +483,6 @@
   "diff only part of the repository"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   was_cwd = os.getcwd()
@@ -511,7 +509,6 @@
   "non version controlled files"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   svntest.main.file_append(os.path.join(wc_dir, 'A', 'D', 'foo'), "a new file")
@@ -534,8 +531,8 @@
   "pure repository diff update a file"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
+  
   was_cwd = os.getcwd()
   os.chdir(wc_dir)
 
@@ -626,27 +623,26 @@
   ### really ought to check that the property diff gets output.
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   current_dir = os.getcwd();
   os.chdir(sbox.wc_dir);
   try:
+    svntest.actions.run_and_verify_svn( None, None, [],
+                                        'propset',
+                                        'svn:eol-style', 'native', 'iota')
 
-    output, errput = svntest.main.run_svn(None, 'propset',
-                                          'svn:eol-style', 'native', 'iota')
-    if errput: raise svntest.Failure
-    output, errput = svntest.main.run_svn(None, 'ci', '-m', 'empty-msg')
-    if errput: raise svntest.Failure
+    svntest.actions.run_and_verify_svn( None, None, [],
+                                        'ci', '-m', 'empty-msg')
 
-    output, errput = svntest.main.run_svn(None, 'diff', '-r', '1:2')
-    if errput: raise svntest.Failure
+    svntest.actions.run_and_verify_svn( None, None, [],
+                                        'diff', '-r', '1:2')
 
-    output, errput = svntest.main.run_svn(None, 'diff', '-r', '2:1')
-    if errput: raise svntest.Failure
+    svntest.actions.run_and_verify_svn( None, None, [],
+                                        'diff', '-r', '2:1')
 
-    output, errput = svntest.main.run_svn(None, 'diff', '-r', '1')
-    if errput: raise svntest.Failure
+    svntest.actions.run_and_verify_svn( None, None, [],
+                                        'diff', '-r', '1')
 
   finally:
     os.chdir(current_dir)
@@ -661,7 +657,6 @@
   "don't diff file marked as binary type"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
   
   # Add a binary file to the project.
@@ -689,10 +684,9 @@
     })
 
   # Commit the new binary file, creating revision 2.
-  if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                           expected_status, None,
-                                           None, None, None, None, wc_dir):
-    raise svntest.Failure
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status, None,
+                                        None, None, None, None, wc_dir)
 
   # Update the whole working copy to HEAD (rev 2)
   expected_output = svntest.wc.State(wc_dir, {})
@@ -708,13 +702,12 @@
     'A/theta' : Item(status='  ', wc_rev=2, repos_rev=2),
     })
 
-  if svntest.actions.run_and_verify_update(wc_dir,
-                                           expected_output,
-                                           expected_disk,
-                                           expected_status,
-                                           None, None, None, None, None,
-                                           1):  # verify props, too.
-    raise svntest.Failure
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status,
+                                        None, None, None, None, None,
+                                        1)  # verify props, too.
 
   # Make a local mod to the binary file.
   svntest.main.file_append(theta_path, "some extra junk")
@@ -757,10 +750,9 @@
     'A/theta' : Item(status='  ', wc_rev=3, repos_rev=3),
     })
 
-  if svntest.actions.run_and_verify_commit(wc_dir, expected_output,
-                                           expected_status, None,
-                                           None, None, None, None, wc_dir):
-    raise svntest.Failure
+  svntest.actions.run_and_verify_commit(wc_dir, expected_output,
+                                        expected_status, None,
+                                        None, None, None, None, wc_dir)
 
   # Third diff use-case: 'svn diff -r2:3 wc' will compare two
   # repository trees.
@@ -812,12 +804,11 @@
   # Modify the file to ensure that the diff is non-empty.
   svntest.main.file_append(new_mu_path, "\nActually, it's a new mu.")
 
-  diff_output, err_output = svntest.main.run_svn(None, 'diff', '-r', 'HEAD',
-                                                 new_mu_path)
-  if diff_output == []:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, SVNAnyOutput, None,
+                                     'diff', '-r', 'HEAD', new_mu_path)
 
 
+
 #----------------------------------------------------------------------
 # Regression test for issue #977: make 'svn diff -r BASE:N' compare a
 # repository tree against the wc's text-bases, rather than the wc's
@@ -827,7 +818,6 @@
   "diff text-bases against repository"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   iota_path = os.path.join(sbox.wc_dir, 'iota')
@@ -863,11 +853,9 @@
   # If we run 'svn diff -r 1', we should see diffs that include *both*
   # the rev2 changes and local mods.  That's because the working files
   # are being compared to the repository.
-  diff_output, err_output = svntest.main.run_svn(None, 'diff', '-r', '1',
-                                                 wc_dir)
-  if err_output:
-    raise svntest.Failure
-
+  diff_output, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                        'diff',
+                                                        '-r', '1', wc_dir)
   line1 = "+This is the file 'iota'.some rev2 iota text.an iota local mod.\n"
 
   for line in diff_output:
@@ -879,11 +867,9 @@
   # If we run 'svn diff -r BASE:1', we should see diffs that only show
   # the rev2 changes and NOT the local mods.  That's because the
   # text-bases are being compared to the repository.
-  diff_output, err_output = svntest.main.run_svn(None, 'diff', '-r',
-                                                 'BASE:1', wc_dir)
-  if err_output:
-    raise svntest.Failure
-
+  diff_output, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                        'diff', '-r', 'BASE:1',
+                                                        wc_dir)
   line1 = "-This is the file 'iota'.some rev2 iota text.\n"
 
   for line in diff_output:
@@ -898,10 +884,9 @@
   # For example, we just ran 'svn diff -rBASE:1'.  The output should
   # look exactly the same as 'svn diff -r2:1'.  (If you remove the
   # header commentary)  
-  diff_output2, err_output = svntest.main.run_svn(None, 'diff', '-r',
-                                                 '2:1', wc_dir)
-  if err_output:
-    raise svntest.Failure
+  diff_output2, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                         'diff', '-r', '2:1',
+                                                         wc_dir)
 
   diff_output[2:4] = []
   diff_output2[2:4] = []
@@ -910,15 +895,14 @@
     raise svntest.Failure
 
   # and similarly, does 'svn diff -r1:2' == 'svn diff -r1:BASE' ?
-  diff_output, err_output = svntest.main.run_svn(None, 'diff', '-r',
-                                                 '1:2', wc_dir)
-  if err_output:
-    raise svntest.Failure
+  diff_output, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                        'diff',
+                                                        '-r', '1:2', wc_dir)
   
-  diff_output2, err_output = svntest.main.run_svn(None, 'diff', '-r',
-                                                 '1:BASE', wc_dir)
-  if err_output:
-    raise svntest.Failure
+  diff_output2, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                         'diff',
+                                                         '-r', '1:BASE',
+                                                         wc_dir)
 
   diff_output[2:4] = []
   diff_output2[2:4] = []
@@ -942,25 +926,21 @@
   # once again, verify that -r1:2 and -r1:BASE look the same, as do
   # -r2:1 and -rBASE:1.  None of these diffs should mention the
   # scheduled addition or deletion.
-  diff_output, err_output = svntest.main.run_svn(None, 'diff', '-r',
-                                                 '1:2', wc_dir)
-  if err_output:
-    raise svntest.Failure
+  diff_output, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                        'diff', '-r',
+                                                        '1:2', wc_dir)
 
-  diff_output2, err_output = svntest.main.run_svn(None, 'diff', '-r',
-                                                 '1:BASE', wc_dir)
-  if err_output:
-    raise svntest.Failure
+  diff_output2, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                         'diff', '-r',
+                                                         '1:BASE', wc_dir)
 
-  diff_output3, err_output = svntest.main.run_svn(None, 'diff', '-r',
-                                                 '2:1', wc_dir)
-  if err_output:
-    raise svntest.Failure
+  diff_output3, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                         'diff', '-r',
+                                                         '2:1', wc_dir)
 
-  diff_output4, err_output = svntest.main.run_svn(None, 'diff', '-r',
-                                                 'BASE:1', wc_dir)
-  if err_output:
-    raise svntest.Failure
+  diff_output4, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                         'diff', '-r',
+                                                         'BASE:1', wc_dir)
 
   diff_output[2:4] = []
   diff_output2[2:4] = []
@@ -1008,15 +988,13 @@
   
   # Now 'svn diff -r3:2' should == 'svn diff -rBASE:2', showing the
   # removal of changes to iota, the adding of mu, and deletion of newfile.
-  diff_output, err_output = svntest.main.run_svn(None, 'diff', '-r',
-                                                 '3:2', wc_dir)
-  if err_output:
-    raise svntest.Failure
+  diff_output, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                        'diff', '-r',
+                                                        '3:2', wc_dir)
 
-  diff_output2, err_output = svntest.main.run_svn(None, 'diff', '-r',
-                                                 'BASE:2', wc_dir)
-  if err_output:
-    raise svntest.Failure
+  diff_output2, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                         'diff', '-r',
+                                                         'BASE:2', wc_dir)
 
   # to do the comparison, remove all output lines starting with +++ or ---
   re_infoline = re.compile('^(\+\+\+|---).*$')
@@ -1043,7 +1021,6 @@
   "repos-repos diff on item deleted from HEAD"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   A_path = os.path.join(sbox.wc_dir, 'A')
@@ -1091,10 +1068,9 @@
   # Doing an 'svn diff -r1:2' on the URL of directory A should work,
   # especially over the DAV layer.
   the_url = sbox.repo_url + '/A'
-  diff_output, err_output = svntest.main.run_svn(None, 'diff', '-r',
-                                                 '1:2', the_url)
-  if err_output:    
-    raise svntest.Failure
+  diff_output = svntest.actions.run_and_verify_svn(None, None, [],
+                                                   'diff', '-r',
+                                                   '1:2', the_url)
 
 
 #----------------------------------------------------------------------
@@ -1174,64 +1150,64 @@
   A_url = svntest.main.current_repo_url + '/A'
   A2_url = svntest.main.current_repo_url + '/A2'
 
-  out, err = svntest.main.run_svn(None, 'cp', '-m', 'log msg', A_url, A2_url)
-  if err: raise svntest.Failure
+  svntest.actions.run_and_verify_svn( None, None, [],
+                                      'cp', '-m', 'log msg',
+                                      A_url, A2_url)
 
-  out, err = svntest.main.run_svn(None, 'up', sbox.wc_dir)
-  if err: raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'up', sbox.wc_dir)
 
   A_alpha = os.path.join(sbox.wc_dir, 'A', 'B', 'E', 'alpha')
   A2_alpha = os.path.join(sbox.wc_dir, 'A2', 'B', 'E', 'alpha')
 
   svntest.main.file_append(A_alpha, "\nfoo\n")
-  out, err = svntest.main.run_svn(None, 'ci', '-m', 'log msg', sbox.wc_dir)
-  if err: raise svntest.Failure
+  out = svntest.actions.run_and_verify_svn(None, None, [],
+                                           'ci', '-m', 'log msg', sbox.wc_dir)
 
   svntest.main.file_append(A2_alpha, "\nbar\n")
-  out, err = svntest.main.run_svn(None, 'ci', '-m', 'log msg', sbox.wc_dir)
-  if err: raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'ci', '-m', 'log msg', sbox.wc_dir)
 
   svntest.main.file_append(A_alpha, "zig\n")
 
   # Compare repository file on one branch against repository file on
   # another branch
   rel_path = os.path.join('B', 'E', 'alpha')
-  diff_output, err_output = svntest.main.run_svn(None, 'diff',
-                                                 '--old', A_url,
-                                                 '--new', A2_url,
-                                                 rel_path)
-  if err_output: raise svntest.Failure
+  diff_output, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                        'diff',
+                                                        '--old', A_url,
+                                                        '--new', A2_url,
+                                                        rel_path)
   verify_expected_output(diff_output, "-foo")
   verify_expected_output(diff_output, "+bar")
 
   # Same again but using whole branch
-  diff_output, err_output = svntest.main.run_svn(None, 'diff',
-                                                 '--old', A_url,
-                                                 '--new', A2_url)
-  if err_output: raise svntest.Failure
+  diff_output, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                        'diff',
+                                                        '--old', A_url,
+                                                        '--new', A2_url)
   verify_expected_output(diff_output, "-foo")
   verify_expected_output(diff_output, "+bar")
 
   # Compare two repository files on different branches
-  diff_output, err_output = svntest.main.run_svn(None, 'diff',
-                                                 A_url + '/B/E/alpha',
-                                                 A2_url + '/B/E/alpha')
-  if err_output: raise svntest.Failure
+  diff_output, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                        'diff',
+                                                        A_url + '/B/E/alpha',
+                                                        A2_url + '/B/E/alpha')
   verify_expected_output(diff_output, "-foo")
   verify_expected_output(diff_output, "+bar")
 
   # Compare two versions of a file on a single branch
-  diff_output, err_output = svntest.main.run_svn(None, 'diff',
-                                                 A_url + '/B/E/alpha@2',
-                                                 A_url + '/B/E/alpha@3')
-  if err_output: raise svntest.Failure
+  diff_output, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                        'diff',
+                                                        A_url + '/B/E/alpha@2',
+                                                        A_url + '/B/E/alpha@3')
   verify_expected_output(diff_output, "+foo")
 
   # Compare identical files on different branches
-  diff_output, err_output = svntest.main.run_svn(None, 'diff',
-                                                 A_url + '/B/E/alpha@2',
-                                                 A2_url + '/B/E/alpha@3')
-  if diff_output or err_output: raise svntest.Failure
+  diff_output, err = svntest.actions.run_and_verify_svn(
+    None, [], [],
+    'diff', A_url + '/B/E/alpha@2', A2_url + '/B/E/alpha@3')
 
 
 #----------------------------------------------------------------------
@@ -1243,22 +1219,23 @@
   A_url = svntest.main.current_repo_url + '/A'
   A2_url = svntest.main.current_repo_url + '/A2'
 
-  out, err = svntest.main.run_svn(None, 'cp', '-m', 'log msg', A_url, A2_url)
-  if err: raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'cp', '-m', 'log msg',
+                                     A_url, A2_url)
 
-  out, err = svntest.main.run_svn(None, 'up', sbox.wc_dir)
-  if err: raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'up', sbox.wc_dir)
 
   A_alpha = os.path.join(sbox.wc_dir, 'A', 'B', 'E', 'alpha')
   A2_alpha = os.path.join(sbox.wc_dir, 'A2', 'B', 'E', 'alpha')
 
   svntest.main.file_append(A_alpha, "\nfoo\n")
-  out, err = svntest.main.run_svn(None, 'ci', '-m', 'log msg', sbox.wc_dir)
-  if err: raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'ci', '-m', 'log msg', sbox.wc_dir)
 
   svntest.main.file_append(A2_alpha, "\nbar\n")
-  out, err = svntest.main.run_svn(None, 'ci', '-m', 'log msg', sbox.wc_dir)
-  if err: raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'ci', '-m', 'log msg', sbox.wc_dir)
 
   svntest.main.file_append(A_alpha, "zig\n")
 
@@ -1266,19 +1243,20 @@
   # another branch
   A_path = os.path.join(sbox.wc_dir, 'A')
   rel_path = os.path.join('B', 'E', 'alpha')
-  diff_output, err_output = svntest.main.run_svn(None, 'diff',
-                                                 '--old', A2_url,
-                                                 '--new', A_path,
-                                                 rel_path)
-  if err_output: raise svntest.Failure
+  diff_output, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                        'diff',
+                                                        '--old', A2_url,
+                                                        '--new', A_path,
+                                                        rel_path)
   verify_expected_output(diff_output, "-bar")
   verify_expected_output(diff_output, "+foo")
   verify_expected_output(diff_output, "+zig")
 
   # Same again but using whole branch
-  diff_output, err_output = svntest.main.run_svn(None, 'diff',
-                                                 '--old', A2_url,
-                                                 '--new', A_path)
+  diff_output, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                        'diff',
+                                                        '--old', A2_url,
+                                                        '--new', A_path)
   verify_expected_output(diff_output, "-bar")
   verify_expected_output(diff_output, "+foo")
   verify_expected_output(diff_output, "+zig")
@@ -1299,40 +1277,42 @@
   os.remove(iota_path)
   svntest.main.file_append(iota_path, "foo\nbar\nsnafu\n")
   
-  out, err = svntest.main.run_svn(None, 'ci', '-m', 'log msg', iota_path)
-  if err: raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'ci', '-m', 'log msg', iota_path)
 
   # Now, copy the file elsewhere, twice.
-  out, err = svntest.main.run_svn(None, 'cp', '-m', 'log msg',
-                                  iota_url, iota_copy_url)
-  if err: raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'cp', '-m', 'log msg',
+                                     iota_url, iota_copy_url)
 
-  out, err = svntest.main.run_svn(None, 'cp', '-m', 'log msg',
-                                  iota_url, iota_copy2_url)
-  if err: raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'cp', '-m', 'log msg',
+                                     iota_url, iota_copy2_url)
 
   # Update (to get the copies)
-  out, err = svntest.main.run_svn(None, 'up', sbox.wc_dir)
-  if err: raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'up', sbox.wc_dir)
 
   # Now, make edits to one of the copies of iota, and commit.
   os.remove(iota_copy_path)
   svntest.main.file_append(iota_copy_path, "foo\nsnafu\nabcdefg\nopqrstuv\n")
 
-  out, err = svntest.main.run_svn(None, 'ci', '-m', 'log msg', iota_copy_path)
-  if err: raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'ci', '-m', 'log msg', iota_copy_path)
 
   # Finally, do a diff between the first and second copies of iota,
   # and verify that we got the expected lines.  And then do it in reverse!
-  out, err = svntest.main.run_svn(None, 'diff', iota_copy_url, iota_copy2_url)
-  if err: raise svntest.Failure
+  out, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                'diff',
+                                                iota_copy_url, iota_copy2_url)
 
   verify_expected_output(out, "+bar")
   verify_expected_output(out, "-abcdefg")
   verify_expected_output(out, "-opqrstuv")
 
-  out, err = svntest.main.run_svn(None, 'diff', iota_copy2_url, iota_copy_url)
-  if err: raise svntest.Failure
+  out, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                'diff',
+                                                iota_copy2_url, iota_copy_url)
 
   verify_expected_output(out, "-bar")
   verify_expected_output(out, "+abcdefg")
Index: copy_tests.py
===================================================================
--- copy_tests.py	(revision 6929)
+++ copy_tests.py	(working copy)
@@ -21,8 +21,8 @@
 
 # Our testing module
 import svntest
+from svntest import SVNAnyOutput
 
-
 # (abbreviation)
 Skip = svntest.testcase.Skip
 XFail = svntest.testcase.XFail
@@ -112,7 +112,6 @@
   "basic copy and move commands -- on files only"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   mu_path = os.path.join(wc_dir, 'A', 'mu')
@@ -256,7 +255,6 @@
   # -- Lars
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   unver_path = os.path.join(wc_dir, 'A', 'unversioned')
@@ -281,7 +279,6 @@
   "receive a copied directory during update"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Make a backup copy of the working copy.
@@ -376,7 +373,6 @@
   "resurrect a deleted directory"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Delete directory A/D/G, commit that as r2.
@@ -454,16 +450,14 @@
   dirURL2  =  svntest.main.current_repo_url + "/A/D/H"
 
   # Expect out-of-date failure if 'svn cp URL URL' tries to overwrite a file  
-  outlines, errlines = svntest.main.run_svn(1,
-                                            'cp', fileURL1, fileURL2,
-                                            '--username',
-                                            svntest.main.wc_author,
-                                            '--password',
-                                            svntest.main.wc_passwd,
-                                            '-m', 'fooogle')
-  if not errlines:
-    print "Whoa, I was able to overwrite a file!"
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn( "Whoa, I was able to overwrite a file!",
+                                      None, SVNAnyOutput,
+                                      'cp', fileURL1, fileURL2,
+                                      '--username',
+                                      svntest.main.wc_author,
+                                      '--password',
+                                      svntest.main.wc_passwd,
+                                      '-m', 'fooogle')
 
   # Create A/D/H/G by running 'svn cp ...A/D/G .../A/D/H'
   svntest.actions.run_and_verify_svn(None, None, [],
@@ -473,16 +467,13 @@
                                      '-m', 'fooogle')
 
   # Repeat the last command.  It should *fail* because A/D/H/G already exists.
-  outlines, errlines = svntest.main.run_svn(1,
-                                            'cp', dirURL1, dirURL2,
-                                            '--username',
-                                            svntest.main.wc_author,
-                                            '--password',
-                                            svntest.main.wc_passwd,
-                                            '-m', 'fooogle')
-  if not errlines:
-    print "Whoa, I was able to overwrite a directory!"
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(
+    "Whoa, I was able to overwrite a directory!",
+    None, SVNAnyOutput,
+    'cp', dirURL1, dirURL2,
+    '--username', svntest.main.wc_author,
+    '--password', svntest.main.wc_passwd,
+    '-m', 'fooogle')
 
 #----------------------------------------------------------------------
 
@@ -528,15 +519,12 @@
   # These copies should fail
   pi_path = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
   alpha_path = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
-  outlines, errlines = svntest.main.run_svn(1, 'cp', pi_path, rho_path)
-  if not errlines:
-    raise svntest.Failure
-  outlines, errlines = svntest.main.run_svn(1, 'cp', pi_path, tau_path)
-  if not errlines:
-    raise svntest.Failure
-  outlines, errlines = svntest.main.run_svn(1, 'cp', pi_path, alpha_path)
-  if not errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn( "", None, SVNAnyOutput,
+                                      'cp', pi_path, rho_path)
+  svntest.actions.run_and_verify_svn( "", None, SVNAnyOutput,
+                                      'cp', pi_path, tau_path)
+  svntest.actions.run_and_verify_svn( "", None, SVNAnyOutput,
+                                      'cp', pi_path, alpha_path)
 
   # Status after failed copies should not have changed
   extra_files = [ 'tau' ]
@@ -554,8 +542,8 @@
   "copy and tree and modify before commit"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
+  
   svntest.actions.run_and_verify_svn(None, None, [], 'cp',
                                      wc_dir + '/A/B', wc_dir + '/A/B2',
                                      '-m', 'fooogle')
@@ -661,7 +649,6 @@
   "copy a tree and delete part of it before commit"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # copy a tree
@@ -714,7 +701,6 @@
   "move and revert a directory"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Issue 931: move failed to lock the directory being deleted
@@ -745,7 +731,6 @@
 
   # Bootstrap
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Create two paths
@@ -790,7 +775,6 @@
   "working-copy to repository copy"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   beta_path = os.path.join(wc_dir, "A", "B", "E", "beta")
@@ -861,7 +845,6 @@
   "repository to working-copy copy"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # We have a standard repository and working copy.  Now we create a
@@ -925,9 +908,8 @@
   pi_url = other_repo_url + "/A/D/G/pi"
 
   # Expect an error in the directory case
-  output, errput = svntest.main.run_svn(1, 'copy', E_url, wc_dir)  
-  if not errput:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn("", None, SVNAnyOutput,
+                                     'copy', E_url, wc_dir)  
 
   # But file case should work fine.
   svntest.actions.run_and_verify_svn(None, None, [], 'copy', pi_url, wc_dir)
@@ -962,6 +944,7 @@
 
   sbox.build()
   wc_dir = sbox.wc_dir
+  
   B_url = svntest.main.current_repo_url + "/A/B"
   F_url = svntest.main.current_repo_url + "/A/B/F"
 
@@ -1012,6 +995,7 @@
 
   sbox.build()
   wc_dir = sbox.wc_dir
+  
   B_url = svntest.main.current_repo_url + "/A/B"
   F_B_url = svntest.main.current_repo_url + "/A/B/F/B"
 
@@ -1093,9 +1077,8 @@
 
   # Delete a file in the repository via immediate commit
   rho_url = svntest.main.current_repo_url + '/A/D/G/rho'
-  outlines,errlines = svntest.main.run_svn(None, 'rm', rho_url, '-m', 'rev 2')
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'rm', rho_url, '-m', 'rev 2')
 
   # Update the wc to HEAD (r2)
   expected_output = svntest.wc.State(wc_dir, {
@@ -1111,13 +1094,8 @@
                                         expected_status)
 
   # repos->wc copy, to resurrect deleted file.
-  outlines,errlines = svntest.main.run_svn(None, 'cp', '-r', '1',
-                                           rho_url, wc_dir)
-  if errlines:
-    print "Copy Error:"
-    for line in errlines:
-      print line
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn("Copy error:", None, [],
+                                     'cp', '-r', '1', rho_url, wc_dir)
 
   # status should now show the file scheduled for addition-with-history
   expected_status.add({
Index: stat_tests.py
===================================================================
--- stat_tests.py	(revision 6929)
+++ stat_tests.py	(working copy)
@@ -29,6 +29,7 @@
 Item = svntest.wc.StateItem
 
 
+
 ######################################################################
 # Tests
 #
@@ -39,9 +40,7 @@
 def status_unversioned_file_in_current_dir(sbox):
   "status on unversioned file in current directory"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   was_cwd = os.getcwd()
@@ -50,15 +49,9 @@
 
     svntest.main.file_append('foo', 'a new file')
 
-    stat_output, err_output = svntest.main.run_svn(None, 'stat', 'foo')
+    svntest.actions.run_and_verify_svn(None, [ "?      foo\n" ], [],
+                                       'stat', 'foo')
 
-    if len(stat_output) != 1: 
-      return 1
-
-    if len(err_output) != 0:
-      return 1
-
-    return 0
   finally:
     os.chdir(was_cwd)
 
@@ -68,9 +61,7 @@
 def status_update_with_nested_adds(sbox):
   "run 'status -u' when nested additions are pending"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   # Make a backup copy of the working copy
@@ -103,10 +94,9 @@
     })
 
   # Commit.
-  if svntest.actions.run_and_verify_commit (wc_dir, expected_output,
-                                            expected_status, None,
-                                            None, None, None, None, wc_dir):
-    return 1
+  svntest.actions.run_and_verify_commit (wc_dir, expected_output,
+                                         expected_status, None,
+                                         None, None, None, None, wc_dir)
 
   # Now we go to the backup working copy, still at revision 1.
   # We will run 'svn st -u', and make sure that newdir/newfile is reported
@@ -124,73 +114,62 @@
   # an error happens, we'll catch it here.  So that's a good enough
   # regression test for now.  Someday, though, it would be nice to
   # positively match the mostly-empty lines.
-  return svntest.actions.run_and_verify_unquiet_status(wc_backup,
-                                                       expected_status)
-
+  svntest.actions.run_and_verify_unquiet_status(wc_backup,
+                                                expected_status)
+  
 #----------------------------------------------------------------------
 
 # svn status -vN should include all entries in a directory
 def status_shows_all_in_current_dir(sbox):
   "status -vN shows all items in current directory"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
   was_cwd = os.getcwd()
 
   os.chdir(wc_dir)
+  try:
 
-  stat_output, err_output = svntest.main.run_svn(None, 'stat', '-vN')
-  if err_output:
-    return 1
+    output, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                     'stat', '-vN')
 
-  entries_in_wc = len(os.listdir("."))
+    if (len(output) != len(os.listdir("."))):
+      raise svntest.Failure
 
-  os.chdir(was_cwd)
+  finally:
+    os.chdir(was_cwd)
 
-  if (len(stat_output) != entries_in_wc):
-    return 1
 
-  return 0
-
-
 #----------------------------------------------------------------------
 
 def status_missing_file(sbox):
   "status with a versioned file missing"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
+  
   was_cwd = os.getcwd()
-
+  
   os.chdir(wc_dir)
+  try:
 
-  os.remove('iota')
+    os.remove('iota')
 
-  stat_output, err_output = svntest.main.run_svn(None, 'status')
-  if err_output:
-    return 1
-  for line in stat_output:
-    if not re.match("! +iota", line):
-      return 1
-  
-  os.chdir(was_cwd)
+    output, err = svntest.actions.run_and_verify_svn(None, None, [], 'status')
+    for line in output:
+      if not re.match("! +iota", line):
+        raise svntest.Failure
+  finally:
+    os.chdir(was_cwd)
 
-  return 0
-
-
 #----------------------------------------------------------------------
 
 def status_type_change(sbox):
   "status on versioned items whose type has changed"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
+
   was_cwd = os.getcwd()
 
   os.chdir(wc_dir)
@@ -202,51 +181,48 @@
     os.rename('A', 'iota')
     os.rename('was_iota', 'A')
 
-    stat_output, err_output = svntest.main.run_svn(None, 'status')
-    if err_output or len(stat_output) != 2:
-      return 1
-    for line in stat_output:
+    output, err = svntest.actions.run_and_verify_svn( None, None, [], 'status')
+    if len(output) != 2:
+      raise svntest.Failure
+    for line in output:
       if not re.match("~ +(iota|A)", line):
-        return 1
+        raise svntest.Failure
 
     # Now change the file that is obstructing the versioned dir into an
     # unversioned dir.
     os.remove('A')
     os.mkdir('A')
 
-    stat_output, err_output = svntest.main.run_svn(None, 'status')
-    if err_output or len(stat_output) != 2:
-      return 1
-    for line in stat_output:
+    output, err = svntest.actions.run_and_verify_svn( None, None, [], 'status')
+    if len(output) != 2:
+      raise svntest.Failure
+    for line in output:
       if not re.match("~ +(iota|A)", line):
-        return 1
+        raise svntest.Failure
 
     # Now change the versioned dir that is obstructing the file into an
     # unversioned dir.
     svntest.main.safe_rmtree('iota')
     os.mkdir('iota')
 
-    stat_output, err_output = svntest.main.run_svn(None, 'status')
-    if err_output or len(stat_output) != 2:
-      return 1
-    for line in stat_output:
+    output, err = svntest.actions.run_and_verify_svn( None, None, [], 'status')
+    if len(output) != 2:
+      raise svntest.Failure
+    for line in output:
       if not re.match("~ +(iota|A)", line):
-        return 1
+        raise svntest.Failure
 
   finally:
     os.chdir(was_cwd)
 
-  return 0
-
 #----------------------------------------------------------------------
 
 def status_type_change_to_symlink(sbox):
   "status on versioned items replaced by symlinks"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
+  
   was_cwd = os.getcwd()
 
   os.chdir(wc_dir)
@@ -258,12 +234,12 @@
     svntest.main.safe_rmtree('A/D')
     os.symlink('bar', 'A/D')
 
-    stat_output, err_output = svntest.main.run_svn(None, 'status')
-    if err_output or len(stat_output) != 2:
-      return 1
-    for line in stat_output:
+    output, err = svntest.actions.run_and_verify_svn( None, None, [], 'status')
+    if len(output) != 2:
+      raise svntest.Failure
+    for line in output:
       if not re.match("~ +(iota|A/D)", line):
-        return 1
+        raise svntest.Failure
 
     # "valid" symlinks
     os.remove('iota')
@@ -271,72 +247,64 @@
     os.symlink('A/mu', 'iota')
     os.symlink('C', 'A/D')
 
-    stat_output, err_output = svntest.main.run_svn(None, 'status')
-    if err_output or len(stat_output) != 2:
-      return 1
-    for line in stat_output:
+    output, err = svntest.actions.run_and_verify_svn( None, None, [], 'status')
+    if len(output) != 2:
+      raise svntest.Failure
+    for line in output:
       if not re.match("~ +(iota|A/D)", line):
-        return 1
+        raise svntest.Failure
 
   finally:
     os.chdir(was_cwd)
 
-  return 0
-
-
 #----------------------------------------------------------------------
 # Regression test for revision 3686.
 
 def status_with_new_files_pending(sbox):
   "status -u with new files in the repository"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
+  
   was_cwd = os.getcwd()
 
   os.chdir(wc_dir)
+  try:
+    svntest.main.file_append('newfile', 'this is a new file')
+    svntest.main.run_svn(None, 'add', 'newfile')
+    svntest.main.run_svn(None, 'ci', '-m', 'logmsg')
+    svntest.main.run_svn(None, 'up', '-r', '1')
 
-  svntest.main.file_append('newfile', 'this is a new file')
-  svntest.main.run_svn(None, 'add', 'newfile')
-  svntest.main.run_svn(None, 'ci', '-m', 'logmsg')
-  svntest.main.run_svn(None, 'up', '-r', '1')
+    output, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                     'status', '-u')
 
-  stat_output, err_output = svntest.main.run_svn(None, 'status', '-u')
-  if err_output:
-    return 1
+    # The bug fixed in revision 3686 was a seg fault.  We don't have a
+    # reliable way to detect a seg fault here, since we haven't dealt
+    # with the popen2{Popen3,Popen4} mess in Python yet (the latter two
+    # are classes within the first, which is a module, and the Popen3
+    # class is not the same as os.popen3().  Got that?)  See the Python
+    # docs for details; in the meantime, no output means there was a
+    # problem.
+    for line in output:
+      if line.find('newfile') != -1:
+        break;
+    else:
+      raise svntest.Failure
 
-  # The bug fixed in revision 3686 was a seg fault.  We don't have a
-  # reliable way to detect a seg fault here, since we haven't dealt
-  # with the popen2{Popen3,Popen4} mess in Python yet (the latter two
-  # are classes within the first, which is a module, and the Popen3
-  # class is not the same as os.popen3().  Got that?)  See the Python
-  # docs for details; in the meantime, no output means there was a
-  # problem.
-  for line in stat_output:
-    if line.find('newfile') != -1:
-      break;
-  else:
-    return 1
+  finally:
+    os.chdir(was_cwd)
 
-  os.chdir(was_cwd)
-
-  return 0
-
-
 #----------------------------------------------------------------------
 
 def status_for_unignored_file(sbox):
   "status for unignored file and directory"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
+  
   was_cwd = os.getcwd()
 
   os.chdir(wc_dir)
-
   try:
     svntest.main.file_append('newfile', 'this is a new file')
     os.makedirs('newdir')
@@ -374,13 +342,12 @@
   os.chdir(wc_dir)
 
   try:
-    stat_output, err_output = svntest.main.run_svn(None, 'status', 
-                                                   'nonexistent-file')
-    if err_output:
-      raise svntest.Failure
+    output, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                     'status',
+                                                     'nonexistent-file')
 
     # there should *not* be a status line printed for the nonexistent file 
-    for line in stat_output:
+    for line in output:
       if re.match(" +nonexistent-file", line):
         raise svntest.Failure
   
@@ -417,10 +384,9 @@
   # any issue for this bug, so this comment and the thread are your
   # audit trail :-).
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
+  
   other_wc = sbox.add_wc_path('other')
 
   svntest.actions.duplicate_dir(wc_dir, other_wc)
@@ -431,7 +397,6 @@
   svntest.main.file_append('crontab.root', 'New file crontab.root.\n')
   svntest.main.run_svn(None, 'add', 'crontab.root')
   svntest.main.run_svn(None, 'ci', '-m', 'log msg')
-
   os.chdir(was_cwd)
   os.chdir(other_wc)
   svntest.main.run_svn(None, 'up')
@@ -445,18 +410,15 @@
   # the -v flag, which we don't want, as this bug never appeared when
   # -v was passed.  So we run status by hand:
   os.chdir(was_cwd)
-  out, err = svntest.main.run_svn(None, 'status', '-u', other_wc)
-  if err:
-    return 1
+  out, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                'status', '-u', other_wc)
 
-  saw_it = 0
   for line in out:
     if re.match("\\s+\\*.*crontab\\.root$", line):
-      saw_it = 1
+      break
+  else:
+    raise svntest.Failure
 
-  return not saw_it
-
-
 #----------------------------------------------------------------------
 
 def status_uninvited_parent_directory(sbox):
@@ -485,10 +447,9 @@
   # reverted because it caused other status problems (see the test
   # status_file_needs_update(), which fails when 4181 is present).
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
+  
   other_wc = sbox.add_wc_path('other')
 
   svntest.actions.duplicate_dir(wc_dir, other_wc)
@@ -510,27 +471,21 @@
   # We don't want a full status tree here, just one line (or two, if
   # the bug is present).  So run status by hand:
   os.chdir(was_cwd)
-  out, err = svntest.main.run_svn(None, 'status', '-u',
-                                  os.path.join(other_wc, 'newfile'))
-  if err:
-    return 1
+  out, err = svntest.actions.run_and_verify_svn(
+    None, None, [],
+    'status', '-u', os.path.join(other_wc, 'newfile'))
 
-  saw_uninvited_parent_dir = 0
   for line in out:
     # The "/?" is just to allow for an optional trailing slash.
     if re.match("\\s+\\*.*\.other/?$", line):
-      saw_uninvited_parent_dir = 1
+      raise svntest.Failure
 
-  return saw_uninvited_parent_dir
-
-
 def status_on_forward_deletion(sbox):
   "status -u on working copy deleted in HEAD"
   # See issue #1289.
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
+  
   top_url = svntest.main.current_repo_url
   A_url = top_url + '/A'
 
@@ -548,9 +503,7 @@
     #    svn: Working copy not locked
     #    svn: directory '' not locked
     #
-    out, err = svntest.main.run_svn(None, 'st', '-u', 'wc')
-    if err:
-      raise svntest.Failure
+    svntest.actions.run_and_verify_svn(None, None, [], 'st', '-u', 'wc')
 
     # Try again another way; the error would look like this:
     #
@@ -564,9 +517,7 @@
     #
     svntest.main.safe_rmtree('wc')
     svntest.main.run_svn(None, 'co', '-r1', A_url, 'wc')
-    out, err = svntest.main.run_svn(None, 'st', '-u', 'wc')
-    if err:
-      raise svntest.Failure
+    svntest.actions.run_and_verify_svn(None, None, [], 'st', '-u', 'wc')
     
   finally:
     os.chdir(saved_cwd)
Index: svnversion_tests.py
===================================================================
--- svnversion_tests.py	(revision 6929)
+++ svnversion_tests.py	(working copy)
@@ -69,10 +69,9 @@
   if errput or output != [ "1:2\n" ]:
     raise svntest.Failure
 
-  output, errput = svntest.main.run_svn(None, 'propset', 'blue', 'azul',
-                                        os.path.join(wc_dir, 'A', 'mu'))
-  if errput:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'propset', 'blue', 'azul',
+                                     os.path.join(wc_dir, 'A', 'mu'))
 
   # Prop modified, mixed
   output, errput = svntest.main.run_svnversion(wc_dir, repo_url)
Index: svnadmin_tests.py
===================================================================
--- svnadmin_tests.py	(revision 6929)
+++ svnadmin_tests.py	(working copy)
@@ -102,7 +102,6 @@
   "'svnadmin createtxn'"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
   repo_dir = sbox.repo_dir
 
@@ -121,7 +120,6 @@
   "'svnadmin rmtxns'"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
   repo_dir = sbox.repo_dir
 
@@ -149,6 +147,7 @@
 
 def dump_copied_dir(sbox):
   "'svnadmin dump' on copied directory"
+  
   sbox.build()
   wc_dir = sbox.wc_dir
   repo_dir = sbox.repo_dir
@@ -170,6 +169,7 @@
 
 def dump_move_dir_modify_child(sbox):
   "'svnadmin dump' on modified child of copied dir"
+
   sbox.build()
   wc_dir = sbox.wc_dir
   repo_dir = sbox.repo_dir
@@ -181,32 +181,30 @@
   svntest.main.run_svn(None, 'ci', wc_dir, '--quiet', '-m', 'log msg')
 
   output, errput = svntest.main.run_svnadmin("dump", repo_dir)
-  if svntest.actions.compare_and_display_lines(
+  svntest.actions.compare_and_display_lines(
     "Output of 'svnadmin dump' is unexpected.",
     'STDERR', ["* Dumped revision 0.\n",
                "* Dumped revision 1.\n",
-               "* Dumped revision 2.\n"], errput):
-    raise svntest.Failure
+               "* Dumped revision 2.\n"], errput)
 
   output, errput = svntest.main.run_svnadmin("dump", "-r", "0:HEAD", repo_dir)
-  if svntest.actions.compare_and_display_lines(
+  svntest.actions.compare_and_display_lines(
     "Output of 'svnadmin dump' is unexpected.",
     'STDERR', ["* Dumped revision 0.\n",
                "* Dumped revision 1.\n",
-               "* Dumped revision 2.\n"], errput):
-    raise svntest.Failure
+               "* Dumped revision 2.\n"], errput)
 
 #----------------------------------------------------------------------
 
 def dump_quiet(sbox):
   "'svnadmin dump --quiet'"
+
   sbox.build()
 
   output, errput = svntest.main.run_svnadmin("dump", sbox.repo_dir, '--quiet')
-  if svntest.actions.compare_and_display_lines(
+  svntest.actions.compare_and_display_lines(
     "Output of 'svnadmin dump --quiet' is unexpected.",
-    'STDERR', [], errput):
-    raise svntest.Failure
+    'STDERR', [], errput)
 
 
 ########################################################################
Index: prop_tests.py
===================================================================
--- prop_tests.py	(revision 6929)
+++ prop_tests.py	(working copy)
@@ -53,7 +53,6 @@
 
   # Bootstrap
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Add properties to one file and one directory
@@ -97,7 +96,6 @@
 
   # Bootstrap
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Add a property to a file and a directory
@@ -135,7 +133,6 @@
 
   # Bootstrap
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Make a backup copy of the working copy
@@ -199,7 +196,6 @@
 
   # Bootstrap
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   iota_path = os.path.join(wc_dir, 'iota') 
@@ -272,7 +268,6 @@
 
   # Bootstrap
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Add a property to a file
@@ -324,7 +319,6 @@
 
   # Bootstrap
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Add a property to a file and a directory
@@ -394,7 +388,6 @@
 
   # Bootstrap
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Add a property to two files
@@ -453,7 +446,6 @@
 
   # Bootstrap
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Add a property to two files
@@ -521,8 +513,8 @@
 
   # Bootstrap
   sbox.build()
-
   wc_dir = sbox.wc_dir
+  
   A_path = os.path.join(wc_dir, 'A')
   E_path = os.path.join(wc_dir, 'A', 'B', 'E')
   iota_path = os.path.join(wc_dir, 'iota')
@@ -622,7 +614,6 @@
 
   # Bootstrap
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   orig_mime_type = 'image/fake_image'
@@ -709,8 +700,8 @@
 
   # Bootstrap
   sbox.build()
-
   wc_dir = sbox.wc_dir
+  
   A_path = os.path.join(wc_dir, 'A')
   B_path = os.path.join(wc_dir, 'A', 'B')
   iota_path = os.path.join(wc_dir, 'iota')
Index: export_tests.py
===================================================================
--- export_tests.py	(revision 6929)
+++ export_tests.py	(working copy)
@@ -40,13 +40,13 @@
 def export_empty_directory(sbox):
   "export an empty directory"
   sbox.build()
+  
   svntest.main.safe_rmtree(sbox.wc_dir)
   export_target = sbox.wc_dir
   empty_dir_url = svntest.main.current_repo_url + '/A/C'
   svntest.main.run_svn(None, 'export', empty_dir_url, export_target)
   if not os.path.exists(export_target):
     raise svntest.Failure
-  return 0
 
 
 ########################################################################
Index: basic_tests.py
===================================================================
--- basic_tests.py	(revision 6929)
+++ basic_tests.py	(working copy)
@@ -21,7 +21,7 @@
 
 # Our testing module
 import svntest
-from svntest import wc
+from svntest import wc, SVNAnyOutput
 
 # (abbreviation)
 Skip = svntest.testcase.Skip
@@ -52,20 +52,19 @@
   "basic checkout of a wc"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Checkout of a different URL into a working copy fails
   A_url = svntest.main.current_repo_url + '/A'
-  stdout_lines, stderr_lines = svntest.main.run_svn ("Obstructed update",
-                                                     'co', A_url,
-                                                     '--username',
-                                                     svntest.main.wc_author,
-                                                     '--password',
-                                                     svntest.main.wc_passwd,
-                                                     wc_dir)
-  if not stderr_lines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn( "No error where some expected",
+                                      None, SVNAnyOutput,
+#                                      "Obstructed update",
+                                      'co', A_url,
+                                      '--username',
+                                      svntest.main.wc_author,
+                                      '--password',
+                                      svntest.main.wc_passwd,
+                                      wc_dir)
 
   # Make some changes to the working copy
   mu_path = os.path.join(wc_dir, 'A', 'mu')
@@ -114,7 +113,6 @@
   "basic status command"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Created expected output tree for 'svn status'
@@ -128,7 +126,6 @@
   "basic commit command"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Make a couple of local mods to files
@@ -164,7 +161,6 @@
   "basic update command"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Make a backup copy of the working copy
@@ -223,6 +219,7 @@
   "basic mkdir URL"
 
   sbox.build()
+
   Y_url = svntest.main.current_repo_url + '/Y'
   Y_Z_url = svntest.main.current_repo_url + '/Y/Z'
 
@@ -270,7 +267,6 @@
   ## Here we go...
 
   sbox.build()
-  
   wc_dir = sbox.wc_dir
 
   # Make the "other" working copy
@@ -379,7 +375,6 @@
   "receiving text merges as part of an update"
 
   sbox.build()
-  
   wc_dir = sbox.wc_dir
   
   # First change the greek tree to make two files 10 lines long
@@ -490,7 +485,6 @@
   "basic conflict creation and resolution"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Make a backup copy of the working copy
@@ -603,7 +597,6 @@
   "basic cleanup command"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Lock some directories.
@@ -636,7 +629,6 @@
   "basic revert command"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Modify some files.
@@ -760,7 +752,6 @@
   "basic switch command"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   ### Switch the file `iota' to `A/D/gamma'.
@@ -841,7 +832,6 @@
                                         expected_disk,
                                         expected_status)
 
-
 #----------------------------------------------------------------------
 
 def verify_file_deleted(message, path):
@@ -853,7 +843,6 @@
   ###TODO We should raise a less generic error here. which?
   raise Failure
   
-
 def can_cd_to_dir(path):
   current_dir = os.getcwd();
   try: os.chdir(path)
@@ -865,7 +854,6 @@
   "basic delete command"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # modify text of chi
@@ -918,31 +906,31 @@
   svntest.actions.run_and_verify_status(wc_dir, expected_output)
 
   # 'svn rm' that should fail
-  svntest.actions.run_and_verify_svn(None, None, svntest.SVNAnyOutput,
+  svntest.actions.run_and_verify_svn(None, None, SVNAnyOutput,
                                      'rm', chi_path)
 
-  svntest.actions.run_and_verify_svn(None, None, svntest.SVNAnyOutput,
+  svntest.actions.run_and_verify_svn(None, None, SVNAnyOutput,
                                      'rm', chi_parent_path)
   
-  svntest.actions.run_and_verify_svn(None, None, svntest.SVNAnyOutput,
+  svntest.actions.run_and_verify_svn(None, None, SVNAnyOutput,
                                      'rm', rho_path)
 
-  svntest.actions.run_and_verify_svn(None, None, svntest.SVNAnyOutput,
+  svntest.actions.run_and_verify_svn(None, None, SVNAnyOutput,
                                      'rm', rho_parent_path)
   
-  svntest.actions.run_and_verify_svn(None, None, svntest.SVNAnyOutput,
+  svntest.actions.run_and_verify_svn(None, None, SVNAnyOutput,
                                      'rm', F_path)
 
-  svntest.actions.run_and_verify_svn(None, None, svntest.SVNAnyOutput,
+  svntest.actions.run_and_verify_svn(None, None, SVNAnyOutput,
                                      'rm', F_parent_path)
   
-  svntest.actions.run_and_verify_svn(None, None, svntest.SVNAnyOutput,
+  svntest.actions.run_and_verify_svn(None, None, SVNAnyOutput,
                                      'rm', sigma_path)
 
-  svntest.actions.run_and_verify_svn(None, None, svntest.SVNAnyOutput,
+  svntest.actions.run_and_verify_svn(None, None, SVNAnyOutput,
                                      'rm', sigma_parent_path)
 
-  svntest.actions.run_and_verify_svn(None, None, svntest.SVNAnyOutput,
+  svntest.actions.run_and_verify_svn(None, None, SVNAnyOutput,
                                      'rm', X_path)
 
   # check status has not changed
@@ -1065,7 +1053,6 @@
   "checkout a path no longer in HEAD"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Delete A/D and commit.
@@ -1122,7 +1109,7 @@
 
   # Try and fail to create a directory (file scheduled for deletion)
   svntest.actions.run_and_verify_svn('Cannot change node kind',
-                                     None, svntest.SVNAnyOutput,
+                                     None, SVNAnyOutput,
                                      'mkdir', gamma_path)
 
   # Status is unchanged
@@ -1142,7 +1129,7 @@
 
   # Try and fail to create a directory (file deleted)
   svntest.actions.run_and_verify_svn('Cannot change node kind',
-                                     None, svntest.SVNAnyOutput,
+                                     None, SVNAnyOutput,
                                      'mkdir', gamma_path)
 
   # Status is unchanged
@@ -1166,7 +1153,6 @@
   "basic import of single new file"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # create a new directory with files of various permissions
@@ -1229,7 +1215,6 @@
   "basic import of executable files"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # create a new directory with files of various permissions
@@ -1313,7 +1298,6 @@
   "basic cat of files"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   mu_path = os.path.join(wc_dir, 'A', 'mu')
@@ -1402,7 +1386,7 @@
   # the root directory, the test could fail, and that's just too bad :-). 
 
   output, errput = svntest.actions.run_and_verify_svn(
-    None, None, svntest.SVNAnyOutput,
+    None, None, SVNAnyOutput,
     'log', 'file:///nonexistent_path')
 
   for line in errput:
@@ -1420,8 +1404,8 @@
   "basic auth caching"
 
   sbox.build()
-
   wc_dir         = sbox.wc_dir
+  
   repo_dir       = sbox.repo_dir
   repo_url       = sbox.repo_url
 
@@ -1468,7 +1452,6 @@
   # svn_wc_is_ignored function.
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   dir_path = os.path.join(wc_dir, 'dir')
@@ -1479,11 +1462,10 @@
   open(foo_c_path, 'w')
   open(foo_o_path, 'w')
 
-  (output, errput) = svntest.main.run_svn (None, 'add', dir_path)
+  output, err = svntest.actions.run_and_verify_svn(
+    "No output where some expected", SVNAnyOutput, None,
+    'add', dir_path)
 
-  if not output:
-    raise svntest.actions.SVNUnexpectedOutput
-
   for line in output:
     # If we see foo.o in the add output, fail the test.
     if re.match(r'^A\s+.*foo.o$', line):
@@ -1507,7 +1489,6 @@
   # svn_wc_is_ignored function.
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   dir_path = os.path.join(wc_dir, 'dir')
@@ -1521,7 +1502,6 @@
   # import new dir into repository
   url = os.path.join(svntest.main.current_repo_url, 'dir')
 
-
   output, errput = svntest.actions.run_and_verify_svn(
     None, None, [], 'import',
     '--username', svntest.main.wc_author,
@@ -1567,7 +1547,6 @@
                                         None, None, None,
                                         None, None, 1)
 
-
 def uri_syntax(sbox):
   'make sure URI syntaxes are parsed correctly'
 
@@ -1579,13 +1558,13 @@
   url = svntest.main.current_repo_url
   schema = url[:string.find(url, ":")]
   url = schema + "://some_nonexistent_host_with_no_trailing_slash"
-  output, errput = svntest.main.run_svn (1, 'co', url, wc_dir)
+  svntest.actions.run_and_verify_svn( "No error where one expected",
+                                      None, SVNAnyOutput,
+                                      'co', url, wc_dir)
 
   # Different RA layers give different errors for failed checkouts;
   # for us, it's only important to know that it _did_ error (as
   # opposed to segfaulting), so we don't examine the error text.
-  if not errput:
-    raise svntest.Failure
 
 
 #----------------------------------------------------------------------
Index: log_tests.py
===================================================================
--- log_tests.py	(revision 6929)
+++ log_tests.py	(working copy)
@@ -21,6 +21,7 @@
 
 # Our testing module
 import svntest
+from svntest import SVNAnyOutput
 
 
 ######################################################################
@@ -67,7 +68,6 @@
   global max_revision
 
   sbox.build()
-
   wc_path = sbox.wc_dir
 
   # Now we have a repos and wc at revision 1.
@@ -315,25 +315,20 @@
 
   guarantee_repos_and_wc(sbox)
 
-  result = 0
-
   was_cwd = os.getcwd()
   os.chdir(sbox.wc_dir)
 
-  output, errput = svntest.main.run_svn (None, 'log')
+  try:
+    output, err = svntest.actions.run_and_verify_svn ("", None, [], 'log')
 
-  if errput:
+    log_chain = parse_log_output (output)
+    if check_log_chain (log_chain, range(max_revision, 1 - 1, -1)):
+      raise svntest.Failure
+    
+  finally:
     os.chdir (was_cwd)
-    raise svntest.Failure
 
-  log_chain = parse_log_output (output)
-  if check_log_chain (log_chain, range(max_revision, 1 - 1, -1)):
-    os.chdir (was_cwd)
-    raise svntest.Failure
 
-  os.chdir (was_cwd)
-
-
 #----------------------------------------------------------------------
 def versioned_log_message(sbox):
   "'svn commit -F foo' when foo is a versioned file"
@@ -343,50 +338,37 @@
   was_cwd = os.getcwd ()
   os.chdir (sbox.wc_dir)
 
-  iota_path = os.path.join ('iota')
-  mu_path = os.path.join ('A', 'mu')
-  log_path = os.path.join ('A', 'D', 'H', 'omega')
+  try:
+    iota_path = os.path.join ('iota')
+    mu_path = os.path.join ('A', 'mu')
+    log_path = os.path.join ('A', 'D', 'H', 'omega')
+    
+    svntest.main.file_append (iota_path, "2")
+    
+    # try to check in a change using a versioned file as your log entry.
+    svntest.actions.run_and_verify_svn( "", None, SVNAnyOutput,
+                                        'ci', '-F', log_path)
 
-  svntest.main.file_append (iota_path, "2")
+    # force it.  should not produce any errors.
+    svntest.actions.run_and_verify_svn ( "", None, [],
+                                         'ci', '-F', log_path, '--force-log')
 
-  # try to check in a change using a versioned file as your log entry.
-  stdout_lines, stderr_lines = svntest.main.run_svn (1, 'ci', '-F', log_path)
+    svntest.main.file_append (mu_path, "2")
 
-  # make sure we failed.
-  if (len(stderr_lines) <= 0):
-    os.chdir (was_cwd)
-    raise svntest.Failure
+    # try the same thing, but specifying the file to commit explicitly.
+    svntest.actions.run_and_verify_svn( "", None, SVNAnyOutput,
+                                        'ci', '-F', log_path, mu_path)
 
-  # force it.  should not produce any errors.
-  stdout_lines, stderr_lines = \
-    svntest.main.run_svn (None, 'ci', '-F', log_path, '--force-log')
+    # force it...  should succeed.
+    svntest.actions.run_and_verify_svn ( "", None, [],
+                                         'ci',
+                                         '-F', log_path,
+                                         '--force-log', mu_path)
 
-  if (len(stderr_lines) != 0):
+  finally:
     os.chdir (was_cwd)
-    raise svntest.Failure
 
-  svntest.main.file_append (mu_path, "2")
 
-  # try the same thing, but specifying the file to commit explicitly.
-  stdout_lines, stderr_lines = \
-    svntest.main.run_svn (1, 'ci', '-F', log_path, mu_path)
-
-  # make sure it failed.
-  if (len(stderr_lines) <= 0):
-    os.chdir (was_cwd)
-    raise svntest.Failure
-
-  # force it...  should succeed.
-  stdout_lines, stderr_lines = \
-    svntest.main.run_svn (None, 'ci', '-F', log_path, '--force-log', mu_path)
-
-  if (len(stderr_lines) != 0):
-    os.chdir (was_cwd)
-    raise svntest.Failure
-
-  os.chdir (was_cwd)
-
-
 #----------------------------------------------------------------------
 def log_with_empty_repos(sbox):
   "'svn log' on an empty repository"
@@ -397,16 +379,12 @@
   svntest.main.create_repos(sbox.repo_dir)
   svntest.main.set_repos_paths(sbox.repo_dir)
 
-  stdout_lines, stderr_lines = svntest.main.run_svn\
-                               (None, 'log',
-                                '--username', svntest.main.wc_author,
-                                '--password', svntest.main.wc_passwd,
-                                svntest.main.current_repo_url)
+  svntest.actions.run_and_verify_svn ( "", None, [],
+                                       'log',
+                                       '--username', svntest.main.wc_author,
+                                       '--password', svntest.main.wc_passwd,
+                                       svntest.main.current_repo_url)
 
-  if (len(stderr_lines) != 0):
-    raise svntest.Failure
-
-
 #----------------------------------------------------------------------
 def log_where_nothing_changed(sbox):
   "'svn log -rN some_dir_unchanged_in_N'"
@@ -438,53 +416,43 @@
   sbox.build()
 
   # This used to the segfault the server.
-  stdout_lines, stderr_lines = svntest.main.run_svn(0, 'log', '-v',
-                                                    '-r', '1:0', sbox.wc_dir)
-  if stderr_lines:
-    raise svntest.Failure
+  
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'log', '-v',
+                                     '-r', '1:0', sbox.wc_dir)
 
-
 #----------------------------------------------------------------------
 def log_with_path_args(sbox):
   "'svn log', no args, top of wc"
 
   guarantee_repos_and_wc(sbox)
 
-  result = 0
-
   was_cwd = os.getcwd()
   os.chdir(sbox.wc_dir)
 
-  output, errput = svntest.main.run_svn (None, 'log',
-                                         svntest.main.current_repo_url,
-                                         'A/D/G', 'A/D/H')
+  try:
+    output, err = svntest.actions.run_and_verify_svn(
+      None, None, [],
+      'log', svntest.main.current_repo_url, 'A/D/G', 'A/D/H')
 
-  if errput:
-    os.chdir (was_cwd)
-    raise svntest.Failure
+    log_chain = parse_log_output (output)
+    if check_log_chain (log_chain, [8, 6, 5, 3, 1]):
+      raise svntest.Failure
 
-  log_chain = parse_log_output (output)
-  if check_log_chain (log_chain, [8, 6, 5, 3, 1]):
+  finally:
     os.chdir (was_cwd)
-    raise svntest.Failure
 
-  os.chdir (was_cwd)
-
 #----------------------------------------------------------------------
 def url_missing_in_head(sbox):
   "'svn log -r N URL' when URL is not in HEAD "
 
   guarantee_repos_and_wc(sbox)
 
-  result = 0
-
   my_url = svntest.main.current_repo_url + "/A/B/E/alpha"
-  output, errput = svntest.main.run_svn (None, 'log', '-r', '8', my_url)
+  
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'log', '-r', '8', my_url)
 
-  if errput:
-    os.chdir (was_cwd)
-    raise svntest.Failure
-
 #----------------------------------------------------------------------
 def log_through_copyfrom_history(sbox):
   "'svn log TGT' with copyfrom history"
@@ -516,44 +484,38 @@
   svntest.actions.run_and_verify_svn (None, None, [], 'up', wc_dir)
 
   # The full log for mu2 is relatively unsurprising
-  output, errput = svntest.main.run_svn (None, 'log', mu2_path)
-  if errput:
-    raise svntest.Failure
+  output, err = svntest.actions.run_and_verify_svn (None, None, [],
+                                                    'log', mu2_path)
   log_chain = parse_log_output (output)
   if check_log_chain (log_chain, [6, 5, 2, 1]):
     raise svntest.Failure
 
-  output, errput = svntest.main.run_svn (None, 'log', mu2_URL)
-  if errput:
-    raise svntest.Failure
+  output, err = svntest.actions.run_and_verify_svn (None, None, [],
+                                                    'log', mu2_URL)
   log_chain = parse_log_output (output)
   if check_log_chain (log_chain, [6, 5, 2, 1]):
     raise svntest.Failure
 
   # First "oddity", the full log for mu2 doesn't include r3, but the -r3
   # log works!
-  output, errput = svntest.main.run_svn (None, 'log', '-r', '3', mu2_path)
-  if errput:
-    raise svntest.Failure
+  output, err = svntest.actions.run_and_verify_svn (None, None, [],
+                                                    'log', '-r', '3', mu2_path)
   log_chain = parse_log_output (output)
   if check_log_chain (log_chain, [3]):
     raise svntest.Failure
 
-  output, errput = svntest.main.run_svn (None, 'log', '-r', '3', mu2_URL)
-  if errput:
-    raise svntest.Failure
+  output, err = svntest.actions.run_and_verify_svn (None, None, [],
+                                                    'log', '-r', '3', mu2_URL)
   log_chain = parse_log_output (output)
   if check_log_chain (log_chain, [3]):
     raise svntest.Failure
 
   # Second "oddity", the full log for mu2 includes r2, but the -r2 log
   # fails!
-  output, errput = svntest.main.run_svn (1, 'log', '-r', '2', mu2_path)
-  if not errput or output:
-    raise svntest.Failure
-  output, errput = svntest.main.run_svn (1, 'log', '-r', '2', mu2_URL)
-  if not errput or output:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn (None, [], SVNAnyOutput,
+                                      'log', '-r', '2', mu2_path)
+  svntest.actions.run_and_verify_svn (None, [], SVNAnyOutput,
+                                      'log', '-r', '2', mu2_URL)
   
 ########################################################################
 # Run the tests
Index: update_tests.py
===================================================================
--- update_tests.py	(revision 6929)
+++ update_tests.py	(working copy)
@@ -72,7 +72,6 @@
   "update a locally-modified binary file"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Add a binary file to the project.
@@ -181,15 +180,12 @@
     print extra_files
     raise svntest.Failure
 
-  return 0
-
 #----------------------------------------------------------------------
 
 def update_binary_file_2(sbox):
   "update to an old revision of a binary files"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Suck up contents of a test .png file.
@@ -290,13 +286,13 @@
 
   # Do an update from revision 2 and make sure that our binary file
   # gets reverted to its original contents.
-  return svntest.actions.run_and_verify_update(wc_dir,
-                                               expected_output,
-                                               expected_disk,
-                                               expected_status,
-                                               None, None, None,
-                                               None, None, 1,
-                                               '-r', '2', wc_dir)
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status,
+                                        None, None, None,
+                                        None, None, 1,
+                                        '-r', '2', wc_dir)
 
 
 #----------------------------------------------------------------------
@@ -305,7 +301,6 @@
   "update missing items (by name) in working copy"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Remove some files and dirs from the working copy.
@@ -344,13 +339,13 @@
   expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
   
   # Do the update and check the results in three ways.
-  return svntest.actions.run_and_verify_update(wc_dir,
-                                               expected_output,
-                                               expected_disk,
-                                               expected_status,
-                                               None, None, None, None, None, 0,
-                                               mu_path, rho_path,
-                                               E_path, H_path)
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status,
+                                        None, None, None, None, None, 0,
+                                        mu_path, rho_path,
+                                        E_path, H_path)
 
 #----------------------------------------------------------------------
 
@@ -358,7 +353,6 @@
   "update should not munge adds or replaces"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Commit something so there's actually a new revision to update to.
@@ -402,10 +396,10 @@
     })
   
   # Do the update and check the results in three ways.
-  return svntest.actions.run_and_verify_update(wc_dir,
-                                               expected_output,
-                                               expected_disk,
-                                               expected_status)
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status)
   
 
 #----------------------------------------------------------------------
@@ -414,7 +408,6 @@
   "update to revision 0"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   iota_path = os.path.join(wc_dir, 'iota')
@@ -430,14 +423,13 @@
   expected_disk = svntest.wc.State(wc_dir, { })
   
   # Do the update and check the results.
-  return svntest.actions.run_and_verify_update(wc_dir,
-                                               expected_output,
-                                               expected_disk,
-                                               None, None,
-                                               None, None, None, None, 0,
-                                               '-r', '0', wc_dir)
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        None, None,
+                                        None, None, None, None, 0,
+                                        '-r', '0', wc_dir)
 
-
 #----------------------------------------------------------------------
 
 def receive_overlapping_same_change(sbox):
@@ -462,7 +454,6 @@
   ### the two modifications are identical.
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Modify iota.
@@ -503,10 +494,10 @@
   expected_status = svntest.actions.get_virginal_state(other_wc, 2)
   
   # Do the update and check the results in three ways.
-  return svntest.actions.run_and_verify_update(other_wc,
-                                               expected_output,
-                                               expected_disk,
-                                               expected_status)
+  svntest.actions.run_and_verify_update(other_wc,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status)
 
 #----------------------------------------------------------------------
 
@@ -530,7 +521,6 @@
   "delete files and update to resolve text conflicts"
   
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Make a backup copy of the working copy
@@ -634,8 +624,7 @@
   expected_status = svntest.actions.get_virginal_state(wc_backup, 2)
   expected_status.tweak('A/D/G/rho', status=' C')
 
-  return svntest.actions.run_and_verify_status (wc_backup,
-                                                expected_status)
+  svntest.actions.run_and_verify_status(wc_backup, expected_status)
 
 #----------------------------------------------------------------------
 
@@ -654,42 +643,29 @@
   "update that deletes modified files"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Delete a file
   alpha_path = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
-  stdout_lines, stderr_lines = svntest.main.run_svn(None, 'rm', alpha_path)
-  if len(stderr_lines) != 0:
-    print "deleting alpha failed"
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn( "deleting alpha failed", None, [],
+                                                    'rm', alpha_path)
 
   # Delete a directory containing files
   G_path = os.path.join(wc_dir, 'A', 'D', 'G')
-  stdout_lines, stderr_lines = svntest.main.run_svn(None, 'rm', G_path)
-  if len(stderr_lines) != 0:
-    print "deleting G failed"
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn( "deleting G failed", None, [],
+                                      'rm', G_path)
 
   # Commit
-  stdout_lines, stderr_lines = svntest.main.run_svn(None, 'ci',
-                                                    '-m', 'log msg', wc_dir)
-  if len(stderr_lines) != 0:
-    print "committing deletes failed"
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn( "committing deletes failed", None, [],
+                                      'ci', '-m', 'log msg', wc_dir)
 
   # ### Update before backdating to avoid obstructed update error for G
-  stdout_lines, stderr_lines = svntest.main.run_svn(None, 'up', wc_dir)
-  if len(stderr_lines) != 0:
-    print "updating after commit failed"
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn( "updating after commit failed", None, [],
+                                      'up', wc_dir)
 
   # Backdate to restore deleted items
-  stdout_lines, stderr_lines = svntest.main.run_svn(None, 'up', '-r', '1',
-                                                    wc_dir)
-  if len(stderr_lines) != 0:
-    print "backdating failed"
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn( "backdating failed", None, [],
+                                      'up', '-r', '1', wc_dir)
 
   # Modify the file to be deleted, and a file in the directory to be deleted
   svntest.main.file_append(alpha_path, 'appended alpha text')
@@ -703,10 +679,8 @@
   svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
   # Update that 'deletes' modified files
-  stdout_lines, stderr_lines = svntest.main.run_svn(None, 'up', wc_dir)
-  if len(stderr_lines) != 0:
-    print "updating failed"
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(  "updating failed", None, [],
+                                      'up', wc_dir)
 
   # Modified files should still exist but are now unversioned
   expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
@@ -728,15 +702,12 @@
   "update after add/rm of deleted state"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Delete a file and directory from WC
   alpha_path = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
   F_path = os.path.join(wc_dir, 'A', 'B', 'F')
-  outlines, errlines = svntest.main.run_svn(None, 'rm', alpha_path, F_path)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [], 'rm', alpha_path, F_path)
 
   # Commit deletion
   expected_output = svntest.wc.State(wc_dir, {
@@ -753,13 +724,10 @@
 
   # alpha and F are now in state "deleted", next we add a new ones
   svntest.main.file_append(alpha_path, "new alpha")
-  outlines, errlines = svntest.main.run_svn(None, 'add', alpha_path)
-  if errlines:
-    raise svntest.Failure
-  outlines, errlines = svntest.main.run_svn(None, 'mkdir', F_path)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [], 'add', alpha_path)
 
+  svntest.actions.run_and_verify_svn(None, None, [], 'mkdir', F_path)
+
   # New alpha and F should be in add state A
   expected_status.add({
     'A/B/E/alpha' : Item(status='A ', wc_rev=0, repos_rev=2),
@@ -768,9 +736,11 @@
   svntest.actions.run_and_verify_status(wc_dir, expected_status)
   
   # Forced removal of new alpha and F must restore "deleted" state
-  outlines, errlines = svntest.main.run_svn(None, 'rm', '--force',
-                                            alpha_path, F_path)
-  if errlines or os.path.exists(alpha_path) or os.path.exists(F_path):
+  
+  outlines, errlines = svntest.actions.run_and_verify_svn(None, None, [],
+                                                          'rm', '--force',
+                                                          alpha_path, F_path)
+  if os.path.exists(alpha_path) or os.path.exists(F_path):
     raise svntest.Failure
 
   # "deleted" state is not visible in status
@@ -779,9 +749,7 @@
 
   # Although parent dir is already at rev 1, the "deleted" state will cause
   # alpha and F to be restored in the WC when updated to rev 1
-  outlines, errlines = svntest.main.run_svn(None, 'up', '-r', '1', wc_dir)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [], 'up', '-r', '1', wc_dir)
   expected_status.add({
     'A/B/E/alpha' : Item(status='  ', wc_rev=1, repos_rev=2),
     'A/B/F'       : Item(status='  ', wc_rev=1, repos_rev=2),
@@ -795,14 +763,11 @@
   "update that replaces a directory"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Delete a directory
   F_path = os.path.join(wc_dir, 'A', 'B', 'F')
-  outlines, errlines = svntest.main.run_svn(None, 'rm', F_path)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [], 'rm', F_path)
 
   # Commit deletion
   expected_output = svntest.wc.State(wc_dir, {
@@ -816,9 +781,7 @@
                                         None, None, None, None, wc_dir)
 
   # Add replacement directory
-  outlines, errlines = svntest.main.run_svn(None, 'mkdir', F_path)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [], 'mkdir', F_path)
 
   # Commit addition
   expected_output = svntest.wc.State(wc_dir, {
@@ -857,9 +820,7 @@
   #                                      '-r', '1', wc_dir)
 
   # Update to revision 1 replaces the directory
-  outlines, errlines = svntest.main.run_svn(None, 'up', '-r', '1', wc_dir)
-  if errlines:
-    return 1
+  svntest.actions.run_and_verify_svn(None, None, [], 'up', '-r', '1', wc_dir)
   expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
   expected_status.tweak(repos_rev=3)
   svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -870,7 +831,6 @@
   "update with explicit file target"
   
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   expected_disk = svntest.main.greek_state.copy()
@@ -893,13 +853,14 @@
   # At one stage 'svn up file' failed with a parent lock error
   was_cwd = os.getcwd()
   os.chdir(os.path.join(wc_dir, 'A'))
-  ### Can't get run_and_verify_update to work having done the chdir.
-  outlines, errlines = svntest.main.run_svn(None, 'up', '-r', '1', 'mu')
-  os.chdir(was_cwd)
-  if errlines:
-    print "update failed"
-    raise svntest.Failure
 
+  try:
+    ### Can't get run_and_verify_update to work having done the chdir.
+    svntest.actions.run_and_verify_svn("update failed", None, [],
+                                       'up', '-r', '1', 'mu')
+  finally:
+    os.chdir(was_cwd)
+
   expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
   expected_status.tweak(repos_rev=2)
   svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -909,8 +870,8 @@
   "receive prop update to file scheduled for deletion"
   
   sbox.build()
-
   wc_dir = sbox.wc_dir
+  
   other_wc = sbox.add_wc_path('other')
 
   # Make the "other" working copy.
@@ -952,20 +913,21 @@
   expected_status.tweak('iota', status='D ')
   
   # Do the update and check the results in three ways.
-  return svntest.actions.run_and_verify_update(other_wc,
-                                               expected_output,
-                                               expected_disk,
-                                               expected_status)
-  return 0
+  svntest.actions.run_and_verify_update(other_wc,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status)
 
 #----------------------------------------------------------------------
 
 def update_receive_illegal_name(sbox):
   "bail when receive a file or dir named .svn"
+
   sbox.build()
+  wc_dir = sbox.wc_dir
 
   # This tests the revision 4334 fix for issue #1068.
-  wc_dir = sbox.wc_dir
+  
   legal_url = svntest.main.current_repo_url + '/A/D/G/svn'
   illegal_url = svntest.main.current_repo_url + '/A/D/G/.svn'
   # Ha!  The client doesn't allow us to mkdir a '.svn' but it does
@@ -989,8 +951,8 @@
   "update missing dir to rev in which it is absent"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
+  
   E_path = os.path.join(wc_dir, 'A', 'B', 'E')
   H_path = os.path.join(wc_dir, 'A', 'D', 'H')
 
@@ -1058,7 +1020,6 @@
   "another \"hudson\" problem: updates that delete"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Delete/commit gamma thus making it 'deleted'
@@ -1077,11 +1038,10 @@
                                          wc_dir)
 
   # Delete directory G from the repository
-  out, err = svntest.main.run_svn(None, 'rm',
-                                  '-m', 'log msg',
-                                  svntest.main.current_repo_url + '/A/D/G')
-  if out != ['\n', 'Committed revision 3.\n']:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None,
+                                     ['\n', 'Committed revision 3.\n'], None,
+                                     'rm', '-m', 'log msg',
+                                     svntest.main.current_repo_url + '/A/D/G')
 
   # Remove corresponding tree from working copy
   G_path = os.path.join(wc_dir, 'A', 'D', 'G')
@@ -1092,9 +1052,10 @@
 
   # Sigh, I can't get run_and_verify_update to work (but not because
   # of issue 919 as far as I can tell)
-  out, err = svntest.main.run_svn(None, 'up', G_path)
-  if out != ['D  '+G_path+'\n', 'Updated to revision 3.\n']:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None,
+                                     ['D  '+G_path+'\n',
+                                      'Updated to revision 3.\n'], None,
+                                     'up', G_path)
 
   # Both G and gamma should be 'deleted', update should produce no output
   expected_output = svntest.wc.State(wc_dir, { })
@@ -1118,12 +1079,11 @@
   wc_dir = sbox.wc_dir
 
   # Create a new directory ("spacey dir") directly in repository
-  out, err = svntest.main.run_svn(None, 'mkdir',
-                                  '-m', 'log msg',
-                                  svntest.main.current_repo_url
-                                  + '/A/spacey%20dir')
-  if out != ['\n', 'Committed revision 2.\n']:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None,
+                                     ['\n', 'Committed revision 2.\n'], None,
+                                     'mkdir', '-m', 'log msg',
+                                     svntest.main.current_repo_url
+                                     + '/A/spacey%20dir')
 
   # Update, and make sure ra_dav doesn't choke on the space.
   expected_output = svntest.wc.State(wc_dir, {
@@ -1200,16 +1160,13 @@
   # incomplete ("!" in status).
   sbox.build()
   wc_dir = sbox.wc_dir
+  
   C_url = svntest.main.current_repo_url + '/A/C'
 
   svntest.main.safe_rmtree(wc_dir)
-  out, err = svntest.main.run_svn(None, 'checkout', C_url, wc_dir)
-  if err:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [], 'checkout', C_url, wc_dir)
 
-  out, err = svntest.main.run_svn(None, 'status', wc_dir)
-  if out or err:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, [], [], 'status', wc_dir)
 
 
 #----------------------------------------------------------------------
@@ -1222,7 +1179,6 @@
   "update target till it's gone, then get it back"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   iota_path = os.path.join(wc_dir, 'iota')
Index: utf8_tests.py
===================================================================
--- utf8_tests.py	(revision 6929)
+++ utf8_tests.py	(working copy)
@@ -50,9 +50,7 @@
 def basic_utf8_conversion(sbox):
   "conversion of paths and logs to/from utf8"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   # Make sure the test runs in an ISO-8859-1 environment.  Otherwise,
@@ -70,24 +68,14 @@
 
   # Create the new i18n file and schedule it for addition
   svntest.main.file_append(os.path.join(wc_dir, i18n_filename), "hi")
-  outlines, errlines = svntest.main.run_svn(None,
-                                            'add',
-                                            os.path.join(wc_dir,
-                                                         i18n_filename))
-  if errlines:
-    print "Failed to schedule i18n filename for addition"
-    return 1
+  svntest.actions.run_and_verify_svn(
+    "Failed to schedule i18n filename for addition", None, [],
+    'add', os.path.join(wc_dir, i18n_filename))
 
-  outlines, inlines = svntest.main.run_svn(None, # no error expected
-                                           'commit', '-m', i18n_logmsg,
-                                           wc_dir)
-  if errlines:
-    print "Failed to commit i18n filename"
-    return 1
+  svntest.actions.run_and_verify_svn(
+    "Failed to commit i18n filename", None, [],
+    'commit', '-m', i18n_logmsg, wc_dir)
 
-
-  return 0
-
 # Here's how the test should really work:
 
 # 1. sh LC_ALL=ISO-8859-1 svn commit <filename> -m "<logmsg>"
Index: trans_tests.py
===================================================================
--- trans_tests.py	(revision 6929)
+++ trans_tests.py	(working copy)
@@ -179,7 +179,6 @@
   "commit new files with keywords active from birth"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   setup_working_copy (wc_dir)
@@ -315,7 +314,6 @@
   "update modified file with eol-style 'native'"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Replace contents of rho and set eol translation to 'native'
@@ -438,14 +436,13 @@
                                        'svn:eol-style', 'CRLF', foo_path)
 
   # check 1: did new contents get transmitted?
-  output, errput = svntest.main.run_svn(None, 'ci', '-m', 'log msg', foo_path)
-  if errput:
-    raise svntest.Failure
-  output = _tweak_paths(output) # FIXME: see commend at _tweak_paths
-  if output != ["Sending        " + foo_path + "\n",
-                "Transmitting file data .\n",
-                "Committed revision 3.\n"]:
-    raise svntest.Failure
+  expected_output = ["Sending        " + foo_path + "\n",
+                     "Transmitting file data .\n",
+                     "Committed revision 3.\n"]
+  # FIXME: see commend at _tweak_paths
+  expected_output = _tweak_paths(expected_output) 
+  svntest.actions.run_and_verify_svn(None, expected_output, [],
+                                     'ci', '-m', 'log msg', foo_path)
 
   # check 2: do the files have the right contents now?
   f = open(foo_path, 'rb')
@@ -547,9 +544,9 @@
 
   # At one stage the keywords were expanded to values for the requested
   # revision, not to those committed revision
-  out, err = svntest.main.run_svn (None, 'cat', '-r', 'HEAD', mu_path)
-  if err or out[1] != "$Rev: 2 $":
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn (None, [ "This is the file 'mu'.\n",
+                                              "$Rev: 2 $" ], None,
+                                      'cat', '-r', 'HEAD', mu_path)
   
 
 ########################################################################
Index: commit_tests.py
===================================================================
--- commit_tests.py	(revision 6929)
+++ commit_tests.py	(working copy)
@@ -21,6 +21,7 @@
 
 # Our testing module
 import svntest
+from svntest import SVNAnyOutput
 
 # (abbreviation)
 Skip = svntest.testcase.Skip
@@ -117,10 +118,8 @@
   expected_status = get_standard_state(wc_dir)
 
   # Verify status -- all local mods should be present.
-  if svntest.actions.run_and_verify_status(wc_dir, expected_status):
-    return 1
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
-  return 0
 
 ######################################################################
 # Tests
@@ -133,13 +132,11 @@
 def commit_one_file(sbox):
   "commit one file"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   # Make standard slew of changes to working copy.
-  if make_standard_slew_of_changes(wc_dir): return 1
+  make_standard_slew_of_changes(wc_dir)
 
   omega_path = os.path.join(wc_dir, 'A', 'D', 'H', 'omega') 
 
@@ -154,13 +151,13 @@
   expected_status.tweak('A/D/H/omega', wc_rev=2, status='  ')
 
   # Commit the one file.
-  return svntest.actions.run_and_verify_commit (wc_dir,
-                                                expected_output,
-                                                expected_status,
-                                                None,
-                                                None, None,
-                                                None, None,
-                                                omega_path)
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None,
+                                         None, None,
+                                         None, None,
+                                         omega_path)
 
   
 #----------------------------------------------------------------------
@@ -168,13 +165,11 @@
 def commit_one_new_file(sbox):
   "commit one newly added file"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   # Make standard slew of changes to working copy.
-  if make_standard_slew_of_changes(wc_dir): return 1
+  make_standard_slew_of_changes(wc_dir)
 
   gloo_path = os.path.join(wc_dir, 'A', 'D', 'H', 'gloo') 
 
@@ -189,13 +184,13 @@
   expected_status.tweak('A/D/H/gloo', wc_rev=2, status='  ')
 
   # Commit the one file.
-  return svntest.actions.run_and_verify_commit (wc_dir,
-                                                expected_output,
-                                                expected_status,
-                                                None,
-                                                None, None,
-                                                None, None,
-                                                gloo_path)
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None,
+                                         None, None,
+                                         None, None,
+                                         gloo_path)
 
 
 #----------------------------------------------------------------------
@@ -203,13 +198,11 @@
 def commit_one_new_binary_file(sbox):
   "commit one newly added binary file"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   # Make standard slew of changes to working copy.
-  if make_standard_slew_of_changes(wc_dir): return 1
+  make_standard_slew_of_changes(wc_dir)
 
   gloo_path = os.path.join(wc_dir, 'A', 'D', 'H', 'gloo')
   svntest.main.run_svn(None, 'propset', 'svn:mime-type',
@@ -226,13 +219,13 @@
   expected_status.tweak('A/D/H/gloo', wc_rev=2, status='  ')
 
   # Commit the one file.
-  return svntest.actions.run_and_verify_commit (wc_dir,
-                                                expected_output,
-                                                expected_status,
-                                                None,
-                                                None, None,
-                                                None, None,
-                                                gloo_path)
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None,
+                                         None, None,
+                                         None, None,
+                                         gloo_path)
 
 
 #----------------------------------------------------------------------
@@ -240,9 +233,7 @@
 def commit_multiple_targets(sbox):
   "commit multiple targets"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   # This test will commit three targets:  psi, B, and pi.  In that order.
@@ -285,13 +276,13 @@
   # A/D/G should still have a local property set, too.
   expected_status.tweak('A/D/G', status=' M')
 
-  return svntest.actions.run_and_verify_commit (wc_dir,
-                                                expected_output,
-                                                expected_status,
-                                                None,
-                                                None, None,
-                                                None, None,
-                                                psi_path, AB_path, pi_path)
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None,
+                                         None, None,
+                                         None, None,
+                                         psi_path, AB_path, pi_path)
 
 #----------------------------------------------------------------------
 
@@ -299,9 +290,7 @@
 def commit_multiple_targets_2(sbox):
   "commit multiple targets, 2nd variation"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   # This test will commit three targets:  psi, B, omega and pi.  In that order.
@@ -346,27 +335,25 @@
   # A/D/G should still have a local property set, too.
   expected_status.tweak('A/D/G', status=' M')
 
-  return svntest.actions.run_and_verify_commit (wc_dir,
-                                                expected_output,
-                                                expected_status,
-                                                None,
-                                                None, None,
-                                                None, None,
-                                                psi_path, AB_path,
-                                                omega_path, pi_path)
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None,
+                                         None, None,
+                                         None, None,
+                                         psi_path, AB_path,
+                                         omega_path, pi_path)
 
 #----------------------------------------------------------------------
 
 def commit_inclusive_dir(sbox):
   "commit wc_dir/A/D -- includes D. (anchor=A, tgt=D)"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   # Make standard slew of changes to working copy.
-  if make_standard_slew_of_changes(wc_dir): return 1
+  make_standard_slew_of_changes(wc_dir)
 
   # Create expected output tree.
   D_path = os.path.join(wc_dir, 'A', 'D')
@@ -397,26 +384,24 @@
   expected_status.tweak('A/D/H/chi', 'A/D/H/gloo', wc_rev=2, status='  ')
 
   # Commit the one file.
-  return svntest.actions.run_and_verify_commit (wc_dir,
-                                                expected_output,
-                                                expected_status,
-                                                None,
-                                                None, None,
-                                                None, None,
-                                                D_path)
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None,
+                                         None, None,
+                                         None, None,
+                                         D_path)
 
 #----------------------------------------------------------------------
 
 def commit_top_dir(sbox):
   "commit wc_dir -- (anchor=wc_dir, tgt={})"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   # Make standard slew of changes to working copy.
-  if make_standard_slew_of_changes(wc_dir): return 1
+  make_standard_slew_of_changes(wc_dir)
 
   # Create expected output tree.
   top_path = wc_dir
@@ -462,13 +447,13 @@
                         'A/D/H/gloo', wc_rev=2, status='  ')
 
   # Commit the one file.
-  return svntest.actions.run_and_verify_commit (wc_dir,
-                                                expected_output,
-                                                expected_status,
-                                                None,
-                                                None, None,
-                                                None, None,
-                                                wc_dir)
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None,
+                                         None, None,
+                                         None, None,
+                                         wc_dir)
 
 #----------------------------------------------------------------------
 
@@ -489,23 +474,21 @@
 def commit_unversioned_thing(sbox):
   "committing unversioned object produces error"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   # Create an unversioned file in the wc.
   svntest.main.file_append(os.path.join(wc_dir, 'blorg'), "nothing to see")
 
   # Commit a non-existent file and *expect* failure:
-  return svntest.actions.run_and_verify_commit (wc_dir,
-                                                None,
-                                                None,
-                                                "Can't find an entry",
-                                                None, None,
-                                                None, None,
-                                                os.path.join(wc_dir,'blorg'))
-
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         None,
+                                         None,
+                                         "Can't find an entry",
+                                         None, None,
+                                         None, None,
+                                         os.path.join(wc_dir,'blorg'))
+  
 #----------------------------------------------------------------------
 
 # regression test for bug #391
@@ -513,9 +496,7 @@
 def nested_dir_replacements(sbox):
   "replace two nested dirs, verify empty contents"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   # Delete and re-add A/D (a replacement), and A/D/H (another replace).
@@ -546,8 +527,7 @@
                         'A/D/H/chi', 'A/D/H/omega', 'A/D/H/psi', 'A/D/gamma',
                         status='D ')
 
-  if svntest.actions.run_and_verify_status(wc_dir, expected_status):
-    return 1
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
   # Build expected post-commit trees:
 
@@ -569,13 +549,13 @@
                         'A/D/H/chi', 'A/D/H/omega', 'A/D/H/psi', 'A/D/gamma')
 
   # Commit from the top of the working copy and verify output & status.
-  return svntest.actions.run_and_verify_commit (wc_dir,
-                                                expected_output,
-                                                expected_status,
-                                                None,
-                                                None, None,
-                                                None, None,
-                                                wc_dir)
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None,
+                                         None, None,
+                                         None, None,
+                                         wc_dir)
 
 #----------------------------------------------------------------------
 
@@ -587,9 +567,7 @@
 def hudson_part_1(sbox):
   "hudson prob 1.0:  delete file, commit, update"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   # Remove gamma from the working copy.
@@ -607,12 +585,11 @@
   expected_status.remove('A/D/gamma')
   
   # Commit the deletion of gamma and verify.
-  if svntest.actions.run_and_verify_commit (wc_dir,
-                                            expected_output,
-                                            expected_status,
-                                            None, None, None, None, None,
-                                            wc_dir):
-    return 1
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None, None, None, None, None,
+                                         wc_dir)
 
   # Now gamma should be marked as `deleted' under the hood.  When we
   # update, we should no output, and a perfect, virginal status list
@@ -629,10 +606,10 @@
   expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
   expected_status.remove('A/D/gamma')
 
-  return svntest.actions.run_and_verify_update(wc_dir,
-                                               expected_output,
-                                               expected_disk,
-                                               expected_status)
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status)
 
 
 #----------------------------------------------------------------------
@@ -643,9 +620,7 @@
 def hudson_part_1_variation_1(sbox):
   "hudson prob 1.1:  delete dir, commit, update"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   # Remove H from the working copy.
@@ -663,12 +638,11 @@
   expected_status.remove('A/D/H', 'A/D/H/chi', 'A/D/H/omega', 'A/D/H/psi')
   
   # Commit the deletion of H and verify.
-  if svntest.actions.run_and_verify_commit (wc_dir,
-                                            expected_output,
-                                            expected_status,
-                                            None, None, None, None, None,
-                                            wc_dir):
-    return 1
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None, None, None, None, None,
+                                         wc_dir)
 
   # Now H should be marked as `deleted' under the hood.  When we
   # update, we should no see output, and a perfect, virginal status
@@ -685,10 +659,10 @@
   expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
   expected_status.remove('A/D/H', 'A/D/H/chi', 'A/D/H/omega', 'A/D/H/psi')
 
-  return svntest.actions.run_and_verify_update(wc_dir,
-                                               expected_output,
-                                               expected_disk,
-                                               expected_status)
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status)
 
 #----------------------------------------------------------------------
 
@@ -699,9 +673,7 @@
 def hudson_part_1_variation_2(sbox):
   "hudson prob 1.2:  delete, commit, re-add, commit"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   # Remove gamma from the working copy.
@@ -719,12 +691,11 @@
   expected_status.remove('A/D/gamma')
   
   # Commit the deletion of gamma and verify.
-  if svntest.actions.run_and_verify_commit (wc_dir,
-                                            expected_output,
-                                            expected_status,
-                                            None, None, None, None, None,
-                                            wc_dir):
-    return 1
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None, None, None, None, None,
+                                         wc_dir)
 
   # Now gamma should be marked as `deleted' under the hood.
   # Go ahead and re-add gamma, so that is *also* scheduled for addition.
@@ -737,8 +708,7 @@
   expected_status.tweak(wc_rev=1)
   expected_status.tweak('A/D/gamma', wc_rev=0, status='A ')
 
-  if svntest.actions.run_and_verify_status(wc_dir, expected_status):
-    return 1
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
   # Create expected commit output.
   expected_output = svntest.wc.State(wc_dir, {
@@ -750,11 +720,11 @@
   expected_status.tweak(wc_rev=1)
   expected_status.tweak('A/D/gamma', wc_rev=3)
 
-  return svntest.actions.run_and_verify_commit (wc_dir,
-                                                expected_output,
-                                                expected_status,
-                                                None, None, None, None, None,
-                                                wc_dir)
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None, None, None, None, None,
+                                         wc_dir)
 
 
 #----------------------------------------------------------------------
@@ -767,9 +737,7 @@
 def hudson_part_2(sbox):
   "hudson prob 2.0:  prop commit on old dir fails"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   # Remove gamma from the working copy.
@@ -788,12 +756,11 @@
   expected_status.remove('A/D/gamma')
   
   # Commit the deletion of gamma and verify.
-  if svntest.actions.run_and_verify_commit (wc_dir,
-                                            expected_output,
-                                            expected_status,
-                                            None, None, None, None, None,
-                                            wc_dir):
-    return 1
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None, None, None, None, None,
+                                         wc_dir)
 
   # Now gamma should be marked as `deleted' under the hood, at
   # revision 2.  Meanwhile, A/D is still lagging at revision 1.
@@ -802,13 +769,13 @@
   svntest.main.run_svn(None, 'ps', 'foo', 'bar', D_path)
 
   # Commit and *expect* a repository Merge failure:
-  return svntest.actions.run_and_verify_commit (wc_dir,
-                                                None,
-                                                None,
-                                                "out.of.date",
-                                                None, None,
-                                                None, None,
-                                                wc_dir)
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         None,
+                                         None,
+                                         "out.of.date",
+                                         None, None,
+                                         None, None,
+                                         wc_dir)
 
 #----------------------------------------------------------------------
 
@@ -822,9 +789,7 @@
 def hudson_part_2_1(sbox):
   "hudson prob 2.1:  move files, update empty dir"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   # Move all the files in H to G
@@ -895,9 +860,7 @@
 def hook_test(sbox):
   "hook testing"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   # Get paths to the working copy and repository
   wc_dir = sbox.wc_dir
   repo_dir = sbox.repo_dir
@@ -932,16 +895,12 @@
   expected_output = (abs_repo_dir + "\n",
                      abs_repo_dir + " 1\n",
                      abs_repo_dir + " 2\n")
-  output, errput = svntest.main.run_svn (None, 'ci', '--quiet',
-                                         '-m', 'log msg', wc_dir)
+  
+  svntest.actions.run_and_verify_svn ( "",
+                                       expected_output, None,
+                                       'ci', '--quiet',
+                                       '-m', 'log msg', wc_dir)
 
-  # Make sure we got the right output.
-  if output != expected_output:
-    return 1
-    
-  return 0
-
-
 #----------------------------------------------------------------------
 
 # Regression test for bug #469, whereby merge() was once reporting
@@ -951,9 +910,7 @@
 def merge_mixed_revisions(sbox):
   "commit mixed-rev wc (no erroneous merge error)"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   # Make some convenient paths.
@@ -979,12 +936,11 @@
   expected_status.tweak(wc_rev=1)
   expected_status.tweak('iota', 'A/D/H/chi', wc_rev=2)
 
-  if svntest.actions.run_and_verify_commit (wc_dir,
-                                            expected_output,
-                                            expected_status,
-                                            None, None, None, None, None,
-                                            wc_dir):
-    return 1
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None, None, None, None, None,
+                                         wc_dir)
 
 
   # 2. svn up A/D/H
@@ -1000,11 +956,10 @@
     'psi' : Item("This is the file 'psi'."),
     })
   expected_output = svntest.wc.State(wc_dir, { })
-  if svntest.actions.run_and_verify_update (H_path,
-                                            expected_output,
-                                            expected_disk,
-                                            expected_status):
-    return 1
+  svntest.actions.run_and_verify_update (H_path,
+                                         expected_output,
+                                         expected_disk,
+                                         expected_status)
 
 
   # 3. echo "moo" >> iota; svn ci iota
@@ -1018,12 +973,11 @@
                         wc_rev=2)
   expected_status.tweak('iota', wc_rev=3)
 
-  if svntest.actions.run_and_verify_commit (wc_dir,
-                                            expected_output,
-                                            expected_status,
-                                            None, None, None, None, None,
-                                            wc_dir):
-    return 1
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None, None, None, None, None,
+                                         wc_dir)
 
 
   # 4. echo "moo" >> A/D/H/chi; svn ci A/D/H/chi
@@ -1036,12 +990,11 @@
   expected_status.tweak('A/D/H/chi', wc_rev=4)
   expected_status.tweak('A/D/H', 'A/D/H/omega', 'A/D/H/psi', wc_rev=2)
   expected_status.tweak('iota', wc_rev=3)
-  if svntest.actions.run_and_verify_commit (wc_dir,
-                                            expected_output,
-                                            expected_status,
-                                            None, None, None, None, None,
-                                            wc_dir):
-    return 1
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None, None, None, None, None,
+                                         wc_dir)
 
   # 5. echo "moo" >> iota; svn ci iota
   svntest.main.file_append(iota_path, "moomoo")
@@ -1053,12 +1006,11 @@
   expected_status.tweak('A/D/H', 'A/D/H/omega', 'A/D/H/psi', wc_rev=2)
   expected_status.tweak('A/D/H/chi', wc_rev=4)
   expected_status.tweak('iota', wc_rev=5)
-  if svntest.actions.run_and_verify_commit (wc_dir,
-                                            expected_output,
-                                            expected_status,
-                                            None, None, None, None, None,
-                                            wc_dir):
-    return 1
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None, None, None, None, None,
+                                         wc_dir)
 
   # At this point, here is what our tree should look like:
   # _    1       (     5)  working_copies/commit_tests-10
@@ -1098,20 +1050,18 @@
   expected_status.tweak('iota', 'A/D/H/omega', wc_rev=6)
   expected_status.tweak('A/D/H', 'A/D/H/psi', wc_rev=2)
   expected_status.tweak('A/D/H/chi', wc_rev=4)
-  return svntest.actions.run_and_verify_commit (wc_dir,
-                                                expected_output,
-                                                expected_status,
-                                                None, None, None, None, None,
-                                                wc_dir)
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None, None, None, None, None,
+                                         wc_dir)
 
 #----------------------------------------------------------------------
 
 def commit_uri_unsafe(sbox):
   "commit files and dirs with URI-unsafe characters"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   # Note: on Windows, files can't have angle brackets in them, so we
@@ -1188,11 +1138,11 @@
   for item in expected_output.desc.keys():
     expected_status.add({ item : Item(wc_rev=2, repos_rev=2, status='  ') })
 
-  return svntest.actions.run_and_verify_commit (wc_dir,
-                                                expected_output,
-                                                expected_status,
-                                                None, None, None, None, None,
-                                                wc_dir)
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None, None, None, None, None,
+                                         wc_dir)
 
 
 #----------------------------------------------------------------------
@@ -1200,9 +1150,7 @@
 def commit_deleted_edited(sbox):
   "commit deleted yet edited files"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   # Make some convenient paths.
@@ -1229,20 +1177,18 @@
   expected_status.remove('iota', 'A/mu')
   expected_status.tweak(wc_rev=1)
 
-  return svntest.actions.run_and_verify_commit (wc_dir,
-                                                expected_output,
-                                                expected_status,
-                                                None, None, None, None, None,
-                                                wc_dir)
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None, None, None, None, None,
+                                         wc_dir)
   
 #----------------------------------------------------------------------
 
 def commit_in_dir_scheduled_for_addition(sbox):
   "commit a file inside dir scheduled for addition"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   A_path = os.path.join(wc_dir, 'A')
@@ -1253,14 +1199,13 @@
 
   # Commit a copied thing inside an added-with-history directory,
   # expecting a specific error to occur!
-  if svntest.actions.run_and_verify_commit (wc_dir,
-                                            None,
-                                            None,
-                                            "unversioned",
-                                            None, None,
-                                            None, None,
-                                            mu_path):
-    return 1
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         None,
+                                         None,
+                                         "unversioned",
+                                         None, None,
+                                         None, None,
+                                         mu_path)
   
   Q_path = os.path.join(wc_dir, 'Q')
   bloo_path = os.path.join(Q_path, 'bloo')
@@ -1271,13 +1216,13 @@
   
   # Commit a regular added thing inside an added directory,
   # expecting a specific error to occur!
-  return svntest.actions.run_and_verify_commit (wc_dir,
-                                                None,
-                                                None,
-                                                "not versioned",
-                                                None, None,
-                                                None, None,
-                                                bloo_path)
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         None,
+                                         None,
+                                         "not versioned",
+                                         None, None,
+                                         None, None,
+                                         bloo_path)
   
 #----------------------------------------------------------------------
 
@@ -1285,9 +1230,7 @@
 def commit_rmd_and_deleted_file(sbox):
   "commit deleted (and missing) file"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
   mu_path = os.path.join(wc_dir, 'A', 'mu')
 
@@ -1295,21 +1238,17 @@
   svntest.main.run_svn(None, 'rm', mu_path)
 
   # Commit, hoping to see no errors
-  out, err = svntest.main.run_svn(None, 'commit', '-m', 'logmsg', mu_path)
-  if len(err) != 0:
-    return 1
+  svntest.actions.run_and_verify_svn( "Output on stderr where none expected",
+                                      SVNAnyOutput, None,
+                                      'commit', '-m', 'logmsg', mu_path)
 
-  return 0
-
 #----------------------------------------------------------------------
 
 # Issue #644 which failed over ra_dav.
 def commit_add_file_twice(sbox):
   "issue 644 attempt to add a file twice"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   # Create a file
@@ -1331,14 +1270,13 @@
   expected_status.tweak('A/D/H/gloo', wc_rev=2, status='  ')
 
   # Commit should succeed
-  if svntest.actions.run_and_verify_commit (wc_dir,
-                                            expected_output,
-                                            expected_status,
-                                            None,
-                                            None, None,
-                                            None, None,
-                                            wc_dir):
-    return 1
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None,
+                                         None, None,
+                                         None, None,
+                                         wc_dir)
 
   # Update to state before commit
   svntest.main.run_svn(None, 'up', '-r', '1', wc_dir)
@@ -1349,13 +1287,13 @@
   svntest.main.run_svn(None, 'add', gloo_path)
 
   # Commit and *expect* a failure:
-  return svntest.actions.run_and_verify_commit (wc_dir,
-                                                None,
-                                                None,
-                                                "already exists",
-                                                None, None,
-                                                None, None,
-                                                wc_dir)
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         None,
+                                         None,
+                                         "already exists",
+                                         None, None,
+                                         None, None,
+                                         wc_dir)
 
 #----------------------------------------------------------------------
 
@@ -1367,8 +1305,8 @@
   "commit from a dir with a longer name than the wc"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
+
   was_dir = os.getcwd()
   abs_wc_dir = os.path.join(was_dir, wc_dir)
   
@@ -1405,30 +1343,28 @@
 def commit_with_lock(sbox):
   "try to commit when directory is locked"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   # modify gamma and lock its directory
   wc_dir = sbox.wc_dir
+
   D_path = os.path.join(wc_dir, 'A', 'D')
   gamma_path = os.path.join(D_path, 'gamma')
   svntest.main.file_append(gamma_path, "modified gamma")
   svntest.actions.lock_admin_dir(D_path)
 
   # this commit should fail
-  if svntest.actions.run_and_verify_commit(wc_dir,
-                                           None,
-                                           None,
-                                           'already-locked',
-                                           None, None,
-                                           None, None,
-                                           wc_dir):
-    return 1
+  svntest.actions.run_and_verify_commit(wc_dir,
+                                        None,
+                                        None,
+                                        'already-locked',
+                                        None, None,
+                                        None, None,
+                                        wc_dir)
                                            
   # unlock directory
-  outlines, errlines = svntest.main.run_svn(None, 'cleanup', D_path)
-  if errlines:
-    return 1
+  svntest.actions.run_and_verify_svn( "Output on stderr where none expected",
+                                      [], None,
+                                      'cleanup', D_path)
 
   # this commit should succeed
   expected_output = svntest.wc.State(wc_dir, {
@@ -1437,16 +1373,14 @@
   expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
   expected_status.tweak(repos_rev=2) # post-commit status
   expected_status.tweak('A/D/gamma', wc_rev=2)
-  if svntest.actions.run_and_verify_commit(wc_dir,
-                                           expected_output,
-                                           expected_status,
-                                           None,
-                                           None, None,
-                                           None, None,
-                                           wc_dir):
-    return 1
+  svntest.actions.run_and_verify_commit(wc_dir,
+                                        expected_output,
+                                        expected_status,
+                                        None,
+                                        None, None,
+                                        None, None,
+                                        wc_dir)
 
-
 #----------------------------------------------------------------------
 
 # Explicitly commit the current directory.  This did at one point fail
@@ -1491,9 +1425,7 @@
 def failed_commit(sbox):
   "commit with conflicts and check txn in repo"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   # Make the other working copy
@@ -1508,21 +1440,20 @@
   svntest.main.file_append (other_iota_path, "More different stuff in iota")
 
   # Commit both working copies. The second commit should fail.
-  output, errput = svntest.main.run_svn(None, 'commit', '-m', 'log', wc_dir)
-  if errput:
-    return 1
+  svntest.actions.run_and_verify_svn( "Output on stderr where none expected",
+                                      SVNAnyOutput, None,
+                                      'commit', '-m', 'log', wc_dir)
 
-  output, errput = svntest.main.run_svn(1, 'commit', '-m', 'log', other_wc_dir)
-  if not errput:
-    return 1
+  svntest.actions.run_and_verify_svn( "Output on stderr expected",
+                                      None, SVNAnyOutput,
+                                      'commit', '-m', 'log', other_wc_dir)
 
   # Now list the txns in the repo. The list should be empty.
   output, errput = svntest.main.run_svnadmin('lstxns', sbox.repo_dir)
-  if svntest.actions.compare_and_display_lines(
+  svntest.actions.compare_and_display_lines(
     "Error running 'svnadmin lstxns'.",
-    'STDERR', [], errput):
-    return 1
-  return svntest.actions.compare_and_display_lines(
+    'STDERR', [], errput)
+  svntest.actions.compare_and_display_lines(
     "Output of 'svnadmin lstxns' is unexpected.",
     'STDOUT', [], output)
 
@@ -1536,22 +1467,20 @@
 def commit_multiple_wc(sbox):
   "attempted commit from multiple wc fails"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   # Checkout a second working copy
   wc2_dir = os.path.join(wc_dir, 'A', 'wc2')
   url = svntest.main.current_repo_url
-  stdout_lines, stderr_lines = svntest.main.run_svn (None, 'checkout',
-                                                     '--username',
-                                                     svntest.main.wc_author,
-                                                     '--password',
-                                                     svntest.main.wc_passwd,
-                                                     url, wc2_dir)
-  if len (stderr_lines) != 0:
-    return 1
+  svntest.actions.run_and_verify_svn ( "Output on stderr where none expected",
+                                       SVNAnyOutput, None,
+                                       'checkout',
+                                       '--username',
+                                       svntest.main.wc_author,
+                                       '--password',
+                                       svntest.main.wc_passwd,
+                                       url, wc2_dir)
 
   # Modify both working copies
   mu_path = os.path.join(wc_dir, 'A', 'mu')
@@ -1562,32 +1491,26 @@
   # Verify modified status
   expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
   expected_status.tweak('A/mu', status='M ')
-  if svntest.actions.run_and_verify_status(wc_dir, expected_status):
-    return 1
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
   expected_status2 = svntest.actions.get_virginal_state(wc2_dir, 1)
   expected_status2.tweak('A/B/lambda', status='M ')
-  if svntest.actions.run_and_verify_status(wc2_dir, expected_status2):
-    return 1
+  svntest.actions.run_and_verify_status(wc2_dir, expected_status2)
 
   # Commit should fail, even though one target is a "child" of the other.
-  output, errput = svntest.main.run_svn("Not locked", 'commit', '-m', 'log',
-                                        wc_dir, wc2_dir)
-  if not errput:
-    return 1
+  svntest.actions.run_and_verify_svn( "Output on stderr expected",
+                                      None, "Not locked",
+                                      'commit', '-m', 'log',
+                                      wc_dir, wc2_dir)
 
   # Verify status unchanged
-  if svntest.actions.run_and_verify_status(wc_dir, expected_status):
-    return 1
-  if svntest.actions.run_and_verify_status(wc2_dir, expected_status2):
-    return 1
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
+  svntest.actions.run_and_verify_status(wc2_dir, expected_status2)
 
 
 def commit_symlink(sbox):
   "committing a symlink should fail"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   newfile_path = os.path.join(wc_dir, 'newfile')
@@ -1598,14 +1521,13 @@
   os.remove(newfile_path)
   os.symlink('linktarget', newfile_path)
 
-  out, err = svntest.main.run_svn(1, 'ci', '-m', 'log msg', wc_dir)
-  if err:
-    return 0
-  else:
-    return 1
+  svntest.actions.run_and_verify_svn( "Output on stderr expected",
+                                      None, SVNAnyOutput,
+                                      'ci', '-m', 'log msg', wc_dir)
 
 def commit_nonrecursive(sbox):
   "commit named targets with -N (issues #1195, #1239)"
+  
   sbox.build()
   wc_dir = sbox.wc_dir
 
@@ -1645,15 +1567,15 @@
   svntest.main.file_append(os.path.join(wc_dir, file4_path), 'this is file4')
 
   # Add them to version control.
-  out, err = svntest.main.run_svn(None, 'add', '-N',
-                                  os.path.join(wc_dir, file1_path),
-                                  os.path.join(wc_dir, dir1_path),
-                                  os.path.join(wc_dir, file2_path),
-                                  os.path.join(wc_dir, file3_path),
-                                  os.path.join(wc_dir, dir2_path),
-                                  os.path.join(wc_dir, file4_path))
-  if err:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn( "",
+                                      SVNAnyOutput, None,
+                                      'add', '-N',
+                                      os.path.join(wc_dir, file1_path),
+                                      os.path.join(wc_dir, dir1_path),
+                                      os.path.join(wc_dir, file2_path),
+                                      os.path.join(wc_dir, file3_path),
+                                      os.path.join(wc_dir, dir2_path),
+                                      os.path.join(wc_dir, file4_path))
 
   # Commit.  We should see all 6 items (2 dirs, 4 files) get sent.
   expected_output = svntest.wc.State(
@@ -1748,15 +1670,14 @@
   svntest.main.file_append(os.path.join(wc_dir, nocommit_path), 'nocommit')
 
   # Add them to version control.
-  out, err = svntest.main.run_svn(None, 'add', '-N',
-                                  os.path.join(wc_dir, dirA_path),
-                                  os.path.join(wc_dir, fileA_path),
-                                  os.path.join(wc_dir, fileB_path),
-                                  os.path.join(wc_dir, dirB_path),
-                                  os.path.join(wc_dir, fileC_path),
-                                  os.path.join(wc_dir, nocommit_path))
-  if err:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn( "", SVNAnyOutput, None,
+                                      'add', '-N',
+                                      os.path.join(wc_dir, dirA_path),
+                                      os.path.join(wc_dir, fileA_path),
+                                      os.path.join(wc_dir, fileB_path),
+                                      os.path.join(wc_dir, dirB_path),
+                                      os.path.join(wc_dir, fileC_path),
+                                      os.path.join(wc_dir, nocommit_path))
 
   expected_output = svntest.wc.State(
     wc_dir,
@@ -1812,9 +1733,7 @@
 def commit_out_of_date_deletions(sbox):
   "commit deletion of out-of-date file or dir"
 
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir = sbox.wc_dir
 
   # Make a backup copy of the working copy
@@ -1836,14 +1755,13 @@
   expected_status.tweak(wc_rev=1)
   expected_status.tweak('A/D/H/omega', 'A/C', wc_rev=2, status='  ')
 
-  if svntest.actions.run_and_verify_commit (wc_dir,
-                                            expected_output,
-                                            expected_status,
-                                            None,
-                                            None, None,
-                                            None, None,
-                                            wc_dir):
-    return 1
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None,
+                                         None, None,
+                                         None, None,
+                                         wc_dir)
 
   # Now, in the second working copy, schedule both omega and C for deletion.
   omega_path = os.path.join(wc_backup, 'A', 'D', 'H', 'omega') 
@@ -1860,7 +1778,7 @@
       out_of_date_error = 1;
 
   if out_of_date_error == 0:
-    return 1
+    raise svntest.Failure
 
   # Attempt to delete directory C.  This should return an (expected)
   # out-of-dateness error.
@@ -1872,18 +1790,14 @@
       out_of_date_error = 1;
 
   if out_of_date_error == 0:
-    return 1
+    raise svntest.Failure
 
-  return 0
-
-
 def commit_with_bad_log_message(sbox):
   "commit with a log message containing bad data"
 
-  if sbox.build():
-    return 1
-  
+  sbox.build()
   wc_dir = sbox.wc_dir
+  
   iota_path = os.path.join(wc_dir, 'iota')
   log_msg_path = os.path.join(wc_dir, 'log-message') 
 
@@ -1894,16 +1808,14 @@
   svntest.main.file_append(log_msg_path, '\x00')
 
   # Commit and expect an error.
-  if svntest.actions.run_and_verify_commit(wc_dir,
-                                           None, None,
-                                           "contains a zero byte",
-                                           None, None,
-                                           None, None,
-                                           '-F', log_msg_path,
-                                           iota_path):
-    return 1
+  svntest.actions.run_and_verify_commit(wc_dir,
+                                        None, None,
+                                        "contains a zero byte",
+                                        None, None,
+                                        None, None,
+                                        '-F', log_msg_path,
+                                        iota_path)
 
-
 def from_wc_top_with_bad_editor(sbox):
   "commit with invalid external editor cmd"
 
@@ -1930,20 +1842,17 @@
   sbox.build()
   wc_dir = sbox.wc_dir
   
-  out, err = svntest.main.run_svn(None, 'pset', 'fish', 'food', wc_dir)
-  if err:
-    print "Unexpected failure from propset."
-    raise svntest.Failure
-  
+  svntest.actions.run_and_verify_svn("Unexpected failure from propset.",
+                                     SVNAnyOutput, None,
+                                     'pset', 'fish', 'food', wc_dir)
   was_cwd = os.getcwd()
   try:
     os.chdir(wc_dir)
-    out, err = svntest.main.run_svn(1, 'ci', '--editor-cmd', 'no_such-editor')
+    out, err = svntest.actions.run_and_verify_svn(
+      "Commit succeeded when should have failed.",
+      None, SVNAnyOutput,
+      'ci', '--editor-cmd', 'no_such-editor')
 
-    if not err:
-      print "Commit succeeded when should have failed."
-      raise svntest.Failure
-
     err = string.join(map(string.strip, err), ' ')
     if not (re.match(".*no_such-editor.*", err)
             and re.match(".*Commit failed.*", err)):
Index: svnlook_tests.py
===================================================================
--- svnlook_tests.py	(revision 6929)
+++ svnlook_tests.py	(working copy)
@@ -47,7 +47,6 @@
   "test 'svnlook youngest' subcommand"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
   repo_dir = sbox.repo_dir
 
@@ -69,14 +68,13 @@
   expected_status.tweak(wc_rev=1)
   expected_status.tweak('A/mu', 'A/D/G/rho', wc_rev=2)
 
-  if svntest.actions.run_and_verify_commit (wc_dir,
-                                            expected_output,
-                                            expected_status,
-                                            None,
-                                            None, None,
-                                            None, None,
-                                            wc_dir):
-    raise svntest.Failure
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None,
+                                         None, None,
+                                         None, None,
+                                         wc_dir)
 
   # Youngest revision should now be 2.  Let's verify that.
   output, errput = svntest.main.run_svnlook("youngest", repo_dir)
@@ -97,11 +95,9 @@
   # move E to E2 and delete E2/alpha
   E_path = os.path.join(wc_dir, 'A', 'B', 'E')
   E2_path = os.path.join(wc_dir, 'A', 'B', 'E2')
-  output, errput = svntest.main.run_svn(None, 'mv', E_path, E2_path)
-  if errput: raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [], 'mv', E_path, E2_path)
   alpha_path = os.path.join(E2_path, 'alpha')
-  output, errput = svntest.main.run_svn(None, 'rm', alpha_path)
-  if errput: raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [], 'rm', alpha_path)
 
   # commit
   expected_output = svntest.wc.State(wc_dir, {
@@ -116,18 +112,16 @@
     'A/B/E2'      : Item(status='  ', wc_rev=2, repos_rev=2),
     'A/B/E2/beta' : Item(status='  ', wc_rev=2, repos_rev=2),
     })
-  if svntest.actions.run_and_verify_commit (wc_dir,
-                                            expected_output,
-                                            expected_status,
-                                            None,
-                                            None, None,
-                                            None, None,
-                                            wc_dir):
-    raise svntest.Failure
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None,
+                                         None, None,
+                                         None, None,
+                                         wc_dir)
 
   output, errput = svntest.main.run_svnlook("dirs-changed", repo_dir)
-  if errput:
-    raise svntest.Failure
+  if errput: raise svntest.Failure
 
   # Okay.  No failure, but did we get the right output?
   if len(output) != 2:
@@ -148,22 +142,21 @@
 
   # Add a bogus property to iota
   iota_path = os.path.join(wc_dir, 'iota')
-  output, errput = svntest.main.run_svn(None, 'propset',
-                                        'bogus_prop', 'bogus_val', iota_path)
-  if errput: raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [], 'propset',
+                                     'bogus_prop', 'bogus_val', iota_path)
 
   # commit the change
-  output, errput = svntest.main.run_svn(None, 'ci', '-m', 'log msg', iota_path)
-  if errput: raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'ci', '-m', 'log msg', iota_path)
 
   # Grab the diff
-  expected_output, errput = svntest.main.run_svn(None, 'diff', '-r',
-                                                 'PREV', iota_path)
-  if errput: raise svntest.Failure
+  expected_output, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                            'diff',
+                                                            '-r', 'PREV',
+                                                            iota_path)
 
   output, errput = svntest.main.run_svnlook("diff", repo_dir)
-  if errput:
-    raise svntest.Failure
+  if errput: raise svntest.Failure
 
   # Okay.  No failure, but did we get the right output?
   if len(output) != len(expected_output):
Index: schedule_tests.py
===================================================================
--- schedule_tests.py	(revision 6929)
+++ schedule_tests.py	(working copy)
@@ -64,11 +64,9 @@
 def add_files(sbox):
   "schedule: add some files"
 
+  sbox.build()
   wc_dir = sbox.wc_dir
 
-  if svntest.actions.make_repo_and_wc(sbox):
-    return 1
-
   # Create some files, then schedule them for addition
   delta_path = os.path.join(wc_dir, 'delta')
   zeta_path = os.path.join(wc_dir, 'A', 'B', 'zeta')
@@ -88,18 +86,16 @@
     'A/D/G/epsilon' : Item(status='A ', wc_rev=0, repos_rev=1),
     })
 
-  return svntest.actions.run_and_verify_status(wc_dir, expected_status)
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
 #----------------------------------------------------------------------
 
 def add_directories(sbox):
   "schedule: add some directories"
 
+  sbox.build()
   wc_dir = sbox.wc_dir
-
-  if svntest.actions.make_repo_and_wc(sbox):
-    return 1
-
+  
   # Create some directories, then schedule them for addition
   X_path = os.path.join(wc_dir, 'X')
   Y_path = os.path.join(wc_dir, 'A', 'C', 'Y')
@@ -119,18 +115,16 @@
     'A/D/H/Z' : Item(status='A ', wc_rev=0, repos_rev=1),
     })
 
-  return svntest.actions.run_and_verify_status(wc_dir, expected_status)
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
 #----------------------------------------------------------------------
 
 def nested_adds(sbox):
   "schedule: add some nested files and directories"
 
+  sbox.build()
   wc_dir = sbox.wc_dir
 
-  if svntest.actions.make_repo_and_wc(sbox):
-    return 1
-
   # Create some directories then schedule them for addition
   X_path = os.path.join(wc_dir, 'X')
   Y_path = os.path.join(wc_dir, 'A', 'C', 'Y')
@@ -178,27 +172,27 @@
     'A/D/H/Z/zeta' : Item(status='A ', wc_rev=0, repos_rev=1),
     })
 
-  return svntest.actions.run_and_verify_status(wc_dir, expected_status)
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
 #----------------------------------------------------------------------
 
 def add_executable(sbox):
   "schedule: add some executable files"
 
-  if sbox.build():
-    return 1
+  sbox.build()
+
   def runTest(wc_dir, fileName, perm, executable):
     fileName = os.path.join(wc_dir, fileName)
     if executable:
-      expected = (["*\n"], [])
+      expected_out = ["*\n"]
     else:
-      expected = ([], [])
+      expected_out = []
     f = open(fileName,"w")
     f.close()
     os.chmod(fileName,perm)
     svntest.main.run_svn(None, 'add', fileName)
-    return expected != svntest.main.run_svn(None, 'propget',
-                                            "svn:executable", fileName)
+    svntest.actions.run_and_verify_svn(None, expected_out, [],
+                                       'propget', "svn:executable", fileName)
   test_cases = [
     ("all_exe",   0777, 1),
     ("none_exe",  0666, 0),
@@ -207,19 +201,16 @@
     ("other_exe", 0667, 0),
     ]
   for test_case in test_cases:
-    if runTest(sbox.wc_dir, *test_case):
-      return 1
+    runTest(sbox.wc_dir, *test_case)
 
 #----------------------------------------------------------------------
 
 def delete_files(sbox):
   "schedule: delete some files"
 
+  sbox.build()
   wc_dir = sbox.wc_dir
 
-  if svntest.actions.make_repo_and_wc(sbox):
-    return 1
-
   # Schedule some files for deletion
   iota_path = os.path.join(wc_dir, 'iota')
   mu_path = os.path.join(wc_dir, 'A', 'mu')
@@ -233,18 +224,16 @@
   expected_status.tweak('iota', 'A/mu', 'A/D/G/rho', 'A/D/H/omega',
                         status='D ')
 
-  return svntest.actions.run_and_verify_status(wc_dir, expected_status)
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
 #----------------------------------------------------------------------
 
 def delete_dirs(sbox):
   "schedule: delete some directories"
 
+  sbox.build()
   wc_dir = sbox.wc_dir
 
-  if svntest.actions.make_repo_and_wc(sbox):
-    return 1
-
   # Schedule some directories for deletion (this is recursive!)
   E_path = os.path.join(wc_dir, 'A', 'B', 'E')
   F_path = os.path.join(wc_dir, 'A', 'B', 'F')
@@ -265,7 +254,7 @@
                         'A/D/H', 'A/D/H/chi', 'A/D/H/omega', 'A/D/H/psi',
                         status='D ')
 
-  return svntest.actions.run_and_verify_status(wc_dir, expected_status)
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
 
 #######################################################################
@@ -275,11 +264,9 @@
 def revert_add_files(sbox):
   "revert: add some files"
 
+  add_files(sbox)
   wc_dir = sbox.wc_dir
 
-  if add_files(sbox):
-    return 1
-
   # Revert our changes recursively from wc_dir.
   delta_path = os.path.join(wc_dir, 'delta')
   zeta_path = os.path.join(wc_dir, 'A', 'B', 'zeta')
@@ -287,32 +274,26 @@
   expected_output = ["Reverted " + delta_path + "\n",
                      "Reverted " + zeta_path + "\n",
                      "Reverted " + epsilon_path + "\n"]
-  output, errput = svntest.main.run_svn (None, 'revert', '--recursive', wc_dir)
 
-  # Make sure we got the right output.
-  if len(errput) > 0:
-    print errput
-    return 1
+  output, err = svntest.actions.run_and_verify_svn( None, None, [],
+                                                    'revert',
+                                                    '--recursive', wc_dir)
 
   ### do we really need to sort these?
-  output = _tweak_paths(output) # FIXME: see commend at _tweak_paths
+  output = _tweak_paths(output) # FIXME: see comment at _tweak_paths
   output.sort()
   expected_output.sort()
   if output != expected_output:
-    return 1
+    raise svntest.Failure
 
-  return 0
-
 #----------------------------------------------------------------------
 
 def revert_add_directories(sbox):
   "revert: add some directories"
 
+  add_directories(sbox)
   wc_dir = sbox.wc_dir
 
-  if add_directories(sbox):
-    return 1
-
   # Revert our changes recursively from wc_dir.
   X_path = os.path.join(wc_dir, 'X')
   Y_path = os.path.join(wc_dir, 'A', 'C', 'Y')
@@ -320,32 +301,21 @@
   expected_output = ["Reverted " + X_path + "\n",
                      "Reverted " + Y_path + "\n",
                      "Reverted " + Z_path + "\n"]
-  output, errput = svntest.main.run_svn (None, 'revert', '--recursive', wc_dir)
 
-  # Make sure we got the right output.
-  if len(errput) > 0:
-    print errput
-    return 1
+  expected_output = _tweak_paths(expected_output)
+  output, err = svntest.actions.run_and_verify_svn (None, None, [],
+                                                    'revert',
+                                                    '--recursive', wc_dir)
 
-  ### do we really need to sort these?
-  output = _tweak_paths(output) # FIXME: see commend at _tweak_paths
-  output.sort()
-  expected_output.sort()
-  if output != expected_output:
-    return 1
 
-  return 0
-
 #----------------------------------------------------------------------
 
 def revert_nested_adds(sbox):
   "revert: add some nested files and directories"
 
+  nested_adds(sbox)
   wc_dir = sbox.wc_dir
 
-  if nested_adds(sbox):
-    return 1
-
   # Revert our changes recursively from wc_dir.
   X_path = os.path.join(wc_dir, 'X')
   Y_path = os.path.join(wc_dir, 'A', 'C', 'Y')
@@ -353,31 +323,19 @@
   expected_output = ["Reverted " + X_path + "\n",
                      "Reverted " + Y_path + "\n",
                      "Reverted " + Z_path + "\n"]
-  output, errput = svntest.main.run_svn (None, 'revert', '--recursive', wc_dir)
+  expected_output = _tweak_paths(expected_output)
+  output, err = svntest.actions.run_and_verify_svn (None, None, [],
+                                                    'revert',
+                                                    '--recursive', wc_dir)
 
-  # Make sure we got the right output.
-  if len(errput) > 0:
-    print errput
-    return 1
-
-  ### do we really need to sort these?
-  output = _tweak_paths(output) # FIXME: see commend at _tweak_paths
-  output.sort()
-  expected_output.sort()
-  if output != expected_output:
-    return 1
-
-  return 0
-
 #----------------------------------------------------------------------
 
 def revert_add_executable(sbox):
   "revert: add some executable files"
 
-  if add_executable(sbox):
-    return 1
-
+  add_executable(sbox)
   wc_dir = sbox.wc_dir
+  
   all_path = os.path.join(wc_dir, 'all_exe')
   none_path = os.path.join(wc_dir, 'none_exe')
   user_path = os.path.join(wc_dir, 'user_exe')
@@ -390,33 +348,19 @@
                      "Reverted " + group_path + "\n",
                      "Reverted " + other_path + "\n"]
 
-  output, errput = svntest.main.run_svn (None, 'revert', 
-                                         '--recursive', wc_dir)
+  expected_output = _tweak_paths(expected_output)
+  output, err = svntest.actions.run_and_verify_svn (None, None, [],
+                                                    'revert',
+                                                    '--recursive', wc_dir)
 
-  # Make sure we got the right output.
-  if len(errput) > 0:
-    print errput
-    return 1
-
-  ### do we really need to sort these?
-  output = _tweak_paths(output) # FIXME: see commend at _tweak_paths
-  output.sort()
-  expected_output.sort()
-  if output != expected_output:
-    return 1
-
-  return 0
-
 #----------------------------------------------------------------------
 
 def revert_delete_files(sbox):
   "revert: delete some files"
 
+  delete_files(sbox)
   wc_dir = sbox.wc_dir
 
-  if delete_files(sbox):
-    return 1
-
   # Revert our changes recursively from wc_dir.
   iota_path = os.path.join(wc_dir, 'iota')
   mu_path = os.path.join(wc_dir, 'A', 'mu')
@@ -426,32 +370,19 @@
                      "Reverted " + mu_path + "\n",
                      "Reverted " + omega_path + "\n",
                      "Reverted " + rho_path + "\n"]
-  output, errput = svntest.main.run_svn (None, 'revert', '--recursive', wc_dir)
+  expected_output = _tweak_paths(expected_output)
+  output, err = svntest.actions.run_and_verify_svn (None, None, [],
+                                                    'revert',
+                                                    '--recursive', wc_dir)
 
-  # Make sure we got the right output.
-  if len(errput) > 0:
-    print errput
-    return 1
-
-  ### do we really need to sort these?
-  output = _tweak_paths(output) # FIXME: see commend at _tweak_paths
-  output.sort()
-  expected_output.sort()
-  if output != expected_output:
-    return 1
-
-  return 0
-
 #----------------------------------------------------------------------
 
 def revert_delete_dirs(sbox):
   "revert: delete some directories"
 
+  delete_dirs(sbox)
   wc_dir = sbox.wc_dir
 
-  if delete_dirs(sbox):
-    return 1
-
   # Revert our changes recursively from wc_dir.
   E_path = os.path.join(wc_dir, 'A', 'B', 'E')
   F_path = os.path.join(wc_dir, 'A', 'B', 'F')
@@ -469,23 +400,11 @@
                      "Reverted " + chi_path + "\n",
                      "Reverted " + omega_path + "\n",
                      "Reverted " + psi_path + "\n"]
-  output, errput = svntest.main.run_svn (None, 'revert', '--recursive', wc_dir)
+  expected_output = _tweak_paths(expected_output)
+  output, err = svntest.actions.run_and_verify_svn (None, None, [],
+                                                    'revert',
+                                                    '--recursive', wc_dir)
 
-  # Make sure we got the right output.
-  if len(errput) > 0:
-    print errput
-    return 1
-
-  ### do we really need to sort these?
-  output = _tweak_paths(output) # FIXME: see commend at _tweak_paths
-  output.sort()
-  expected_output.sort()
-  if output != expected_output:
-    return 1
-
-  return 0
-
-
 #######################################################################
 #  Stage III - Commit of modifications made in Stage 1
 #
@@ -493,66 +412,55 @@
 def commit_add_files(sbox):
   "commit: add some files"
 
-  if add_files(sbox):
-    return 1
+  add_files(sbox)
 
-  return 1
-  return 0
+  raise svntest.Failure
 
 #----------------------------------------------------------------------
 
 def commit_add_directories(sbox):
   "commit: add some directories"
 
-  if add_directories(sbox):
-    return 1
+  add_directories(sbox)
 
-  return 1
-  return 0
+  raise svntest.Failure
 
 #----------------------------------------------------------------------
 
 def commit_nested_adds(sbox):
   "commit: add some nested files and directories"
 
-  if nested_adds(sbox):
-    return 1
+  nested_adds(sbox)
 
-  return 1
-  return 0
+  raise svntest.Failure
 
 #----------------------------------------------------------------------
 
 def commit_add_executable(sbox):
   "commit: add some executable files"
 
-  if add_executable(sbox):
-    return 1
+  add_executable(sbox)
 
-  return 1
-  return 0
+  raise svntest.Failure
 
+
 #----------------------------------------------------------------------
 
 def commit_delete_files(sbox):
   "commit: delete some files"
 
-  if delete_files(sbox):
-    return 1
+  delete_files(sbox)
 
-  return 1
-  return 0
+  raise svntest.Failure
 
 #----------------------------------------------------------------------
 
 def commit_delete_dirs(sbox):
   "commit: delete some directories"
 
-  if delete_dirs(sbox):
-    return 1
+  delete_dirs(sbox)
 
-  return 1
-  return 0
+  raise svntest.Failure
 
 #----------------------------------------------------------------------
 # Regression test for issue #863:
@@ -566,11 +474,9 @@
 def unschedule_missing_added(sbox):
   "unschedule addition on missing items"
 
+  sbox.build()
   wc_dir = sbox.wc_dir
 
-  if svntest.actions.make_repo_and_wc(sbox):
-    return 1
-
   # Create some files and dirs, then schedule them for addition
   file1_path = os.path.join(wc_dir, 'file1')
   file2_path = os.path.join(wc_dir, 'file2')
@@ -591,8 +497,7 @@
     'dir2' : Item(status='A ', wc_rev=0, repos_rev=1),
     })
 
-  if svntest.actions.run_and_verify_status(wc_dir, expected_status):
-    return 1
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
   # Poof, all 4 added things are now missing in action.
   os.remove(file1_path)
@@ -606,11 +511,8 @@
 
   # 'svn st' should now show absolutely zero local mods.
   expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
-  if svntest.actions.run_and_verify_status(wc_dir, expected_status):
-    return 1
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
-  return 0
-
 #----------------------------------------------------------------------
 # Regression test for issue #962:
 #
@@ -620,10 +522,10 @@
 def delete_missing(sbox):
   "schedule and commit deletion on missing items"
 
+  sbox.build
   wc_dir = sbox.wc_dir
 
-  if svntest.actions.make_repo_and_wc(sbox):
-    return 1
+  svntest.actions.make_repo_and_wc(sbox)
 
   mu_path = os.path.join(wc_dir, 'A', 'mu')
   H_path = os.path.join(wc_dir, 'A', 'D', 'H')
@@ -633,9 +535,7 @@
   svntest.main.safe_rmtree(H_path)
 
   # Now schedule them for deletion anyway, and make sure no error is output.
-  stdout, stderr = svntest.main.run_svn(None, 'rm', mu_path, H_path)
-  if len(stderr) != 0:
-    return 1
+  svntest.actions.run_and_verify_svn(None, None, [], 'rm', mu_path, H_path)
 
   # Commit the deletions.
   expected_output = svntest.wc.State(wc_dir, {
@@ -648,11 +548,11 @@
                          'A/D/H/psi', 'A/D/H/omega', 'A/D/H/chi')
   expected_status.tweak(wc_rev=1)
 
-  return svntest.actions.run_and_verify_commit (wc_dir,
-                                                expected_output,
-                                                expected_status,
-                                                None, None, None, None, None,
-                                                wc_dir)
+  svntest.actions.run_and_verify_commit (wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         None, None, None, None, None,
+                                         wc_dir)
 
 ########################################################################
 # Run the tests
Index: merge_tests.py
===================================================================
--- merge_tests.py	(revision 6929)
+++ merge_tests.py	(working copy)
@@ -98,7 +98,6 @@
   ## we're only interested in rho here.)
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
   #  url = os.path.join(svntest.main.test_area_url, sbox.repo_dir)
   
@@ -200,9 +199,8 @@
   # We skip A/D/G/rho in this merge; it will be tested with a separate
   # merge command.  Temporarily put it back to revision 1, so this
   # merge succeeds cleanly.
-  out, err = svntest.main.run_svn(None, 'up', '-r', '1', other_rho_path)
-  if err:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn( None, None, [],
+                                      'up', '-r', '1', other_rho_path)
 
   # For A/D/G/tau, we append ten different lines, to conflict with the
   # ten lines appended in revision 3.
@@ -272,13 +270,16 @@
   # whole expected_foo routine for these intermediate operations;
   # they're not what we're here to test, after all, so it's enough to
   # know that they worked.  Is this a bad practice? ###
-  out, err = svntest.main.run_svn(None, 'revert', other_rho_path)
+  out, err = svntest.actions.run_and_verify_svn(None, None, None,
+                                                'revert', other_rho_path)
   if (err):
     for line in err:
       print "Error reverting: ", line,
     raise svntest.Failure
 
-  out, err = svntest.main.run_svn(None, 'up', '-r', '2', other_rho_path)
+  out, err = svntest.actions.run_and_verify_svn(None, None, None,
+                                                'up', '-r', '2',
+                                                other_rho_path)
   if (err):
     for line in err:
       print "Error updating: ", line,
@@ -368,7 +369,6 @@
   "merge and add new files/dirs with history"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   C_path = os.path.join(wc_dir, 'A', 'C')
@@ -448,10 +448,8 @@
   #  print "merge failed"
   #  return 1
 
-  outlines,errlines = svntest.main.run_svn(None, 'merge', '-r', '1:2', F_url,
-                                           C_path)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'merge', '-r', '1:2', F_url, C_path)
 
   expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
   expected_status.tweak(wc_rev=1)
@@ -498,7 +496,6 @@
   "merge that deletes items"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Rev 2 copy B to B2
@@ -506,9 +503,8 @@
   B2_path = os.path.join(wc_dir, 'A', 'B2')
   B_url = svntest.main.current_repo_url + '/A/B'
 
-  outlines,errlines = svntest.main.run_svn(None, 'copy', B_path, B2_path)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'copy', B_path, B2_path)
 
   expected_output = wc.State(wc_dir, {
     'A/B2'       : Item(verb='Adding'),
@@ -534,9 +530,8 @@
   # Rev 3 delete E and lambda from B
   E_path = os.path.join(B_path, 'E')
   lambda_path = os.path.join(B_path, 'lambda')
-  outlines, errlines = svntest.main.run_svn(None, 'delete', E_path, lambda_path)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'delete', E_path, lambda_path)
 
   expected_output = wc.State(wc_dir, {
     'A/B/E'       : Item(verb='Deleting'),
@@ -558,10 +553,9 @@
   # Local mods in B2
   B2_E_path = os.path.join(B2_path, 'E')
   B2_lambda_path = os.path.join(B2_path, 'lambda')
-  outlines, errlines = svntest.main.run_svn(None, 'propset', 'foo', 'foo_val',
-                                            B2_E_path, B2_lambda_path)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'propset', 'foo', 'foo_val',
+                                     B2_E_path, B2_lambda_path)
   expected_status.tweak(
     'A/B2/E', 'A/B2/lambda',  status=' M'
     )
@@ -570,30 +564,25 @@
   # Merge rev 3 into B2
 
   # dry-run without force fails to delete local mods
-  outlines, errlines = svntest.main.run_svn(1, 'merge', '-r', '2:3', B_url,
-                                            B2_path, '--dry-run')
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'merge', '-r', '2:3', B_url,
+                                     B2_path, '--dry-run')
   svntest.actions.run_and_verify_status(wc_dir, expected_status)
   # force dry-run to delete
-  outlines, errlines = svntest.main.run_svn(None, 'merge', '-r', '2:3', B_url,
-                                            B2_path, '--dry-run', '--force')
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'merge', '-r', '2:3', B_url,
+                                     B2_path, '--dry-run', '--force')
   svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
   # merge without force fails to delete local mods
-  outlines, errlines = svntest.main.run_svn(1, 'merge', '-r', '2:3', B_url,
-                                            B2_path)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'merge', '-r', '2:3', B_url, B2_path)
   svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
   # force merge to delete
-  outlines, errlines = svntest.main.run_svn(None, 'merge', '-r', '2:3', B_url,
-                                            B2_path, '--force')
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'merge', '-r', '2:3', B_url,
+                                     B2_path, '--force')
   
   expected_status.tweak(
     'A/B2/E', 'A/B2/E/alpha', 'A/B2/E/beta', 'A/B2/lambda',  status='D '
@@ -608,20 +597,18 @@
   "some simple property merges"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Add a property to a file and a directory
   alpha_path = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
   E_path = os.path.join(wc_dir, 'A', 'B', 'E')
-  outlines, errlines = svntest.main.run_svn(None, 'propset', 'foo', 'foo_val',
-                                            alpha_path)
-  if errlines:
-    return 1
-  outlines, errlines = svntest.main.run_svn(None, 'propset', 'foo', 'foo_val',
-                                            E_path)
-  if errlines:
-    raise svntest.Failure
+  
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'propset', 'foo', 'foo_val',
+                                     alpha_path)
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'propset', 'foo', 'foo_val',
+                                     E_path)
 
   # Commit change as rev 2
   expected_output = svntest.wc.State(wc_dir, {
@@ -635,41 +622,29 @@
                                          expected_output, expected_status,
                                          None, None, None, None, None,
                                          wc_dir)
-  outlines, errlines = svntest.main.run_svn(None, 'up', wc_dir)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'up', wc_dir)
 
   # Copy B to B2 as rev 3
   B_url = svntest.main.current_repo_url + '/A/B'
   B2_url = svntest.main.current_repo_url + '/A/B2'
 
-  outlines,errlines = svntest.main.run_svn(None, 'copy', '-m', 'fumble',
-                                           '--username', svntest.main.wc_author,
-                                           '--password', svntest.main.wc_passwd,
-                                           B_url, B2_url)
-  if errlines:
-    raise svntest.Failure
-  outlines, errlines = svntest.main.run_svn(None, 'up', wc_dir)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'copy', '-m', 'fumble',
+                                     '--username', svntest.main.wc_author,
+                                     '--password', svntest.main.wc_passwd,
+                                     B_url, B2_url)
+  svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
 
   # Modify a property and add a property for the file and directory
-  outlines, errlines = svntest.main.run_svn(None, 'propset', 'foo', 'mod_foo',
-                                            alpha_path)
-  if errlines:
-    raise svntest.Failure
-  outlines, errlines = svntest.main.run_svn(None, 'propset', 'bar', 'bar_val',
-                                            alpha_path)
-  if errlines:
-    raise svntest.Failure
-  outlines, errlines = svntest.main.run_svn(None, 'propset', 'foo', 'mod_foo',
-                                            E_path)
-  if errlines:
-    raise svntest.Failure
-  outlines, errlines = svntest.main.run_svn(None, 'propset', 'bar', 'bar_val',
-                                            E_path)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'propset', 'foo', 'mod_foo', alpha_path)
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'propset', 'bar', 'bar_val', alpha_path)
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'propset', 'foo', 'mod_foo', E_path)
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'propset', 'bar', 'bar_val', E_path)
 
   # Commit change as rev 4
   expected_status = svntest.actions.get_virginal_state(wc_dir, 3)
@@ -687,9 +662,7 @@
                                          expected_output, expected_status,
                                          None, None, None, None, None,
                                          wc_dir)
-  outlines, errlines = svntest.main.run_svn(None, 'up', wc_dir)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
 
   ### This test needs more work.  It's good enough to test issue 953,
   ### which is what caused me to write it, but it is not a thorough
@@ -704,29 +677,35 @@
                                       })
   expected_status.tweak(wc_rev=4)
   expected_status.tweak('A/B2/E', 'A/B2/E/alpha', status=' M')
-  dry_out, dry_err = svntest.main.run_svn(None, 'merge', '--dry-run',
-                                          '-r', '3:4', B_url, B2_path)
-  std_out, std_err = svntest.main.run_svn(None, 'merge',
-                                          '-r', '3:4', B_url, B2_path)
-  if dry_err or std_err or dry_out != std_out:
+  dry_out, dry_err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                        'merge', '--dry-run',
+                                                        '-r', '3:4',
+                                                        B_url, B2_path)
+  std_out, std_err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                        'merge',
+                                                        '-r', '3:4',
+                                                        B_url, B2_path)
+  if dry_out != std_out:
     raise svntest.Failure
   svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
   # Revert merge
-  outlines, errlines = svntest.main.run_svn(None, 'revert', '--recursive',
-                                            wc_dir)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'revert', '--recursive', wc_dir)
   expected_status.tweak('A/B2/E', 'A/B2/E/alpha', status='  ')
   svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
   # Merge B 2:1 into B2
   expected_status.tweak('A/B2/E', 'A/B2/E/alpha', status=' M')
-  dry_out, dry_err = svntest.main.run_svn(None, 'merge', '--dry-run',
-                                          '-r', '2:1', B_url, B2_path)
-  std_out, std_err = svntest.main.run_svn(None, 'merge',
-                                          '-r', '2:1', B_url, B2_path)
-  if dry_err or std_err or dry_out != std_out:
+  dry_out, dry_err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                        'merge', '--dry-run',
+                                                        '-r', '2:1',
+                                                        B_url, B2_path)
+  std_out, std_err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                        'merge',
+                                                        '-r', '2:1',
+                                                        B_url, B2_path)
+  if dry_out != std_out:
     raise svntest.Failure
   svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
@@ -736,11 +715,15 @@
                                       })
   expected_status.tweak(wc_rev=4)
   expected_status.tweak('A/B2/E', 'A/B2/E/alpha', status=' C')
-  dry_out, dry_err = svntest.main.run_svn(None, 'merge', '--dry-run',
-                                          '-r', '3:4', B_url, B2_path)
-  std_out, std_err = svntest.main.run_svn(None, 'merge',
-                                          '-r', '3:4', B_url, B2_path)
-  if dry_err or std_err or dry_out != std_out:
+  dry_out, dry_err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                        'merge', '--dry-run',
+                                                        '-r', '3:4',
+                                                        B_url, B2_path)
+  std_out, std_err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                        'merge',
+                                                        '-r', '3:4',
+                                                        B_url, B2_path)
+  if dry_out != std_out:
     raise svntest.Failure
   svntest.actions.run_and_verify_status(wc_dir, expected_status)
   
@@ -753,31 +736,28 @@
   A2_url = svntest.main.current_repo_url + '/A2'
  
   # Copy to make revision 5
-  outlines,errlines = svntest.main.run_svn(None, 'copy', '-m', 'fumble',
-                                           '--username', svntest.main.wc_author,
-                                           '--password', svntest.main.wc_passwd,
-                                           A_url, A2_url)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'copy', '-m', 'fumble',
+                                     '--username', svntest.main.wc_author,
+                                     '--password', svntest.main.wc_passwd,
+                                     A_url, A2_url)
   
-  outlines, errlines = svntest.main.run_svn(None, 'switch', A2_url, wc_dir)
+  svntest.main.run_svn(None, 'switch', A2_url, wc_dir)
   
   A_url = svntest.main.current_repo_url + '/A/B/E/alpha'
   alpha_path = os.path.join(wc_dir, 'B', 'E', 'alpha')
   
-  outlines, errlines = svntest.main.run_svn(None, 'merge',
-                                          '-r', '3:4', A_url, alpha_path)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'merge',
+                                     '-r', '3:4', A_url, alpha_path)
   
-  outlines,errlines = svntest.main.run_svn(None, 'pl', alpha_path)
+  output, err = svntest.actions.run_and_verify_svn(None, None, [],
+                                                   'pl', alpha_path)
   
-  if errlines:
-    raise svntest.Failure
 
   saw_foo = 0
   saw_bar = 0
-  for line in outlines:
+  for line in output:
     if re.match("\\s*foo\\s*$", line):
       saw_foo = 1
     if re.match("\\s*bar\\s*$", line):
@@ -794,7 +774,6 @@
   "merge should not die if a target file is absent"
   
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Copy G to a new directory, Q.  Create Q/newfile.  Commit a change
@@ -806,30 +785,23 @@
   newfile_path = os.path.join(Q_path, 'newfile')
   Q_url = svntest.main.current_repo_url + '/A/D/Q'
 
-  outlines,errlines = svntest.main.run_svn(None, 'cp', G_path, Q_path)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [], 'cp', G_path, Q_path)
   
   svntest.main.file_append(newfile_path, 'This is newfile.\n')
-  outlines,errlines = svntest.main.run_svn(None, 'add', newfile_path)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [], 'add', newfile_path)
   
-  outlines,errlines = svntest.main.run_svn(None, 'ci', '-m', 'rev 2', Q_path)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'ci', '-m', 'rev 2', Q_path)
 
   svntest.main.file_append(newfile_path, 'A change to newfile.\n')
-  outlines,errlines = svntest.main.run_svn(None, 'ci', '-m', 'rev 3', Q_path)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'ci', '-m', 'rev 3', Q_path)
 
   saved_cwd = os.getcwd()
   try:
     os.chdir(G_path)
-    out, err = svntest.main.run_svn(0, 'merge', '-r', '2:3', Q_url)
-    if err:
-      raise svntest.Failure
+    svntest.actions.run_and_verify_svn(None, None, [],
+                                       'merge', '-r', '2:3', Q_url)
   finally:
     os.chdir(saved_cwd)
 
@@ -839,7 +811,6 @@
   "merge on deleted directory in target"
   
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Copy B to a new directory, I. Modify B/E/alpha, Remove I/E. Now
@@ -851,29 +822,25 @@
   B_url = svntest.main.current_repo_url + '/A/B'
   I_url = svntest.main.current_repo_url + '/A/I'
 
-  outlines,errlines = svntest.main.run_svn(None, 'cp', B_url, I_url, '-m', 'rev 2')
-  if errlines:
-    raise svntest.Failure
 
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'cp', B_url, I_url, '-m', 'rev 2')
+
   svntest.main.file_append(alpha_path, 'A change to alpha.\n')
   svntest.main.file_append(os.path.join(B_path, 'lambda'), 'A change to lambda.\n')
   
-  outlines,errlines = svntest.main.run_svn(None, 'ci', '-m', 'rev 3', B_path)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'ci', '-m', 'rev 3', B_path)
 
   E_url = svntest.main.current_repo_url + '/A/I/E'
-  outlines,errlines = svntest.main.run_svn(None, 'rm', E_url, '-m', 'rev 4')
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'rm', E_url, '-m', 'rev 4')
 
-  outlines,errlines = svntest.main.run_svn(None, 'up', os.path.join(wc_dir,'A'))
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'up', os.path.join(wc_dir,'A'))
 
-  outlines, errlines = svntest.main.run_svn(0, 'merge', '-r', '2:3', B_url, I_path)
-  if errlines:
-      raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'merge', '-r', '2:3', B_url, I_path)
 
 #----------------------------------------------------------------------
 # This is a regression for issue #1176.
@@ -884,7 +851,6 @@
   ## See http://subversion.tigris.org/issues/show_bug.cgi?id=1249. ##
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Simple test.  Make three directories with the same content.
@@ -921,28 +887,22 @@
   os.rename(os.path.join(base2_path, 'A', 'B', 'beta'),
             os.path.join(base2_path, 'A', 'B', 'zeta'))
 
-  out, err = svntest.main.run_svn(None, 'add',
-                                  base1_path, base2_path, apply_path)
-  if err:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                  'add', base1_path, base2_path, apply_path)
 
-  out, err = svntest.main.run_svn(None, 'ci', '-m', 'rev 2', wc_dir)
-  if err:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'ci', '-m', 'rev 2', wc_dir)
 
-  out, err = svntest.main.run_svn(None, 'merge',
-                                  base1_url, base2_url, apply_path)
-  if err:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                  'merge', base1_url, base2_url, apply_path)
 
-
 #----------------------------------------------------------------------
 def merge_one_file(sbox):
   "merge one file (issue #1150)"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
+  
   rho_rel_path = os.path.join('A', 'D', 'G', 'rho')
   rho_path = os.path.join(wc_dir, rho_rel_path)
   G_path = os.path.join(wc_dir, 'A', 'D', 'G')
@@ -963,18 +923,16 @@
                                          wc_dir)
   
   # Backdate rho to revision 1, so we can merge in the rev 2 changes.
-  out, err = svntest.main.run_svn(0, 'up', '-r', '1', rho_path)
-  if err:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'up', '-r', '1', rho_path)
 
   # Try one merge with an explicit target; it should succeed.
   # ### Yes, it would be nice to use run_and_verify_merge(), but it
   # appears to be impossible to get the expected_foo trees working
   # right.  I think something is still assuming a directory target.
-  out, err = svntest.main.run_svn(0, 'merge', '-r', '1:2',
-                                  rho_url, rho_path)
-  if err:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'merge', '-r', '1:2',
+                                     rho_url, rho_path)
 
   # Inspect rho, make sure it's right.
   rho_text = svntest.tree.get_text(rho_path)
@@ -983,18 +941,15 @@
     raise svntest.Failure
 
   # Restore rho to pristine revision 1, for another merge.
-  out, err = svntest.main.run_svn(0, 'revert', rho_path)
-  if err:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [], 'revert', rho_path)
 
   # Cd into the directory and run merge with no targets.
   # It should still merge into rho.
   saved_cwd = os.getcwd()
   try:
     os.chdir(G_path)
-    out, err = svntest.main.run_svn(0, 'merge', '-r', '1:2', rho_url)
-    if err:
-      raise svntest.Failure
+    svntest.actions.run_and_verify_svn(None, None, [],
+                                       'merge', '-r', '1:2', rho_url)
 
     # Inspect rho, make sure it's right.
     rho_text = svntest.tree.get_text('rho')
@@ -1012,7 +967,6 @@
   "merging a file with no explicit target path"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
   
   # Change mu for revision 2
@@ -1055,20 +1009,16 @@
     os.chdir(os.path.join(other_wc, 'A'))
 
     # merge using URL for sourcepath
-    out, err = svntest.main.run_svn(0, 'merge', '-r', '2:1',
-                                    mu_url)
-    if err:
-      raise svntest.Failure
+    svntest.actions.run_and_verify_svn(None, None, [],
+                                       'merge', '-r', '2:1', mu_url)
 
     # sanity-check resulting file
     if (svntest.tree.get_text('mu') != orig_mu_text):
       raise svntest.Failure
 
     # merge using filename for sourcepath
-    out, err = svntest.main.run_svn(0, 'merge', '-r', '1:2',
-                                    'mu')
-    if err:
-      raise svntest.Failure
+    svntest.actions.run_and_verify_svn(None, None, [],
+                                       'merge', '-r', '1:2', 'mu')
 
     # sanity-check resulting file
     if (svntest.tree.get_text('mu') != orig_mu_text + added_mu_text):
@@ -1083,7 +1033,6 @@
   "merge operations using PREV revision"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
   
   # Change mu for revision 2
@@ -1134,9 +1083,8 @@
     os.chdir(os.path.join(other_wc, 'A'))
 
     # Try to revert the last change to mu via svn merge
-    out, err = svntest.main.run_svn(0, 'merge', '-r', 'HEAD:PREV', 'mu')
-    if err:
-      raise svntest.Failure
+    svntest.actions.run_and_verify_svn(None, None, [],
+                                       'merge', '-r', 'HEAD:PREV', 'mu')
 
     # sanity-check resulting file
     if (svntest.tree.get_text('mu') != orig_mu_text):
@@ -1149,16 +1097,13 @@
     os.chdir(another_wc)
 
     # ensure 'A' will be at revision 2
-    out, err = svntest.main.run_svn(0, 'up')
-    if err:
-      raise svntest.Failure
+    svntest.actions.run_and_verify_svn(None, None, [], 'up')
 
     # now try a revert on a directory, and verify that it removed the zot
     # file we had added previously
-    out, err = svntest.main.run_svn(0, 'merge', '-r', 'COMMITTED:PREV',
-                                    'A', 'A')
-    if err:
-      raise svntest.Failure
+    svntest.actions.run_and_verify_svn(None, None, [],
+                                       'merge', '-r', 'COMMITTED:PREV',
+                                       'A', 'A')
 
     if (svntest.tree.get_text('A/zot') != None):
       raise svntest.Failure
@@ -1175,7 +1120,6 @@
   "merge change into unchanged binary file"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   # Add a binary file to the project
@@ -1255,6 +1199,7 @@
 
   sbox.build()
   wc_dir = sbox.wc_dir
+  
   trunk_url = svntest.main.current_repo_url + '/A/B/E';
 
   # Create a branch
@@ -1293,7 +1238,6 @@
   "merge should skip over unversioned obstructions"
 
   sbox.build()
-
   wc_dir = sbox.wc_dir
 
   C_path = os.path.join(wc_dir, 'A', 'C')
@@ -1336,44 +1280,33 @@
 
   svntest.main.file_append(os.path.join(C_path, "foo"), "foo") # unversioned
 
-  outlines,errlines = svntest.main.run_svn(None, 'merge', '-r', '1:2', F_url,
-                                           C_path)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'merge', '-r', '1:2', F_url, C_path)
 
   # Revert the local mods, and this time make "Q" obstructed.  An
   # unversioned file called "Q" will obstruct the adding of the
   # directory of the same name.
 
-  outlines,errlines = svntest.main.run_svn(None, 'revert', '-R', wc_dir)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'revert', '-R', wc_dir)
 
   os.unlink(os.path.join(C_path, "foo"))
   svntest.main.safe_rmtree(os.path.join(C_path, "Q"))
   svntest.main.file_append(os.path.join(C_path, "Q"), "foo") # unversioned
   
-  outlines,errlines = svntest.main.run_svn(None, 'merge', '-r', '1:2', F_url,
-                                           C_path)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                           'merge', '-r', '1:2', F_url, C_path)
 
   # Revert the local mods, and commit the deletion of iota and A/D/G. (r3)
   os.unlink(os.path.join(C_path, "foo"))
-  outlines,errlines = svntest.main.run_svn(None, 'revert', '-R', wc_dir)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [], 'revert', '-R', wc_dir)
 
   iota_path = os.path.join(wc_dir, 'iota')
   G_path = os.path.join(wc_dir, 'A', 'D', 'G')
-  outlines,errlines = svntest.main.run_svn(None, 'rm', iota_path, G_path)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [], 'rm', iota_path, G_path)
 
-  outlines,errlines = svntest.main.run_svn(None, 'commit', '-m', 'msg',
-                                           wc_dir)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'commit', '-m', 'msg', wc_dir)
 
   # Now create unversioned iota and A/D/G, try running a merge -r2:3.
   # The merge process should skip over these targets, since they're
@@ -1381,33 +1314,25 @@
   
   svntest.main.file_append(iota_path, "foo") # unversioned
   os.mkdir(G_path) # unversioned
-  outlines,errlines = svntest.main.run_svn(None, 'merge', '-r', '2:3',
-                                           svntest.main.current_repo_url,
-                                           wc_dir)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'merge', '-r', '2:3',
+                                     svntest.main.current_repo_url, wc_dir)
   
   # Revert the local mods, and commit a change to A/B/lambda (r4), and then
   # commit the deletion of the same file. (r5)
   os.unlink(iota_path)
   svntest.main.safe_rmtree(G_path)
-  outlines,errlines = svntest.main.run_svn(None, 'revert', '-R', wc_dir)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [], 'revert', '-R', wc_dir)
 
   lambda_path = os.path.join(wc_dir, 'A', 'B', 'lambda')
   svntest.main.file_append(lambda_path, "more text")
-  outlines,errlines = svntest.main.run_svn(None, 'commit', '-m', 'msg', wc_dir)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'commit', '-m', 'msg', wc_dir)
 
-  outlines,errlines = svntest.main.run_svn(None, 'rm', lambda_path)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [], 'rm', lambda_path)
 
-  outlines,errlines = svntest.main.run_svn(None, 'commit', '-m', 'msg', wc_dir)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'commit', '-m', 'msg', wc_dir)
 
   # lambda is gone, so create an unversioned lambda in its place.
   # Then attempt to merge -r3:4, which is a change to lambda.  The merge
@@ -1415,31 +1340,24 @@
 
   svntest.main.file_append(lambda_path, "foo") # unversioned
 
-  outlines,errlines = svntest.main.run_svn(None, 'merge', '-r', '3:4',
-                                           svntest.main.current_repo_url,
-                                           wc_dir)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'merge', '-r', '3:4',
+                                     svntest.main.current_repo_url, wc_dir)
 
   # OK, so let's commit the new lambda (r6), and then delete the
   # working file.  Then re-run the -r3:4 merge, and see how svn deals
   # with a file being under version control, but missing.
 
-  outlines,errlines = svntest.main.run_svn(None, 'add', lambda_path)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [], 'add', lambda_path)
 
-  outlines,errlines = svntest.main.run_svn(None, 'commit', '-m', 'msg', wc_dir)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'commit', '-m', 'msg', wc_dir)
 
   os.unlink(lambda_path)
 
-  outlines,errlines = svntest.main.run_svn(None, 'merge', '-r', '3:4',
-                                           svntest.main.current_repo_url,
-                                           wc_dir)
-  if errlines:
-    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'merge', '-r', '3:4',
+                                     svntest.main.current_repo_url, wc_dir)
 
 
 ########################################################################
Index: externals_tests.py
===================================================================
--- externals_tests.py	(revision 6929)
+++ externals_tests.py	(working copy)
@@ -22,8 +22,9 @@
 
 # Our testing module
 import svntest
-  
+from svntest import SVNAnyOutput
 
+
 # (abbreviation)
 Skip = svntest.testcase.Skip
 XFail = svntest.testcase.XFail
@@ -67,8 +68,7 @@
   remove a previous incarnation of the other repository.
   """
 
-  if sbox.build():
-    return 1
+  sbox.build()
 
   svntest.main.safe_rmtree(sbox.wc_dir) # The test itself will recreate this
 
@@ -89,39 +89,37 @@
   D_path = os.path.join(wc_init_dir, "A/D")
 
   # Create a working copy.
-  out_lines, err_lines = svntest.main.run_svn \
-                         (None, 'checkout',
-                          '--username', svntest.main.wc_author,
-                          '--password', svntest.main.wc_passwd,
-                          repo_url, wc_init_dir)
-  if err_lines: return 1
+  svntest.actions.run_and_verify_svn("", None, [],
+                                     'checkout',
+                                     '--username', svntest.main.wc_author,
+                                     '--password', svntest.main.wc_passwd,
+                                     repo_url, wc_init_dir)
 
   # Make revisions 2 through 5, but don't bother with pre- and
   # post-commit status checks.
 
   svntest.main.file_append(mu_path, "\nAdded to mu in revision 2.\n")
-  out_lines, err_lines = svntest.main.run_svn \
-                         (None, 'ci', '-m', 'log msg', '--quiet', wc_init_dir)
-  if (err_lines): return 1
+  svntest.actions.run_and_verify_svn("", None, [],
+                                     'ci', '-m', 'log msg',
+                                     '--quiet', wc_init_dir)
 
   svntest.main.file_append(pi_path, "\nAdded to pi in revision 3.\n")
-  out_lines, err_lines = svntest.main.run_svn \
-                         (None, 'ci', '-m', 'log msg', '--quiet', wc_init_dir)
-  if (err_lines): return 1
+  svntest.actions.run_and_verify_svn("", None, [],
+                                     'ci', '-m', 'log msg',
+                                     '--quiet', wc_init_dir)
 
   svntest.main.file_append(lambda_path, "\nAdded to lambda in revision 4.\n")
-  out_lines, err_lines = svntest.main.run_svn \
-                         (None, 'ci', '-m', 'log msg', '--quiet', wc_init_dir)
-  if (err_lines): return 1
+  svntest.actions.run_and_verify_svn("", None, [],
+                                     'ci', '-m', 'log msg',
+                                     '--quiet', wc_init_dir)
 
   svntest.main.file_append(omega_path, "\nAdded to omega in revision 5.\n")
-  out_lines, err_lines = svntest.main.run_svn \
-                         (None, 'ci', '-m', 'log msg', '--quiet', wc_init_dir)
-  if (err_lines): return 1
+  svntest.actions.run_and_verify_svn("", None, [],
+                                     'ci', '-m', 'log msg',
+                                     '--quiet', wc_init_dir)
 
   # Get the whole working copy to revision 5.
-  out_lines, err_lines = svntest.main.run_svn(None, 'up', wc_init_dir)
-  if (err_lines): return 1
+  svntest.actions.run_and_verify_svn("", None, [], 'up', wc_init_dir)
 
   # Now copy the initial repository to create the "other" repository,
   # the one to which the first repository's `svn:externals' properties
@@ -136,9 +134,9 @@
 
   tmp_f = os.tempnam(wc_init_dir, 'tmp')
   svntest.main.file_append(tmp_f, externals_desc)
-  out_lines, err_lines = svntest.main.run_svn \
-                         (None, 'pset', '-F', tmp_f, 'svn:externals', B_path)
-  if err_lines: return 1
+  svntest.actions.run_and_verify_svn("", None, [],
+                                     'pset',
+                                     '-F', tmp_f, 'svn:externals', B_path)
    
   os.remove(tmp_f)
 
@@ -153,9 +151,8 @@
            "\n"
 
   svntest.main.file_append(tmp_f, externals_desc)
-  out_lines, err_lines = svntest.main.run_svn \
-                         (None, 'pset', '-F', tmp_f, 'svn:externals', D_path)
-  if err_lines: return 1
+  svntest.actions.run_and_verify_svn("", None, [], 'pset',
+                                     '-F', tmp_f, 'svn:externals', D_path)
 
   os.remove(tmp_f)
 
@@ -170,11 +167,11 @@
   expected_status.tweak(repos_rev=6)
   expected_status.tweak('A/B', 'A/D', wc_rev=6, status='  ')
 
-  return svntest.actions.run_and_verify_commit(wc_init_dir,
-                                               expected_output,
-                                               expected_status,
-                                               None, None, None, None, None,
-                                               wc_init_dir)
+  svntest.actions.run_and_verify_commit(wc_init_dir,
+                                        expected_output,
+                                        expected_status,
+                                        None, None, None, None, None,
+                                        wc_init_dir)
 
 
 def change_external(path, new_val):
@@ -182,11 +179,10 @@
   and commit the change."""
   tmp_f = os.tempnam(svntest.main.temp_dir, 'tmp')
   svntest.main.file_append(tmp_f, new_val)
-  out_lines, err_lines = svntest.main.run_svn \
-                         (None, 'pset', '-F', tmp_f, 'svn:externals', path)
-  out_lines, err_lines = svntest.main.run_svn \
-                         (None, 'ci', '-m', 'log msg', '--quiet', path)
-  if (err_lines): return 1
+  svntest.actions.run_and_verify_svn("", None, [], 'pset',
+                                     '-F', tmp_f, 'svn:externals', path)
+  svntest.actions.run_and_verify_svn("", None, [], 'ci',
+                                     '-m', 'log msg', '--quiet', path)
   os.remove(tmp_f)
 
 
@@ -207,20 +203,18 @@
 def checkout_with_externals(sbox):
   "test checkouts with externals"
 
-  if externals_test_setup(sbox):
-    return 1
+  externals_test_setup(sbox)
 
   wc_dir         = sbox.wc_dir
   repo_dir       = sbox.repo_dir
   repo_url       = sbox.repo_url
 
   # Create a working copy.
-  out_lines, err_lines = svntest.main.run_svn \
-                         (None, 'checkout',
-                          '--username', svntest.main.wc_author,
-                          '--password', svntest.main.wc_passwd,
-                          repo_url, wc_dir)
-  if err_lines: return 1
+  svntest.actions.run_and_verify_svn( "", None, [],
+                                      'checkout',
+                                      '--username', svntest.main.wc_author,
+                                      '--password', svntest.main.wc_passwd,
+                                      repo_url, wc_dir)
 
   # Probe the working copy a bit, see if it's as expected.
   exdir_G_path    = os.path.join(wc_dir, "A/B/exdir_G")
@@ -235,73 +229,58 @@
   beta_path  = os.path.join(blah_path, "beta")
 
   if (not os.path.exists(exdir_G_path)):
-    print "Probing for", exdir_G_path, "failed."
-    return 1
+    raise svntest.Failure("Probing for " + exdir_G_path + " failed.")
   if (not os.path.exists(exdir_G_pi_path)):
-    print "Probing for", exdir_G_pi_path, "failed."
-    return 1
+    raise svntest.Failure("Probing for " + exdir_G_pi_path + " failed.")
   if (not os.path.exists(exdir_H_path)):
-    print "Probing for", exdir_H_path, "failed."
-    return 1
+    raise svntest.Failure("Probing for " + exdir_H_path + " failed.")
   if (not os.path.exists(exdir_H_omega_path)):
-    print "Probing for", exdir_H_omega_path, "failed."
-    return 1
+    raise svntest.Failure("Probing for " + exdir_H_omega_path + " failed.")
   if (not os.path.exists(x_path)):
-    print "Probing for", x_path, "failed."
-    return 1
+    raise svntest.Failure("Probing for " + x_path + " failed.")
   if (not os.path.exists(y_path)):
-    print "Probing for", y_path, "failed."
-    return 1
+    raise svntest.Failure("Probing for " + y_path + " failed.")
   if (not os.path.exists(z_path)):
-    print "Probing for", z_path, "failed."
-    return 1
+    raise svntest.Failure("Probing for " + z_path + " failed.")
   if (not os.path.exists(z_path)):
-    print "Probing for", z_path, "failed."
-    return 1
+    raise svntest.Failure("Probing for " + z_path + " failed.")
   if (not os.path.exists(alpha_path)):
-    print "Probing for", alpha_path, "failed."
-    return 1
+    raise svntest.Failure("Probing for " + alpha_path + " failed.")
   if (not os.path.exists(beta_path)):
-    print "Probing for", beta_path, "failed."
-    return 1
+    raise svntest.Failure("Probing for " + beta_path + " failed.")
 
   # Pick a file at random, make sure it has the expected contents.
   fp = open(exdir_H_omega_path, 'r')
   lines = fp.readlines()
   if not ((len(lines) == 1) and (lines[0] == "This is the file 'omega'.")):
-    print "Unexpected contents for rev 1 of", exdir_H_omega_path
-    return 1
+    raise svntest.Failure("Unexpected contents for rev 1 of " +
+                          exdir_H_omega_path)
 
-  return 0
-
 #----------------------------------------------------------------------
 
 def update_receive_new_external(sbox):
   "update to receive a new external module"
 
-  if externals_test_setup(sbox):
-    return 1
-
+  externals_test_setup(sbox)
   wc_dir         = sbox.wc_dir
+  
   other_wc_dir   = sbox.add_wc_path('other')
   repo_dir       = sbox.repo_dir
   repo_url       = sbox.repo_url
   other_repo_url = repo_url + ".other"
 
   # Checkout two working copies.
-  out_lines, err_lines = svntest.main.run_svn \
-                         (None, 'checkout',
-                          '--username', svntest.main.wc_author,
-                          '--password', svntest.main.wc_passwd,
-                          repo_url, wc_dir)
-  if err_lines: return 1
+  svntest.actions.run_and_verify_svn( "", None, [],
+                                      'checkout',
+                                      '--username', svntest.main.wc_author,
+                                      '--password', svntest.main.wc_passwd,
+                                      repo_url, wc_dir)
 
-  out_lines, err_lines = svntest.main.run_svn \
-                         (None, 'checkout',
-                          '--username', svntest.main.wc_author,
-                          '--password', svntest.main.wc_passwd,
-                          repo_url, other_wc_dir)
-  if err_lines: return 1
+  svntest.actions.run_and_verify_svn( "", None, [],
+                                      'checkout',
+                                      '--username', svntest.main.wc_author,
+                                      '--password', svntest.main.wc_passwd,
+                                      repo_url, other_wc_dir)
 
   # Add one new external item to the property on A/D.  The new item is
   # "exdir_E", deliberately added in the middle not at the end.
@@ -321,45 +300,37 @@
   change_external(os.path.join(wc_dir, "A/D"), new_externals_desc)
 
   # Update the other working copy, see if we get the new item.
-  out_lines, err_lines = svntest.main.run_svn (None, 'up', other_wc_dir)
-  if err_lines: return 1
+  svntest.actions.run_and_verify_svn( "", None, [], 'up', other_wc_dir)
 
   exdir_E_path = os.path.join(other_wc_dir, "A", "D", "exdir_E")
   if (not os.path.exists(exdir_E_path)):
-    print "Probing for", exdir_E_path, "failed."
-    return 1
+    raise svntest.Failure("Probing for " + exdir_E_path + " failed.")
 
-  return 0
-
-
 #----------------------------------------------------------------------
 
 def update_lose_external(sbox):
   "update to lose an external module"
 
-  if externals_test_setup(sbox):
-    return 1
-
+  externals_test_setup(sbox)
   wc_dir         = sbox.wc_dir
+  
   other_wc_dir   = sbox.add_wc_path('other')
   repo_dir       = sbox.repo_dir
   repo_url       = sbox.repo_url
   other_repo_url = repo_url + ".other"
 
   # Checkout two working copies.
-  out_lines, err_lines = svntest.main.run_svn \
-                         (None, 'checkout',
-                          '--username', svntest.main.wc_author,
-                          '--password', svntest.main.wc_passwd,
-                          repo_url, wc_dir)
-  if err_lines: return 1
+  svntest.actions.run_and_verify_svn( "", None, [],
+                                      'checkout',
+                                      '--username', svntest.main.wc_author,
+                                      '--password', svntest.main.wc_passwd,
+                                      repo_url, wc_dir)
 
-  out_lines, err_lines = svntest.main.run_svn \
-                         (None, 'checkout',
-                          '--username', svntest.main.wc_author,
-                          '--password', svntest.main.wc_passwd,
-                          repo_url, other_wc_dir)
-  if err_lines: return 1
+  svntest.actions.run_and_verify_svn( "", None, [],
+                                      'checkout',
+                                      '--username', svntest.main.wc_author,
+                                      '--password', svntest.main.wc_passwd,
+                                      repo_url, other_wc_dir)
 
   # Lose one new external item from A/D.  The lost item is
   # "exdir_A", chosen because there are two other externals underneath
@@ -389,76 +360,61 @@
   change_external(os.path.join(wc_dir, "A/D"), new_externals_desc)
 
   # Update other working copy, see if lose & preserve things appropriately
-  out_lines, err_lines = svntest.main.run_svn (None, 'up', other_wc_dir)
-  if err_lines: return 1
+  svntest.actions.run_and_verify_svn( "", None, [], 'up', other_wc_dir)
 
   exdir_A_path = os.path.join(other_wc_dir, "A", "D", "exdir_A")
   if (not os.path.exists(exdir_A_path)):
-    print "Probing for", exdir_A_path, "failed."
-    return 1
+    raise svntest.Failure("Probing for " + exdir_A_path + " failed.")
 
   mu_path = os.path.join(other_wc_dir, "A", "D", "exdir_A", "mu")
   if (os.path.exists(mu_path)):
-    print mu_path, "unexpectedly still exists."
-    return 1
+    raise svntest.Failure(mu_path + " unexpectedly still exists.")
 
   B_path = os.path.join(other_wc_dir, "A", "D", "exdir_A", "B")
   if (os.path.exists(B_path)):
-    print B_path, "unexpectedly still exists."
-    return 1
+    raise svntest.Failure(B_path + " unexpectedly still exists.")
 
   C_path = os.path.join(other_wc_dir, "A", "D", "exdir_A", "C")
   if (os.path.exists(C_path)):
-    print C_path, "unexpectedly still exists."
-    return 1
+    raise svntest.Failure(C_path + " unexpectedly still exists.")
 
   D_path = os.path.join(other_wc_dir, "A", "D", "exdir_A", "D")
   if (os.path.exists(D_path)):
-    print D_path, "unexpectedly still exists."
-    return 1
+    raise svntest.Failure(D_path + " unexpectedly still exists.")
 
   G_path = os.path.join(other_wc_dir, "A", "D", "exdir_A", "G")
   if (not os.path.exists(G_path)):
-    print "Probing for", G_path, "failed."
-    return 1
+    raise svntest.Failure("Probing for " + G_path + " failed.")
 
   H_path = os.path.join(other_wc_dir, "A", "D", "exdir_A", "H")
   if (not os.path.exists(H_path)):
-    print "Probing for", H_path, "failed."
-    return 1
+    raise svntest.Failure("Probing for " + H_path + " failed.")
 
-  return 0
-
-
-
 #----------------------------------------------------------------------
 
 def update_change_pristine_external(sbox):
   "update change to an unmodified external module"
 
-  if externals_test_setup(sbox):
-    return 1
-
+  externals_test_setup(sbox)
   wc_dir         = sbox.wc_dir
+  
   other_wc_dir   = sbox.add_wc_path('other')
   repo_dir       = sbox.repo_dir
   repo_url       = sbox.repo_url
   other_repo_url = repo_url + ".other"
 
   # Checkout two working copies.
-  out_lines, err_lines = svntest.main.run_svn \
-                         (None, 'checkout',
-                          '--username', svntest.main.wc_author,
-                          '--password', svntest.main.wc_passwd,
-                          repo_url, wc_dir)
-  if err_lines: return 1
+  svntest.actions.run_and_verify_svn( "", None, [],
+                                      'checkout',
+                                      '--username', svntest.main.wc_author,
+                                      '--password', svntest.main.wc_passwd,
+                                      repo_url, wc_dir)
 
-  out_lines, err_lines = svntest.main.run_svn \
-                         (None, 'checkout',
-                          '--username', svntest.main.wc_author,
-                          '--password', svntest.main.wc_passwd,
-                          repo_url, other_wc_dir)
-  if err_lines: return 1
+  svntest.actions.run_and_verify_svn( "", None, [],
+                                      'checkout',
+                                      '--username', svntest.main.wc_author,
+                                      '--password', svntest.main.wc_passwd,
+                                      repo_url, other_wc_dir)
 
   # Change the "x/y/z/blah" external on A/D to point to a different
   # URL.  Since no changes were made to the old checked-out external,
@@ -477,50 +433,41 @@
   change_external(os.path.join(wc_dir, "A/D"), new_externals_desc)
 
   # Update other working copy, see if get the right change.
-  out_lines, err_lines = svntest.main.run_svn (None, 'up', other_wc_dir)
-  if err_lines: return 1
+  svntest.actions.run_and_verify_svn( "", None, [], 'up', other_wc_dir)
 
   xyzb_path = os.path.join(other_wc_dir, "x", "y", "z", "blah")
 
   alpha_path = os.path.join(xyzb_path, "alpha")
   if (os.path.exists(alpha_path)):
-    print alpha_path, "unexpectedly still exists."
-    return 1
+    raise svntest.Failure(alpha_path + " unexpectedly still exists.")
 
   beta_path = os.path.join(xyzb_path, "beta")
   if (os.path.exists(beta_path)):
-    print beta_path, "unexpectedly still exists."
-    return 1
+    raise svntest.Failure(beta_path + " unexpectedly still exists.")
 
-  return 0
-
-
 def update_change_modified_external(sbox):
   "update changes to a modified external module"
 
-  if externals_test_setup(sbox):
-    return 1
-
+  externals_test_setup(sbox)
   wc_dir         = sbox.wc_dir
+
   other_wc_dir   = sbox.add_wc_path('other')
   repo_dir       = sbox.repo_dir
   repo_url       = sbox.repo_url
   other_repo_url = repo_url + ".other"
 
   # Checkout two working copies.
-  out_lines, err_lines = svntest.main.run_svn \
-                         (None, 'checkout',
-                          '--username', svntest.main.wc_author,
-                          '--password', svntest.main.wc_passwd,
-                          repo_url, wc_dir)
-  if err_lines: return 1
+  svntest.actions.run_and_verify_svn( "", None, [],
+                                      'checkout',
+                                      '--username', svntest.main.wc_author,
+                                      '--password', svntest.main.wc_passwd,
+                                      repo_url, wc_dir)
 
-  out_lines, err_lines = svntest.main.run_svn \
-                         (None, 'checkout',
-                          '--username', svntest.main.wc_author,
-                          '--password', svntest.main.wc_passwd,
-                          repo_url, other_wc_dir)
-  if err_lines: return 1
+  svntest.actions.run_and_verify_svn( "", None, [],
+                                      'checkout',
+                                      '--username', svntest.main.wc_author,
+                                      '--password', svntest.main.wc_passwd,
+                                      repo_url, other_wc_dir)
 
   # Make a couple of mods in the "x/y/z/blah/" external.
   alpha_path = os.path.join(other_wc_dir, "A", "D",
@@ -547,50 +494,41 @@
   change_external(os.path.join(wc_dir, "A/D"), new_externals_desc)
 
   # Update other working copy, see if get the right change.
-  out_lines, err_lines = svntest.main.run_svn (None, 'up', other_wc_dir)
-  if err_lines: return 1
+  svntest.actions.run_and_verify_svn( "", None, [], 'up', other_wc_dir)
 
   xyzb_path = os.path.join(other_wc_dir, "x", "y", "z", "blah")
 
   alpha_path = os.path.join(xyzb_path, "alpha")
   if (os.path.exists(alpha_path)):
-    print alpha_path, "unexpectedly still exists."
-    return 1
+    raise svntest.Failure(alpha_path + " unexpectedly still exists.")
 
   beta_path = os.path.join(xyzb_path, "beta")
   if (os.path.exists(beta_path)):
-    print beta_path, "unexpectedly still exists."
-    return 1
+    raise svntest.Failure(beta_path + " unexpectedly still exists.")
 
-  return 0
-
-
 def update_receive_change_under_external(sbox):
   "update changes under an external module"
 
-  if externals_test_setup(sbox):
-    return 1
-
+  externals_test_setup(sbox)
   wc_dir         = sbox.wc_dir
+  
   other_wc_dir   = sbox.add_wc_path('other')
   repo_dir       = sbox.repo_dir
   repo_url       = sbox.repo_url
   other_repo_url = repo_url + ".other"
 
   # Checkout two working copies.
-  out_lines, err_lines = svntest.main.run_svn \
-                         (None, 'checkout',
-                          '--username', svntest.main.wc_author,
-                          '--password', svntest.main.wc_passwd,
-                          repo_url, wc_dir)
-  if err_lines: return 1
+  svntest.actions.run_and_verify_svn( "", None, [],
+                                      'checkout',
+                                      '--username', svntest.main.wc_author,
+                                      '--password', svntest.main.wc_passwd,
+                                      repo_url, wc_dir)
 
-  out_lines, err_lines = svntest.main.run_svn \
-                         (None, 'checkout',
-                          '--username', svntest.main.wc_author,
-                          '--password', svntest.main.wc_passwd,
-                          other_repo_url, other_wc_dir)
-  if err_lines: return 1
+  svntest.actions.run_and_verify_svn( "", None, [],
+                                      'checkout',
+                                      '--username', svntest.main.wc_author,
+                                      '--password', svntest.main.wc_passwd,
+                                      other_repo_url, other_wc_dir)
 
   # Commit some modifications from the other_wc.
   other_gamma_path = os.path.join(other_wc_dir, 'A', 'D', 'gamma')
@@ -602,14 +540,12 @@
   expected_status = svntest.actions.get_virginal_state(other_wc_dir, 5)
   expected_status.tweak(repos_rev=6)
   expected_status.tweak('A/D/gamma', wc_rev=6)
-  if svntest.actions.run_and_verify_commit(other_wc_dir,
-                                           expected_output,
-                                           expected_status,
-                                           None, None, None, None, None,
-                                           other_wc_dir):
-    print "commit from other working copy failed"
-    return 1
-
+  svntest.actions.run_and_verify_commit(other_wc_dir,
+                                        expected_output,
+                                        expected_status,
+                                        None, None, None, None, None,
+                                        other_wc_dir)
+  
   # Now update the regular wc to see if we get the change.  Note that
   # none of the module *properties* in this wc have been changed; only
   # the source repository of the modules has received a change, and
@@ -618,8 +554,7 @@
   # The output's going to be all screwy because of the module
   # notifications, so don't bother parsing it, just run update
   # directly.
-  out_lines, err_lines = svntest.main.run_svn (None, 'up', wc_dir)
-  if err_lines: return 1
+  svntest.actions.run_and_verify_svn( "", None, [], 'up', wc_dir)
 
   external_gamma_path = os.path.join(wc_dir, 'A', 'D', 'exdir_A', 'D', 'gamma')
   fp = open(external_gamma_path, 'r')
@@ -627,8 +562,8 @@
   if not ((len(lines) == 2)
           and (lines[0] == "This is the file 'gamma'.\n")
           and (lines[1] == "New text in other gamma.")):
-    print "Unexpected contents for externally modified ", external_gamma_path
-    return 1
+    raise svntest.Failure("Unexpected contents for externally modified " +
+                          external_gamma_path)
   fp.close()
 
   # Commit more modifications
@@ -642,17 +577,14 @@
   expected_status.tweak(repos_rev=7)
   expected_status.tweak('A/D/gamma', wc_rev=6)
   expected_status.tweak('A/D/G/rho', wc_rev=7)
-  if svntest.actions.run_and_verify_commit(other_wc_dir,
-                                           expected_output,
-                                           expected_status,
-                                           None, None, None, None, None,
-                                           other_wc_dir):
-    print "Commit from other working copy failed"
-    return 1
+  svntest.actions.run_and_verify_commit(other_wc_dir,
+                                        expected_output,
+                                        expected_status,
+                                        None, None, None, None, None,
+                                        other_wc_dir)
 
-  out_lines, err_lines = svntest.main.run_svn (None, 'up',
-                                               os.path.join(wc_dir, "A", "B"))
-  if err_lines: return 1
+  svntest.actions.run_and_verify_svn( "", None, [],
+                                      'up', os.path.join(wc_dir, "A", "B"))
 
   external_rho_path = os.path.join(wc_dir, 'A', 'B', 'exdir_G', 'rho')
   fp = open(external_rho_path, 'r')
@@ -660,33 +592,28 @@
   if not ((len(lines) == 2)
           and (lines[0] == "This is the file 'rho'.\n")
           and (lines[1] == "New text in other rho.")):
-    print "Unexpected contents for externally modified ", external_rho_path
-    return 1
+    raise svntest.Failure("Unexpected contents for externally modified " +
+                          external_rho_path)
   fp.close()
 
-  return 0
-
 #----------------------------------------------------------------------
 
 def modify_and_update_receive_new_external(sbox):
   "commit and update additional externals"
 
-  if externals_test_setup(sbox):
-    return 1
-
+  externals_test_setup(sbox)
   wc_dir         = sbox.wc_dir
+
   repo_dir       = sbox.repo_dir
   repo_url       = sbox.repo_url
   other_repo_url = repo_url + ".other"
 
   # Checkout a working copy
-  out_lines, err_lines = svntest.main.run_svn(None, 'checkout',
-                                              '--username',
-                                              svntest.main.wc_author,
-                                              '--password',
-                                              svntest.main.wc_passwd,
-                                              repo_url, wc_dir)
-  if err_lines: return 1
+  svntest.actions.run_and_verify_svn( "", None, [],
+                                      'checkout',
+                                      '--username', svntest.main.wc_author,
+                                      '--password', svntest.main.wc_passwd,
+                                      repo_url, wc_dir)
 
   # Add one more external item
   B_path = os.path.join(wc_dir, "A/B")
@@ -697,9 +624,9 @@
 
   tmp_f = os.tempnam()
   svntest.main.file_append(tmp_f, externals_desc)
-  out_lines, err_lines = svntest.main.run_svn(None, 'pset', '-F', tmp_f,
-                                              'svn:externals', B_path)
-  if err_lines: return 1
+  svntest.actions.run_and_verify_svn( "", None, [],
+                                      'pset', '-F', tmp_f,
+                                      'svn:externals', B_path)
   os.remove(tmp_f)
 
   # Now cd into A/B and try updating
@@ -707,50 +634,43 @@
   os.chdir(B_path)
   try:
     # Once upon a time there was a core-dump here
-    out_lines, err_lines = svntest.main.run_svn (None, 'up')
-    if err_lines or not out_lines:
-      print "update failed"
-      return 1
+    
+    svntest.actions.run_and_verify_svn( "update failed",
+                                        SVNAnyOutput, [], 'up' )
 
   finally:
     os.chdir(was_cwd)
 
   exdir_Z_path = os.path.join(B_path, "exdir_Z")
   if not os.path.exists(exdir_Z_path):
-    print "Probing for", exdir_Z_path, "failed."
-    return 1
+    raise svntest.Failure("Probing for " + exdir_Z_path + " failed.")
 
 #----------------------------------------------------------------------
 
 def disallow_parent_directory_reference(sbox):
   "error if external target dir refers to '..'"
-  if sbox.build():
-    return 1
-
+  sbox.build()
   wc_dir         = sbox.wc_dir
+
   wc_other       = sbox.wc_dir + '.other'
   repo_dir       = sbox.repo_dir
   repo_url       = sbox.repo_url
 
   # Checkout the 'other' working copy, at revision 1.
   svntest.main.safe_rmtree(wc_other)
-  out_lines, err_lines = svntest.main.run_svn(None, 'checkout',
-                                              '--username',
-                                              svntest.main.wc_author,
-                                              '--password',
-                                              svntest.main.wc_passwd,
-                                              repo_url, wc_other)
-  if err_lines:
-    return 1
+  svntest.actions.run_and_verify_svn( "", None, [],
+                                      'checkout',
+                                      '--username', svntest.main.wc_author,
+                                      '--password', svntest.main.wc_passwd,
+                                      repo_url, wc_other)
 
   # Set up some illegal externals in the original WC.
   def set_externals_for_path(path, val, dir):
     tmp_f = os.tempnam(dir, 'tmp')
     svntest.main.file_append(tmp_f, val)
-    out_lines, err_lines = svntest.main.run_svn \
-                           (None, 'pset', '-F', tmp_f, 'svn:externals', path)
-    if err_lines:
-      return 1
+    svntest.actions.run_and_verify_svn( "", None, [],
+                                        'pset', '-F', tmp_f,
+                                        'svn:externals', path)
     os.remove(tmp_f)
 
   B_path = os.path.join(wc_dir, 'A', 'B')
@@ -764,10 +684,8 @@
   set_externals_for_path(G_path, externals_2, wc_dir)
   set_externals_for_path(H_path, externals_3, wc_dir)
 
-  out_lines, err_lines = svntest.main.run_svn \
-                         (None, 'ci', '-m', 'log msg', '--quiet', wc_dir)
-  if (err_lines):
-    return 1
+  svntest.actions.run_and_verify_svn( "", None, [],
+                                      'ci', '-m', 'log msg', '--quiet', wc_dir)
 
   # Update the corresponding parts of the  other working copy,
   # expecting errors.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: [PATCH] Re: Code cleanup: Harmonized tests (Take 2)

Posted by Erik Hülsmann <e....@gmx.net>.
Ok, found out my error with the commit_tests.py test 15. No problem anymore. I decided not to post the patch until someone says to go ahead: I didn't expect the mail to become 222kB.

bye,

Erik.


>Sorry, meant to send the message below to the list too. Was accedentally only sent to cmpilato and Fitz
>
>bye,
>
>
>Erik
>
>
>------- Original message -------
>Hi!
>
>
>Ok, I sat down and started rewriting svntest.main.svn_run to svntest.actions.run_and_verify_svn calls. I left alone those instances where the context does not do any output-checks.
>
>The code is not completely finished: there is one tests which keeps failing. I have not been able to find out why yet: 
> 
>XPASS: commit_tests.py 15: hook testing
>
>Looking at the code I don't understand why commit_tests.py 15 should be marked XFail.
>
>I thought I could submit this before the final state of the patch, because it would take quite some time to review it anyway. And I would have some time to fix commit_tests 15 before the patch is accepted anyway.
>
>One last remark cmpilato wrote he would have liked to have the space changes as a separate patch. I decided that if you all don't mind too much, I could make a separate patch doing the rest of the space changes, but leaving the current patch as-is. Since it would take so much time to undo the space-change stuff...
>
>BTW: the patch statistics have become a bit more aggressive than they were:
>Total number of lines:   6100
>Number of lines added:   1236
>Number of lines removed: 1819
>
>
>Let me know what you think.
>
>
>bye,
>
>Erik.
>
>
>Log:
>[[[
>Rewrite the test suite to new philosophy where
>exceptions are raised to pass errors back to
>the caller.
>
>* subversion/tests/clients/cmdline/basic_tests.py
>* subversion/tests/clients/cmdline/commit_tests.py
>* subversion/tests/clients/cmdline/copy_tests.py
>* subversion/tests/clients/cmdline/diff_tests.py
>* subversion/tests/clients/cmdline/export_tests.py
>* subversion/tests/clients/cmdline/externals_tests.py
>* subversion/tests/clients/cmdline/log_tests.py
>* subversion/tests/clients/cmdline/merge_tests.py
>* subversion/tests/clients/cmdline/prop_tests.py
>* subversion/tests/clients/cmdline/schedule_tests.py
>* subversion/tests/clients/cmdline/stat_tests.py
>* subversion/tests/clients/cmdline/svnadmin_tests.py
>* subversion/tests/clients/cmdline/svnlook_tests.py
>* subversion/tests/clients/cmdline/trans_tests.py
>* subversion/tests/clients/cmdline/update_tests.py
>* subversion/tests/clients/cmdline/utf8_tests.py
>
>
>]]]
>
>
>>> "B. W. Fitzpatrick" <fi...@red-bean.com> writes:
>>> 
>>> > > > Last week I submitted a little change to the svnversion test. Before
>>> > > > the test was found acceptable, I had to rewrite it so that it was
>>> > > > written as a 'new style' test: one which uses the Python exception
>>> > > > handling instead of the return 0 / return 1 structure.
>>> > > 
>>> > > I'm reviewing this now.
>>> > 
>>> > I have a few comments about the patch:
>>> > 
>>> > 1. Yay!
>>> > 
>>> > 2. I'd like to see the whitespace changes in a separate patch, but
>>> >    that's not really A Big Deal.
>>> > 
>>> > 3. I found a couple of places where you're doing this:
>>> > 
>>> >   stat_output, err_output = svntest.main.run_svn(None, 'stat', '-vN')
>>> >   if err_output:
>>> >     raise svntest.Failure       
>>> > 
>>> > I'd like to see you use
>>> > 
>>> > run_and_verify_svn(message, expected_stdout, expected_stderr, *varargs):
>>> > 
>>> > in these cases.  It integrates the checking for different outputs on
>>> > stderr and stdout.  I've already converted a bunch of the tests to use
>>> > it, so there are plenty of examples.
>>> 
>>> These fixes, plus addressing the "raise 1" oopsy, plus my sudden lack
>>> of immediate time to review and apply the patch are good reasons to
>>> suggest that the patch be resubmitted with the proper fixes in place.
>>> At that later date, perhaps I'll have more review/application time to
>>> offer.
>>
>>OK.  Erik, if you want to make those changes and resubmit, I'll do my
>>best to review ASAP, but I can't guarantee anything this week cause
>>I'm swamperoonied.
>>
>>-Fitz
>>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org