You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2011/02/05 03:17:33 UTC

svn commit: r1067380 [3/3] - in /subversion/trunk/subversion/tests/cmdline: ./ svntest/

Modified: subversion/trunk/subversion/tests/cmdline/stat_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/stat_tests.py?rev=1067380&r1=1067379&r2=1067380&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/stat_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/stat_tests.py Sat Feb  5 02:17:32 2011
@@ -35,9 +35,12 @@ import svntest
 from svntest import wc
 
 # (abbreviation)
-Skip = svntest.testcase.Skip
-SkipUnless = svntest.testcase.SkipUnless
-XFail = svntest.testcase.XFail
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 Item = svntest.wc.StateItem
 UnorderedOutput = svntest.verify.UnorderedOutput
 
@@ -65,7 +68,7 @@ def status_unversioned_file_in_current_d
 
 #----------------------------------------------------------------------
 # Regression for issue #590
-
+@Issue(590)
 def status_update_with_nested_adds(sbox):
   "run 'status -u' when nested additions are pending"
 
@@ -132,7 +135,7 @@ def status_shows_all_in_current_dir(sbox
 
 
 #----------------------------------------------------------------------
-
+@Issue(2127)
 def status_missing_file(sbox):
   "status with a versioned file missing"
 
@@ -269,7 +272,7 @@ def status_type_change(sbox):
                                      [], 'status')
 
 #----------------------------------------------------------------------
-
+@SkipUnless(svntest.main.is_posix_os)
 def status_type_change_to_symlink(sbox):
   "status on versioned items replaced by symlinks"
 
@@ -583,6 +586,7 @@ def status_uninvited_parent_directory(sb
     if re.match("\\s+\\*.*\.other/?$", line):
       raise svntest.Failure
 
+@Issue(1289)
 def status_on_forward_deletion(sbox):
   "status -u on working copy deleted in HEAD"
   # See issue #1289.
@@ -776,6 +780,7 @@ use-commit-times = yes
 
 #----------------------------------------------------------------------
 
+@Issues([1617,2030])
 def status_on_unversioned_dotdot(sbox):
   "status on '..' where '..' is not versioned"
   # See issue #1617 (and #2030).
@@ -798,6 +803,7 @@ def status_on_unversioned_dotdot(sbox):
 
 #----------------------------------------------------------------------
 
+@Issue(2122)
 def status_on_partially_nonrecursive_wc(sbox):
   "status -u in partially non-recursive wc"
   # Based on issue #2122.
@@ -960,8 +966,9 @@ def status_ignored_dir(sbox):
 
 #----------------------------------------------------------------------
 
+@Issue(2030)
 def status_unversioned_dir(sbox):
-  "status on unversioned dir (issue 2030)"
+  "status on unversioned dir"
   sbox.build(read_only = True)
   dir = sbox.repo_dir
   expected_err = "svn: warning: W155007: '.*(/|\\\\)" + os.path.basename(dir) + \
@@ -1128,6 +1135,7 @@ def inconsistent_eol(sbox):
 
 #----------------------------------------------------------------------
 # Test for issue #2533
+@Issue(2533)
 def status_update_with_incoming_props(sbox):
   "run 'status -u' variations w/ incoming propchanges"
 
@@ -1341,6 +1349,7 @@ def status_update_verbose_with_incoming_
 
 #----------------------------------------------------------------------
 # Test for issue #2468
+@Issue(2468)
 def status_nonrecursive_update(sbox):
   "run 'status -uN' with incoming changes"
 
@@ -1559,6 +1568,7 @@ def status_depth_update(sbox):
 
 #----------------------------------------------------------------------
 # Test for issue #2420
+@Issue(2420)
 def status_dash_u_deleted_directories(sbox):
   "run 'status -u' with locally deleted directories"
 
@@ -1626,6 +1636,7 @@ def status_dash_u_deleted_directories(sb
 
 # Test for issue #2737: show obstructed status for versioned directories
 # replaced by local directories.
+@Issue(2737)
 def status_dash_u_type_change(sbox):
   "status -u on versioned items whose type changed"
 
@@ -1782,6 +1793,8 @@ def status_with_tree_conflicts(sbox):
 
 #----------------------------------------------------------------------
 # Regression for issue #3742
+@XFail()
+@Issue(3742)
 def status_nested_wc_old_format(sbox):
   "status on wc with nested old-format wc"
 
@@ -1805,8 +1818,7 @@ test_list = [ None,
               status_shows_all_in_current_dir,
               status_missing_file,
               status_type_change,
-              SkipUnless(status_type_change_to_symlink,
-                         svntest.main.is_posix_os),
+              status_type_change_to_symlink,
               status_with_new_files_pending,
               status_for_unignored_file,
               status_for_nonexistent_file,
@@ -1832,7 +1844,7 @@ test_list = [ None,
               status_depth_update,
               status_dash_u_type_change,
               status_with_tree_conflicts,
-              XFail(status_nested_wc_old_format, issues=3742),
+              status_nested_wc_old_format,
              ]
 
 if __name__ == '__main__':

Modified: subversion/trunk/subversion/tests/cmdline/svnadmin_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svnadmin_tests.py?rev=1067380&r1=1067379&r2=1067380&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/svnadmin_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/svnadmin_tests.py Sat Feb  5 02:17:32 2011
@@ -36,9 +36,12 @@ from svntest.verify import SVNUnexpected
 from svntest.main import SVN_PROP_MERGEINFO
 
 # (abbreviation)
-Skip = svntest.testcase.Skip
-SkipUnless = svntest.testcase.SkipUnless
-XFail = svntest.testcase.XFail
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 Item = svntest.wc.StateItem
 
 
@@ -248,8 +251,9 @@ def inconsistent_headers(sbox):
 #----------------------------------------------------------------------
 # Test for issue #2729: Datestamp-less revisions in dump streams do
 # not remain so after load
+@Issue(2729)
 def empty_date(sbox):
-  "preserve date-less revisions in load (issue #2729)"
+  "preserve date-less revisions in load"
 
   test_create(sbox)
 
@@ -477,6 +481,7 @@ def fsfs_file(repo_dir, kind, rev):
     return os.path.join(repo_dir, 'db', kind, rev)
 
 
+@SkipUnless(svntest.main.is_fs_type_fsfs)
 def verify_incremental_fsfs(sbox):
   """svnadmin verify detects corruption dump can't"""
 
@@ -612,6 +617,7 @@ _0.0.t1-1 add false false /A/B/E/bravo
 
 #----------------------------------------------------------------------
 
+@SkipUnless(svntest.main.is_fs_type_fsfs)
 def recover_fsfs(sbox):
   "recover a repository (FSFS only)"
   sbox.build()
@@ -690,7 +696,7 @@ def recover_fsfs(sbox):
     'db/current', expected_current_contents, actual_current_contents)
 
 #----------------------------------------------------------------------
-
+@Issue(2983)
 def load_with_parent_dir(sbox):
   "'svnadmin load --parent-dir' reparents mergeinfo"
 
@@ -787,7 +793,7 @@ def set_uuid(sbox):
     raise svntest.Failure
 
 #----------------------------------------------------------------------
-
+@Issue(3020)
 def reflect_dropped_renumbered_revs(sbox):
   "reflect dropped renumbered revs in svn:mergeinfo"
 
@@ -824,6 +830,8 @@ def reflect_dropped_renumbered_revs(sbox
 
 #----------------------------------------------------------------------
 
+@SkipUnless(svntest.main.is_fs_type_fsfs)
+@Issue(2992)
 def fsfs_recover_handle_missing_revs_or_revprops_file(sbox):
   """fsfs recovery checks missing revs / revprops files"""
   # Set up a repository containing the greek tree.
@@ -916,6 +924,7 @@ def create_in_repo_subdir(sbox):
   # No SVNRepositoryCreateFailure raised?
   raise svntest.Failure
 
+@SkipUnless(svntest.main.is_fs_type_fsfs)
 def verify_with_invalid_revprops(sbox):
   "svnadmin verify detects invalid revprops file"
 
@@ -968,6 +977,7 @@ def verify_with_invalid_revprops(sbox):
 #      each of them to 'TARGET-REPOS'.
 #
 # See http://subversion.tigris.org/issues/show_bug.cgi?id=3020#desc13
+@Issue(3020)
 def dont_drop_valid_mergeinfo_during_incremental_loads(sbox):
   "don't filter mergeinfo revs from incremental dump"
 
@@ -1168,6 +1178,8 @@ def dont_drop_valid_mergeinfo_during_inc
                                      sbox.repo_url)
 
 
+@SkipUnless(svntest.main.is_posix_os)
+@Issue(2591)
 def hotcopy_symlink(sbox):
   "'svnadmin hotcopy' replicates symlink"
 
@@ -1306,18 +1318,16 @@ test_list = [ None,
               hotcopy_format,
               setrevprop,
               verify_windows_paths_in_repos,
-              SkipUnless(verify_incremental_fsfs, svntest.main.is_fs_type_fsfs),
-              SkipUnless(recover_fsfs, svntest.main.is_fs_type_fsfs),
+              verify_incremental_fsfs,
+              recover_fsfs,
               load_with_parent_dir,
               set_uuid,
               reflect_dropped_renumbered_revs,
-              SkipUnless(fsfs_recover_handle_missing_revs_or_revprops_file,
-                         svntest.main.is_fs_type_fsfs),
+              fsfs_recover_handle_missing_revs_or_revprops_file,
               create_in_repo_subdir,
-              SkipUnless(verify_with_invalid_revprops,
-                         svntest.main.is_fs_type_fsfs),
+              verify_with_invalid_revprops,
               dont_drop_valid_mergeinfo_during_incremental_loads,
-              SkipUnless(hotcopy_symlink, svntest.main.is_posix_os),
+              hotcopy_symlink,
               load_bad_props,
              ]
 

Modified: subversion/trunk/subversion/tests/cmdline/svndumpfilter_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svndumpfilter_tests.py?rev=1067380&r1=1067379&r2=1067380&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/svndumpfilter_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/svndumpfilter_tests.py Sat Feb  5 02:17:32 2011
@@ -37,9 +37,12 @@ from svntest.verify import SVNExpectedSt
 from svnadmin_tests import load_and_verify_dumpstream, test_create
 
 # (abbreviation)
-Skip = svntest.testcase.Skip
-SkipUnless = svntest.testcase.SkipUnless
-XFail = svntest.testcase.XFail
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 Item = svntest.wc.StateItem
 
 
@@ -80,7 +83,7 @@ def filter_and_return_output(dump, bufsi
 ######################################################################
 # Tests
 
-
+@Issue(2982)
 def reflect_dropped_renumbered_revs(sbox):
   "reflect dropped renumbered revs in svn:mergeinfo"
 
@@ -132,6 +135,7 @@ def reflect_dropped_renumbered_revs(sbox
                                      'propget', 'svn:mergeinfo', '-R',
                                      sbox.repo_url)
 
+@Issue(3181)
 def svndumpfilter_loses_mergeinfo(sbox):
   "svndumpfilter loses mergeinfo"
   #svndumpfilter loses mergeinfo if invoked without --renumber-revs
@@ -214,6 +218,7 @@ def _simple_dumpfilter_test(sbox, dumpfi
                                         expected_status)
 
 
+@Issue(2697)
 def dumpfilter_with_targets(sbox):
   "svndumpfilter --targets blah"
   ## See http://subversion.tigris.org/issues/show_bug.cgi?id=2697. ##
@@ -257,6 +262,7 @@ def dumpfilter_with_patterns(sbox):
 # Specifically, test that svndumpfilter, when used with the
 # --skip-missing-merge-sources option, removes mergeinfo that refers to
 # revisions that are older than the oldest revision in the dump stream.
+@Issue(3020)
 def filter_mergeinfo_revs_outside_of_dump_stream(sbox):
   "filter mergeinfo revs outside of dump stream"
 
@@ -491,6 +497,7 @@ def filter_mergeinfo_revs_outside_of_dum
 # --renumber-revs option, can create a dump with non-contiguous revisions.
 # Such dumps should not interfere with the correct remapping of mergeinfo
 # source revisions.
+@Issue(3020)
 def dropped_but_not_renumbered_empty_revs(sbox):
   "mergeinfo maps correctly when dropping revs"
 

Modified: subversion/trunk/subversion/tests/cmdline/svnlook_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svnlook_tests.py?rev=1067380&r1=1067379&r2=1067380&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/svnlook_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/svnlook_tests.py Sat Feb  5 02:17:32 2011
@@ -32,8 +32,12 @@ import svntest
 
 
 # (abbreviation)
-Skip = svntest.testcase.Skip
-XFail = svntest.testcase.XFail
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 Item = svntest.wc.StateItem
 
 
@@ -185,6 +189,7 @@ def test_misc(sbox):
 
 #----------------------------------------------------------------------
 # Issue 1089
+@Issue(1089)
 def delete_file_in_moved_dir(sbox):
   "delete file in moved dir"
 
@@ -239,6 +244,7 @@ def delete_file_in_moved_dir(sbox):
 
 #----------------------------------------------------------------------
 # Issue 1241
+@Issue(1241)
 def test_print_property_diffs(sbox):
   "test the printing of property diffs"
 
@@ -390,6 +396,7 @@ def changed_copy_info(sbox):
 
 #----------------------------------------------------------------------
 # Issue 2663
+@Issue(2663)
 def tree_non_recursive(sbox):
   "test 'svnlook tree --non-recursive'"
 

Modified: subversion/trunk/subversion/tests/cmdline/svnrdump_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svnrdump_tests.py?rev=1067380&r1=1067379&r2=1067380&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/svnrdump_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/svnrdump_tests.py Sat Feb  5 02:17:32 2011
@@ -36,11 +36,13 @@ from svntest.main import write_restricti
 from svntest.main import server_has_partial_replay
 
 # (abbreviation)
-Skip = svntest.testcase.Skip
-SkipUnless = svntest.testcase.SkipUnless
-XFail = svntest.testcase.XFail
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 Item = svntest.wc.StateItem
-Wimp = svntest.testcase.Wimp
 
 ## Mismatched headers during dumping operation
 # Text-copy-source-* and *-sha1 headers are not provided by the RA

Modified: subversion/trunk/subversion/tests/cmdline/svnsync_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svnsync_tests.py?rev=1067380&r1=1067379&r2=1067380&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/svnsync_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/svnsync_tests.py Sat Feb  5 02:17:32 2011
@@ -35,11 +35,13 @@ from svntest.main import write_restricti
 from svntest.main import server_has_partial_replay
 
 # (abbreviation)
-Skip = svntest.testcase.Skip
-SkipUnless = svntest.testcase.SkipUnless
-XFail = svntest.testcase.XFail
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 Item = svntest.wc.StateItem
-Wimp = svntest.testcase.Wimp
 
 ######################################################################
 # Helper routines
@@ -338,7 +340,7 @@ def detect_meddling(sbox):
            ".*Destination HEAD \\(2\\) is not the last merged revision \\(1\\).*")
 
 #----------------------------------------------------------------------
-
+@Skip(svntest.main.is_ra_type_file)
 def basic_authz(sbox):
   "verify that unreadable content is not synced"
 
@@ -374,7 +376,7 @@ def basic_authz(sbox):
                                      lambda_url)
 
 #----------------------------------------------------------------------
-
+@Skip(svntest.main.is_ra_type_file)
 def copy_from_unreadable_dir(sbox):
   "verify that copies from unreadable dirs work"
 
@@ -493,6 +495,8 @@ def copy_from_unreadable_dir(sbox):
                                      dest_sbox.repo_url + '/A/P')
 
 # Issue 2705.
+@Issue(2705)
+@Skip(svntest.main.is_ra_type_file)
 def copy_with_mod_from_unreadable_dir(sbox):
   "verify copies with mods from unreadable dirs"
 
@@ -611,6 +615,8 @@ def copy_with_mod_from_unreadable_dir(sb
                                      dest_sbox.repo_url + '/A/P/lambda')
 
 # Issue 2705.
+@Issue(2705)
+@Skip(svntest.main.is_ra_type_file)
 def copy_with_mod_from_unreadable_dir_and_copy(sbox):
   "verify copies with mods from unreadable dirs +copy"
 
@@ -721,17 +727,20 @@ def copy_revprops(sbox):
   "test copying revprops other than svn:*"
   run_test(sbox, "revprops.dump")
 
+@SkipUnless(server_has_partial_replay)
 def only_trunk(sbox):
   "test syncing subdirectories"
   run_test(sbox, "svnsync-trunk-only.dump", "/trunk",
            "svnsync-trunk-only.expected.dump")
 
+@SkipUnless(server_has_partial_replay)
 def only_trunk_A_with_changes(sbox):
   "test syncing subdirectories with changes on root"
   run_test(sbox, "svnsync-trunk-A-changes.dump", "/trunk/A",
            "svnsync-trunk-A-changes.expected.dump")
 
 # test for issue #2904
+@Issue(2904)
 def move_and_modify_in_the_same_revision(sbox):
   "test move parent and modify child file in same rev"
   run_test(sbox, "svnsync-move-and-modify.dump")
@@ -791,6 +800,7 @@ def delete_svn_props(sbox):
   "copy with svn:prop deletions"
   run_test(sbox, "delete-svn-props.dump")
 
+@Issue(3438)
 def commit_a_copy_of_root(sbox):
   "commit a copy of root causes sync to fail"
   #Testcase for issue 3438.
@@ -832,12 +842,14 @@ def commit_a_copy_of_root(sbox):
 # svnmucc.exe -mm cp head %ROOT_URL%/trunk/A %ROOT_URL%/trunk/H/Z
 #                 rm %ROOT_URL%/trunk/H/Z/B
 #                 mkdir %ROOT_URL%/trunk/H/Z/B
+@Issue(3641)
 def descend_into_replace(sbox):
   "descending into replaced dir looks in src"
   run_test(sbox, "descend-into-replace.dump", subdir='/trunk/H',
            exp_dump_file_name = "descend-into-replace.expected.dump")
 
 # issue #3728
+@Issue(3728)
 def delete_revprops(sbox):
   "copy-revprops with removals"
   svnsync_tests_dir = os.path.join(os.path.dirname(sys.argv[0]),
@@ -887,19 +899,15 @@ test_list = [ None,
               file_dir_file,
               copy_parent_modify_prop,
               detect_meddling,
-              Skip(basic_authz, svntest.main.is_ra_type_file),
-              Skip(copy_from_unreadable_dir, svntest.main.is_ra_type_file),
-              Skip(copy_with_mod_from_unreadable_dir,
-                   svntest.main.is_ra_type_file),
-              Skip(copy_with_mod_from_unreadable_dir_and_copy,
-                   svntest.main.is_ra_type_file),
+              basic_authz,
+              copy_from_unreadable_dir,
+              copy_with_mod_from_unreadable_dir,
+              copy_with_mod_from_unreadable_dir_and_copy,
               url_encoding,
               no_author,
               copy_revprops,
-              SkipUnless(only_trunk,
-                         server_has_partial_replay),
-              SkipUnless(only_trunk_A_with_changes,
-                         server_has_partial_replay),
+              only_trunk,
+              only_trunk_A_with_changes,
               move_and_modify_in_the_same_revision,
               info_synchronized,
               info_not_synchronized,

Modified: subversion/trunk/subversion/tests/cmdline/svntest/testcase.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svntest/testcase.py?rev=1067380&r1=1067379&r2=1067380&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/svntest/testcase.py (original)
+++ subversion/trunk/subversion/tests/cmdline/svntest/testcase.py Sat Feb  5 02:17:32 2011
@@ -28,7 +28,7 @@ import os, types, sys
 import svntest
 
 # if somebody does a "from testcase import *", they only get these names
-__all__ = ['XFail', 'Wimp', 'Skip', 'SkipUnless']
+__all__ = ['_XFail', '_Wimp', '_Skip', '_SkipUnless']
 
 RESULT_OK = 'ok'
 RESULT_FAIL = 'fail'
@@ -182,7 +182,7 @@ class FunctionTestCase(TestCase):
     return self.func(sandbox)
 
 
-class XFail(TestCase):
+class _XFail(TestCase):
   """A test that is expected to fail, if its condition is true."""
 
   _result_map = {
@@ -214,7 +214,7 @@ class XFail(TestCase):
     return self._delegate.list_mode() or 'XFAIL'
 
 
-class Wimp(XFail):
+class _Wimp(_XFail):
   """Like XFail, but indicates a work-in-progress: an unexpected pass
   is not considered a test failure."""
 
@@ -225,13 +225,13 @@ class Wimp(XFail):
     }
 
   def __init__(self, wip, test_case, cond_func=lambda: True):
-    XFail.__init__(self, test_case, cond_func, wip)
+    _XFail.__init__(self, test_case, cond_func, wip)
 
 
-class Skip(TestCase):
+class _Skip(TestCase):
   """A test that will be skipped if its conditional is true."""
 
-  def __init__(self, test_case, cond_func=lambda: True):
+  def __init__(self, test_case, cond_func=lambda: True, issues=None):
     """Create a Skip instance based on TEST_CASE.  COND_FUNC is a
     callable that is evaluated at test run time and should return a
     boolean value.  If COND_FUNC returns true, then TEST_CASE is
@@ -241,7 +241,8 @@ class Skip(TestCase):
     __init__ time (like the fact that we're running over a
     particular RA layer)."""
 
-    TestCase.__init__(self, create_test_case(test_case), cond_func)
+    TestCase.__init__(self, create_test_case(test_case), cond_func,
+                      issues=issues)
 
   def list_mode(self):
     if self._cond_func():
@@ -259,11 +260,11 @@ class Skip(TestCase):
     return self._delegate.run(sandbox)
 
 
-class SkipUnless(Skip):
+class _SkipUnless(_Skip):
   """A test that will be skipped if its conditional is false."""
 
   def __init__(self, test_case, cond_func):
-    Skip.__init__(self, test_case, lambda c=cond_func: not c())
+    _Skip.__init__(self, test_case, lambda c=cond_func: not c())
 
 
 def create_test_case(func, issues=None):
@@ -274,30 +275,39 @@ def create_test_case(func, issues=None):
 
 
 # Various decorators to make declaring tests as such simpler
-def XFail_deco(func):
-  if isinstance(func, TestCase):
-    return XFail(func, issues=func.issues)
-  else:
-    return XFail(func)
+def XFail_deco(cond_func = lambda: True):
+  def _second(func):
+    if isinstance(func, TestCase):
+      return _XFail(func, cond_func, issues=func.issues)
+    else:
+      return _XFail(func, cond_func)
+
+  return _second
 
 
 def Wimp_deco(func):
   if isinstance(func, TestCase):
-    return Wimp(func, issues=func.issues)
+    return _Wimp(func, issues=func.issues)
   else:
-    return Wimp(func)
+    return _Wimp(func)
 
 
-def Skip_deco(cond_func):
+def Skip_deco(cond_func = lambda: True):
   def _second(func):
-    return Skip(func, cond_func)
+    if isinstance(func, TestCase):
+      return _Skip(func, cond_func, issues=func.issues)
+    else:
+      return _Skip(func, cond_func)
 
   return _second
 
 
 def SkipUnless_deco(cond_func):
   def _second(func):
-    return Skip(func, lambda c=cond_func: not c())
+    if isinstance(func, TestCase):
+      return _Skip(func, lambda c=cond_func: not c(), issues=func.issues)
+    else:
+      return _Skip(func, lambda c=cond_func: not c())
 
   return _second
 

Modified: subversion/trunk/subversion/tests/cmdline/svnversion_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svnversion_tests.py?rev=1067380&r1=1067379&r2=1067380&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/svnversion_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/svnversion_tests.py Sat Feb  5 02:17:32 2011
@@ -33,8 +33,12 @@ import svntest
 from svntest import wc
 
 # (abbreviation)
-Skip = svntest.testcase.Skip
-XFail = svntest.testcase.XFail
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 Item = svntest.wc.StateItem
 
 #----------------------------------------------------------------------
@@ -207,6 +211,7 @@ def ignore_externals(sbox):
 #----------------------------------------------------------------------
 
 # Test for issue #3461 'excluded subtrees are not detected by svnversion'
+@Issue(3461)
 def svnversion_with_excluded_subtrees(sbox):
   "test 'svnversion' with excluded subtrees"
   sbox.build()

Modified: subversion/trunk/subversion/tests/cmdline/switch_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/switch_tests.py?rev=1067380&r1=1067379&r2=1067380&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/switch_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/switch_tests.py Sat Feb  5 02:17:32 2011
@@ -32,10 +32,12 @@ import svntest
 from svntest import verify, actions, main
 
 # (abbreviation)
-Skip = svntest.testcase.Skip
-SkipUnless = svntest.testcase.SkipUnless
-XFail = svntest.testcase.XFail
-Wimp = svntest.testcase.Wimp
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 Item = svntest.wc.StateItem
 
 from svntest.main import SVN_PROP_MERGEINFO, server_has_mergeinfo
@@ -673,7 +675,8 @@ def delete_subdir(sbox):
 
 #----------------------------------------------------------------------
 # Issue 1532: Switch a file to a dir: can't switch it back to the file
-
+@XFail()
+@Issue(1532)
 def file_dir_file(sbox):
   "switch a file to a dir and back to the file"
   sbox.build(read_only = True)
@@ -908,7 +911,7 @@ def bad_intermediate_urls(sbox):
 #----------------------------------------------------------------------
 # Regression test for issue #1825: failed switch may corrupt
 # working copy
-
+@Issue(1825)
 def obstructed_switch(sbox):
   "obstructed switch"
   #svntest.factory.make(sbox, """svn cp -m msgcopy url/A/B/E url/A/B/Esave
@@ -1048,6 +1051,7 @@ def commit_mods_below_switch(sbox):
                                         expected_output, expected_status,
                                         None, C_path, D_path)
 
+@Issue(2380)
 def relocate_beyond_repos_root(sbox):
   "relocate with prefixes longer than repo root"
   sbox.build(read_only=True, create_wc=False)
@@ -1701,7 +1705,7 @@ def switch_scheduled_add(sbox):
                                      'switch', switch_url, file_path)
 
 #----------------------------------------------------------------------
-
+@SkipUnless(server_has_mergeinfo)
 def mergeinfo_switch_elision(sbox):
   "mergeinfo does not elide post switch"
 
@@ -2570,6 +2574,7 @@ def tree_conflicts_on_switch_1_1(sbox):
                         expected_info = expected_info) ] )
 
 
+@Issue(3334)
 def tree_conflicts_on_switch_1_2(sbox):
   "tree conflicts 1.2: tree del, leaf del on switch"
 
@@ -2668,6 +2673,7 @@ def tree_conflicts_on_switch_1_2(sbox):
                         expected_info = expected_info) ] )
 
 
+@Issue(3334)
 def tree_conflicts_on_switch_2_1(sbox):
   "tree conflicts 2.1: leaf edit, tree del on switch"
 
@@ -3024,6 +3030,7 @@ def relocate_with_switched_children(sbox
     expected_info = { 'URL' : pattern }
     svntest.actions.run_and_verify_info([expected_info], path)
 
+@XFail()
 def copy_with_switched_subdir(sbox):
   "copy directory with switched subdir"
   sbox.build()
@@ -3102,6 +3109,7 @@ def copy_with_switched_subdir(sbox):
   svntest.actions.run_and_verify_status(wc_dir, state)
 
 ### regression test for issue #3597
+@Issue(3597)
 def relocate_with_relative_externals(sbox):
   "relocate a directory containing relative externals"
 
@@ -3146,7 +3154,7 @@ test_list = [ None,
               log_switched_file,
               relocate_deleted_missing_copied,
               delete_subdir,
-              XFail(file_dir_file, issues=1532),
+              file_dir_file,
               nonrecursive_switching,
               failed_anchor_is_target,
               bad_intermediate_urls,
@@ -3159,7 +3167,7 @@ test_list = [ None,
               forced_switch,
               forced_switch_failures,
               switch_scheduled_add,
-              SkipUnless(mergeinfo_switch_elision, server_has_mergeinfo),
+              mergeinfo_switch_elision,
               switch_with_obstructing_local_adds,
               switch_with_depth,
               switch_to_dir_with_peg_rev,
@@ -3174,7 +3182,7 @@ test_list = [ None,
               tree_conflicts_on_switch_3,
               single_file_relocate,
               relocate_with_switched_children,
-              XFail(copy_with_switched_subdir),
+              copy_with_switched_subdir,
               relocate_with_relative_externals,
               ]
 

Modified: subversion/trunk/subversion/tests/cmdline/trans_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/trans_tests.py?rev=1067380&r1=1067379&r2=1067380&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/trans_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/trans_tests.py Sat Feb  5 02:17:32 2011
@@ -32,8 +32,12 @@ import svntest
 from svntest import wc
 
 # (abbreviation)
-Skip = svntest.testcase.Skip
-XFail = svntest.testcase.XFail
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 Item = svntest.wc.StateItem
 
 
@@ -446,6 +450,7 @@ def keywords_from_birth(sbox):
 def do_nothing(x, y):
   return 0
 
+@Issue(631)
 def update_modified_with_translation(sbox):
   "update modified file with eol-style 'native'"
 
@@ -534,7 +539,7 @@ def update_modified_with_translation(sbo
 # contents are transmitted to the server during commit, and b) that
 # after the commit, the file and its text-base have been changed to
 # have the new line-ending style.
-
+@Issue(1085)
 def eol_change_is_text_mod(sbox):
   "committing eol-style change forces text send"
 
@@ -588,7 +593,7 @@ def eol_change_is_text_mod(sbox):
 #----------------------------------------------------------------------
 # Regression test for issue #1151.  A single file in a directory
 # didn't get keywords expanded on checkout.
-
+@Issue(1151)
 def keyword_expanded_on_checkout(sbox):
   "keyword expansion for lone file in directory"
 

Modified: subversion/trunk/subversion/tests/cmdline/tree_conflict_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/tree_conflict_tests.py?rev=1067380&r1=1067379&r2=1067380&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/tree_conflict_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/tree_conflict_tests.py Sat Feb  5 02:17:32 2011
@@ -38,9 +38,12 @@ from svntest.actions import run_and_veri
 from svntest.actions import get_virginal_state
 
 # (abbreviation)
-Skip = svntest.testcase.Skip
-SkipUnless = svntest.testcase.SkipUnless
-XFail = svntest.testcase.XFail
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 Item = svntest.wc.StateItem
 AnyOutput = svntest.verify.AnyOutput
 
@@ -637,6 +640,8 @@ def up_sw_dir_del_onto_del(sbox):
 #   Adding         branch1\dC\D
 #
 #   Committed revision 4.
+@XFail(svntest.main.is_ra_type_dav)
+@Issue(3314)
 def up_sw_dir_add_onto_add(sbox):
   "up/sw dir: add onto add"
   # WC state: as scheduled (no obstruction)
@@ -686,6 +691,8 @@ def merge_dir_mod_onto_not_dir(sbox):
   test_tc_merge(sbox2, d_mods, wc_scen = d_dels)
 
 # Test for issue #3150 'tree conflicts with directories as victims'.
+@XFail()
+@Issue(3150)
 def merge_dir_del_onto_not_same(sbox):
   "merge dir: del/rpl/mv onto not-same"
   sbox2 = sbox.clone_dependent()
@@ -706,6 +713,7 @@ def merge_dir_add_onto_not_none(sbox):
 
 #----------------------------------------------------------------------
 
+@XFail()
 def force_del_tc_inside(sbox):
   "--force del on dir with TCs inside"
   ### This test is currently marked XFail because we don't remove tree
@@ -798,6 +806,7 @@ def force_del_tc_inside(sbox):
 
 #----------------------------------------------------------------------
 
+@XFail()
 def force_del_tc_is_target(sbox):
   "--force del on tree-conflicted targets"
   #          A/C
@@ -966,6 +975,8 @@ def query_absent_tree_conflicted_dir(sbo
 
 #----------------------------------------------------------------------
 
+@XFail()
+@Issue(3608)
 def up_add_onto_add_revert(sbox):
   "issue #3608: reverting an add onto add conflict"
 
@@ -1028,6 +1039,8 @@ def up_add_onto_add_revert(sbox):
 #----------------------------------------------------------------------
 # Regression test for issue #3525 and #3533
 #
+@XFail()
+@Issues([3525,3533])
 def lock_update_only(sbox):
   "lock status update shouldn't flag tree conflict"
 
@@ -1075,21 +1088,20 @@ test_list = [ None,
               up_sw_dir_mod_onto_del,
               up_sw_dir_del_onto_mod,
               up_sw_dir_del_onto_del,
-              XFail(up_sw_dir_add_onto_add,
-                    svntest.main.is_ra_type_dav, issues=3314),
+              up_sw_dir_add_onto_add,
               merge_file_mod_onto_not_file,
               merge_file_del_onto_not_same,
               merge_file_del_onto_not_file,
               merge_file_add_onto_not_none,
               merge_dir_mod_onto_not_dir,
-              XFail(merge_dir_del_onto_not_same, issues=3150),
+              merge_dir_del_onto_not_same,
               merge_dir_del_onto_not_dir,
               merge_dir_add_onto_not_none,
-              XFail(force_del_tc_inside),
-              XFail(force_del_tc_is_target),
+              force_del_tc_inside,
+              force_del_tc_is_target,
               query_absent_tree_conflicted_dir,
-              XFail(up_add_onto_add_revert, issues=3608),
-              XFail(lock_update_only,issues=[3525,3533]),
+              up_add_onto_add_revert,
+              lock_update_only,
              ]
 
 if __name__ == '__main__':

Modified: subversion/trunk/subversion/tests/cmdline/update_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/update_tests.py?rev=1067380&r1=1067379&r2=1067380&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/update_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/update_tests.py Sat Feb  5 02:17:32 2011
@@ -35,10 +35,12 @@ from merge_tests import expected_merge_o
 from merge_tests import set_up_branch
 
 # (abbreviation)
-Skip = svntest.testcase.Skip
-SkipUnless = svntest.testcase.SkipUnless
-XFail = svntest.testcase.XFail
-Wimp = svntest.testcase.Wimp
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 Item = svntest.wc.StateItem
 exp_noop_up_out = svntest.actions.expected_noop_update_output
 
@@ -3115,6 +3117,7 @@ def update_conflicted(sbox):
                                         None, None, 1)
 
 #----------------------------------------------------------------------
+@SkipUnless(server_has_mergeinfo)
 def mergeinfo_update_elision(sbox):
   "mergeinfo does not elide after update"
 
@@ -4564,6 +4567,8 @@ def tree_conflicts_on_update_2_2(sbox):
 # conflicts'
 #
 # Marked as XFail until issue #3329 is resolved.
+@Issue(3329)
+@XFail()
 def tree_conflicts_on_update_2_3(sbox):
   "tree conflicts 2.3: skip on 2nd update"
 
@@ -4846,6 +4851,8 @@ def tree_conflict_uc1_update_deleted_tre
 
 # Issue #3334: a delete-onto-modified tree conflict should leave the node
 # scheduled for re-addition.
+@Issue(3334)
+@XFail()
 def tree_conflict_uc2_schedule_re_add(sbox):
   "tree conflicts on update UC2, schedule re-add"
   sbox.build()
@@ -5100,6 +5107,8 @@ def update_wc_of_dir_to_rev_not_containi
 # tree conflict'
 #
 # Marked as XFail until that issue is fixed.
+@Issue(3525)
+@XFail()
 def update_deleted_locked_files(sbox):
   "verify update of deleted locked files"
 
@@ -5145,6 +5154,8 @@ def update_deleted_locked_files(sbox):
 # XFail until issue #3569 is fixed.  This test needs extension to map some
 # real use cases (all add operations are missing if a directory is updated
 # without its children.)
+@XFail()
+@Issue(3569)
 def update_empty_hides_entries(sbox):
   "svn up --depth empty hides entries for next update"
   sbox.build()
@@ -5306,6 +5317,8 @@ def update_with_excluded_subdir(sbox):
 # Test for issue #3471 'svn up touches file w/ lock & svn:keywords property'
 #
 # Marked as XFail until the issue is fixed.
+@XFail()
+@Issue(3471)
 def update_with_file_lock_and_keywords_property_set(sbox):
   """update with file lock & keywords property set"""
   sbox.build()
@@ -5333,6 +5346,7 @@ def update_with_file_lock_and_keywords_p
 # Updating a nonexistent or deleted path should be a successful no-op,
 # when there is no incoming change.  In trunk@1035343, such an update
 # within a copied directory triggered an assertion failure.
+@XFail()
 def update_nonexistent_child_of_copy(sbox):
   """update a nonexistent child of a copied dir"""
   sbox.build()
@@ -5388,8 +5402,7 @@ test_list = [ None,
               update_wc_with_replaced_file,
               update_with_obstructing_additions,
               update_conflicted,
-              SkipUnless(mergeinfo_update_elision,
-                         server_has_mergeinfo),
+              mergeinfo_update_elision,
               update_copied_from_replaced_and_changed,
               update_copied_and_deleted_prop,
               update_accept_conflicts,
@@ -5400,19 +5413,18 @@ test_list = [ None,
               tree_conflicts_on_update_1_2,
               tree_conflicts_on_update_2_1,
               tree_conflicts_on_update_2_2,
-              XFail(tree_conflicts_on_update_2_3, issues=3329),
+              tree_conflicts_on_update_2_3,
               tree_conflicts_on_update_3,
               tree_conflict_uc1_update_deleted_tree,
-              XFail(tree_conflict_uc2_schedule_re_add, issues=3334),
+              tree_conflict_uc2_schedule_re_add,
               set_deep_depth_on_target_with_shallow_children,
               update_wc_of_dir_to_rev_not_containing_this_dir,
-              XFail(update_deleted_locked_files, issues=3525),
-              XFail(update_empty_hides_entries, issues=3569),
+              update_deleted_locked_files,
+              update_empty_hides_entries,
               mergeinfo_updates_merge_with_local_mods,
               update_with_excluded_subdir,
-              XFail(update_with_file_lock_and_keywords_property_set,
-                    issues=3471),
-              XFail(update_nonexistent_child_of_copy),
+              update_with_file_lock_and_keywords_property_set,
+              update_nonexistent_child_of_copy,
              ]
 
 if __name__ == '__main__':

Modified: subversion/trunk/subversion/tests/cmdline/upgrade_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/upgrade_tests.py?rev=1067380&r1=1067379&r2=1067380&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/upgrade_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/upgrade_tests.py Sat Feb  5 02:17:32 2011
@@ -40,8 +40,12 @@ import svntest
 from svntest import wc
 
 Item = svntest.wc.StateItem
-XFail = svntest.testcase.XFail
-SkipUnless = svntest.testcase.SkipUnless
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 
 wc_is_too_old_regex = (".*Working copy '.*' is too old \(format \d+.*\).*")
 
@@ -550,6 +554,7 @@ def do_x3_upgrade(sbox):
       'A/B/E/alpha'       : {'svn:eol-style': 'native'}
   })
 
+@XFail()
 def x3_1_4_0(sbox):
   "3x same wc upgrade 1.4.0 test"
 
@@ -640,6 +645,7 @@ def missing_dirs2(sbox):
     expected_status.tweak('A/D', 'A/B_new/F', status='! ')
   run_and_verify_status_no_server(sbox.wc_dir, expected_status)
 
+@XFail()
 def delete_and_keep_local(sbox):
   "check status delete and delete --keep-local"
 
@@ -855,12 +861,12 @@ test_list = [ None,
               basic_upgrade_1_0,
               # Upgrading from 1.4.0-1.4.5 with specific states fails
               # See issue #2530
-              XFail(x3_1_4_0),
+              x3_1_4_0,
               x3_1_4_6,
               x3_1_6_12,
               missing_dirs,
               missing_dirs2,
-              XFail(delete_and_keep_local),
+              delete_and_keep_local,
               dirs_only_upgrade,
               upgrade_tree_conflict_data,
               delete_in_copy_upgrade,

Modified: subversion/trunk/subversion/tests/cmdline/utf8_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/utf8_tests.py?rev=1067380&r1=1067379&r2=1067380&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/utf8_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/utf8_tests.py Sat Feb  5 02:17:32 2011
@@ -34,7 +34,12 @@ from svntest import wc
 
 # (abbreviation)
 Item = wc.StateItem
-Skip = svntest.testcase.Skip
+Skip = svntest.testcase.Skip_deco
+SkipUnless = svntest.testcase.SkipUnless_deco
+XFail = svntest.testcase.XFail_deco
+Issues = svntest.testcase.Issues_deco
+Issue = svntest.testcase.Issue_deco
+Wimp = svntest.testcase.Wimp_deco
 
 #--------------------------------------------------------------------
 # Data
@@ -55,7 +60,7 @@ i18n_logmsg = 'drie\xc3\xabntwintig keer
 #
 #   Each test must return on success or raise on failure.
 
-
+@Skip()
 def basic_utf8_conversion(sbox):
   "conversion of paths and logs to/from utf8"
 
@@ -154,7 +159,7 @@ if localematch:
 
 # list all tests here, starting with None:
 test_list = [ None,
-              Skip(basic_utf8_conversion),
+              basic_utf8_conversion,
              ]
 
 if __name__ == '__main__':