This patch reduces checkout by around 23 times. Log [[[ Combine input validation tests to reduce the overhead of multiple checkouts.
* subversion/tests/cmdline/input_validation_tests.py: (invalid_targets): Build sandbox once and make following methods local. (invalid_wcpath_add, invalid_wcpath_changelist, invalid_wcpath_cleanup, invalid_wcpath_commit, invalid_copy_sources, invalid_copy_target, invalid_delete_targets, invalid_diff_targets, invalid_export_targets, invalid_import_rags, invalid_log_targets, invalid_merge_rags, invalid_wcpath_upgrade, invalid_resolve_targets, invalid_resolved_targets, invalid_revert_targets, invalid_lock_targets, invalid_unlock_targets, invalid_status_targets, invalid_patch_targets, invalid_switch_targets, invalid_relocate_targets, invalid_mkdir_targets, invalid_update_targets) (test_list): Add new combined test and remove individual tests. Patch by: Noorul Islam K M <noorul{_AT_}collab.net> ]]]
Index: subversion/tests/cmdline/input_validation_tests.py =================================================================== --- subversion/tests/cmdline/input_validation_tests.py (revision 1072854) +++ subversion/tests/cmdline/input_validation_tests.py (working copy) @@ -64,222 +64,203 @@ # Each test must return on success or raise on failure. #---------------------------------------------------------------------- -def invalid_wcpath_add(sbox): - "non-working copy paths for 'add'" +def invalid_targets(sbox): + "inavlid wc and url targets" sbox.build(read_only=True) - for target in _invalid_wc_path_targets: - run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'add', target) + + def invalid_wcpath_add(): + "non-working copy paths for 'add'" + for target in _invalid_wc_path_targets: + run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'add', target) -def invalid_wcpath_changelist(sbox): - "non-working copy paths for 'changelist'" - sbox.build(read_only=True) - for target in _invalid_wc_path_targets: - run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'changelist', - 'foo', target) - run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'changelist', - '--remove', target) + def invalid_wcpath_changelist(): + "non-working copy paths for 'changelist'" + for target in _invalid_wc_path_targets: + run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'changelist', + 'foo', target) + run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'changelist', + '--remove', target) -def invalid_wcpath_cleanup(sbox): - "non-working copy paths for 'cleanup'" - sbox.build(read_only=True) - for target in _invalid_wc_path_targets: - run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'cleanup', - target) + def invalid_wcpath_cleanup(): + "non-working copy paths for 'cleanup'" + for target in _invalid_wc_path_targets: + run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'cleanup', + target) -def invalid_wcpath_commit(sbox): - "non-working copy paths for 'commit'" - sbox.build(read_only=True) - for target in _invalid_wc_path_targets: - run_and_verify_svn_in_wc(sbox, "svn: E205000: '.*' is a URL, but URLs cannot be " + - "commit targets", 'commit', target) + def invalid_wcpath_commit(): + "non-working copy paths for 'commit'" + for target in _invalid_wc_path_targets: + run_and_verify_svn_in_wc(sbox, "svn: E205000: '.*' is a URL, but URLs cannot be " + + "commit targets", 'commit', target) -def invalid_copy_sources(sbox): - "invalid sources for 'copy'" - sbox.build(read_only=True) - for (src1, src2) in [("iota", "^/"), ("^/", "iota"), ("file://", "iota")]: - run_and_verify_svn_in_wc(sbox, "svn: E200007: Cannot mix repository and working " + - "copy sources", 'copy', src1, src2, "A") + def invalid_copy_sources(): + "invalid sources for 'copy'" + for (src1, src2) in [("iota", "^/"), ("^/", "iota"), ("file://", "iota")]: + run_and_verify_svn_in_wc(sbox, "svn: E200007: Cannot mix repository and working " + + "copy sources", 'copy', src1, src2, "A") -def invalid_copy_target(sbox): - "invalid target for 'copy'" - sbox.build(read_only=True) - mu_path = os.path.join('A', 'mu') - C_path = os.path.join('A', 'C') - run_and_verify_svn_in_wc(sbox, "svn: E155007: Path '.*' is not a directory", - 'copy', mu_path, C_path, "iota") + def invalid_copy_target(): + "invalid target for 'copy'" + mu_path = os.path.join('A', 'mu') + C_path = os.path.join('A', 'C') + run_and_verify_svn_in_wc(sbox, "svn: E155007: Path '.*' is not a directory", + 'copy', mu_path, C_path, "iota") -def invalid_delete_targets(sbox): - "invalid targets for 'delete'" - sbox.build(read_only=True) - for (target1, target2) in [("iota", "^/"), ("file://", "iota")]: - run_and_verify_svn_in_wc(sbox, "svn: E205000: Cannot mix repository and working " - "copy targets", 'delete', target1, target2) + def invalid_delete_targets(): + "invalid targets for 'delete'" + for (target1, target2) in [("iota", "^/"), ("file://", "iota")]: + run_and_verify_svn_in_wc(sbox, "svn: E205000: Cannot mix repository and working " + "copy targets", 'delete', target1, target2) -def invalid_diff_targets(sbox): - "invalid targets for 'diff'" - sbox.build(read_only=True) - for (target1, target2) in [("iota", "^/"), ("file://", "iota")]: - run_and_verify_svn_in_wc(sbox, "svn: E205000: Cannot mix repository and working " + def invalid_diff_targets(): + "invalid targets for 'diff'" + for (target1, target2) in [("iota", "^/"), ("file://", "iota")]: + run_and_verify_svn_in_wc(sbox, "svn: E205000: Cannot mix repository and working " "copy targets", 'diff', target1, target2) - run_and_verify_svn_in_wc(sbox, "svn: E200007: Summarizing diff can only compare " - "repository to repository", - 'diff', '--summarize', "iota", "A") + run_and_verify_svn_in_wc(sbox, "svn: E200007: Summarizing diff can only compare " + "repository to repository", + 'diff', '--summarize', "iota", "A") + def invalid_export_targets(): + "invalid targets for 'export'" + run_and_verify_svn_in_wc(sbox, "svn: (E000017|E720183): Can't create directory 'iota':.*", + 'export', '.', 'iota') + for target in ["^/", "file://"]: + run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", + 'export', '.', target) -def invalid_export_targets(sbox): - "invalid targets for 'export'" - sbox.build(read_only=True) - run_and_verify_svn_in_wc(sbox, "svn: (E000017|E720183): Can't create directory 'iota':.*", - 'export', '.', 'iota') - for target in ["^/", "file://"]: + def invalid_import_args(): + "invalid arguments for 'import'" run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", - 'export', '.', target) + 'import', '^/', '^/') + run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", + 'import', '^/', 'iota') + run_and_verify_svn_in_wc(sbox, "svn: E205000: Invalid URL 'iota'", + 'import', 'iota', 'iota') -def invalid_import_args(sbox): - "invalid arguments for 'import'" - sbox.build(read_only=True) - run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", - 'import', '^/', '^/') - run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", - 'import', '^/', 'iota') - run_and_verify_svn_in_wc(sbox, "svn: E205000: Invalid URL 'iota'", - 'import', 'iota', 'iota') + def invalid_log_targets(): + "invalid targets for 'log'" + for (target1, target2) in [('^/', '/a/b/c'), ('^/', '^/'), ('^/', 'file://')]: + run_and_verify_svn_in_wc(sbox, "svn: E205000: Only relative paths can be " + + "specified after a URL for 'svn log', but.*is " + + "not a relative path", 'log', target1, target2) -def invalid_log_targets(sbox): - "invalid targets for 'log'" - sbox.build(read_only=True) - for (target1, target2) in [('^/', '/a/b/c'), ('^/', '^/'), ('^/', 'file://')]: - run_and_verify_svn_in_wc(sbox, "svn: E205000: Only relative paths can be " + - "specified after a URL for 'svn log', but.*is " + - "not a relative path", 'log', target1, target2) + def invalid_merge_args(): + "invalid arguments for 'merge'" + run_and_verify_svn_in_wc(sbox, "svn: E195002: A working copy merge source needs " + "an explicit revision", 'merge', 'iota', '^/') + for (src, target) in [('iota@HEAD', '^/'), ('iota@BASE', 'file://')]: + run_and_verify_svn_in_wc(sbox, "svn: E205000: Merge sources must both be either " + "paths or URLs", 'merge', src, target) + run_and_verify_svn_in_wc(sbox, "svn: E155010: Path '.*' does not exist", + 'merge', 'iota@BASE', 'iota@HEAD', 'nonexistent') + run_and_verify_svn_in_wc(sbox, "svn: E205000: Too many arguments given", + 'merge', '-c42', '^/A/B', '^/A/C', 'iota') + run_and_verify_svn_in_wc(sbox, "svn: E205000: Cannot specify a revision range with" + + " two URLs", 'merge', '-c42', '^/mu', '^/') + run_and_verify_svn_in_wc(sbox, "svn: E155010: Path '.*' does not exist", + 'merge', '-c42', '^/mu', 'nonexistent') -def invalid_merge_args(sbox): - "invalid arguments for 'merge'" - sbox.build(read_only=True) - run_and_verify_svn_in_wc(sbox, "svn: E195002: A working copy merge source needs " - "an explicit revision", 'merge', 'iota', '^/') - for (src, target) in [('iota@HEAD', '^/'), ('iota@BASE', 'file://')]: - run_and_verify_svn_in_wc(sbox, "svn: E205000: Merge sources must both be either " - "paths or URLs", 'merge', src, target) - run_and_verify_svn_in_wc(sbox, "svn: E155010: Path '.*' does not exist", - 'merge', 'iota@BASE', 'iota@HEAD', 'nonexistent') - run_and_verify_svn_in_wc(sbox, "svn: E205000: Too many arguments given", - 'merge', '-c42', '^/A/B', '^/A/C', 'iota') - run_and_verify_svn_in_wc(sbox, "svn: E205000: Cannot specify a revision range with" + - " two URLs", 'merge', '-c42', '^/mu', '^/') - run_and_verify_svn_in_wc(sbox, "svn: E155010: Path '.*' does not exist", - 'merge', '-c42', '^/mu', 'nonexistent') + def invalid_wcpath_upgrade(): + "non-working copy paths for 'upgrade'" + for target in _invalid_wc_path_targets: + run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'upgrade', + target, target) -def invalid_wcpath_upgrade(sbox): - "non-working copy paths for 'upgrade'" - sbox.build(read_only=True) - for target in _invalid_wc_path_targets: - run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'upgrade', - target, target) + def invalid_resolve_targets(): + "non-working copy paths for 'resolve'" + for target in _invalid_wc_path_targets: + run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'resolve', + '--accept', 'base', target) -def invalid_resolve_targets(sbox): - "non-working copy paths for 'resolve'" - sbox.build(read_only=True) - for target in _invalid_wc_path_targets: - run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'resolve', - '--accept', 'base', target) + def invalid_resolved_targets(): + "non-working copy paths for 'resolved'" + for target in _invalid_wc_path_targets: + run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'resolved', + target) -def invalid_resolved_targets(sbox): - "non-working copy paths for 'resolved'" - sbox.build(read_only=True) - for target in _invalid_wc_path_targets: - run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'resolved', - target) + def invalid_revert_targets(): + "non-working copy paths for 'revert'" + for target in _invalid_wc_path_targets: + run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'revert', + target) -def invalid_revert_targets(sbox): - "non-working copy paths for 'revert'" - sbox.build(read_only=True) - for target in _invalid_wc_path_targets: - run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'revert', - target) + def invalid_lock_targets(): + "wc paths and repo URL target mixture for 'lock'" + for (target1, target2) in [("iota", "^/"), ("file://", "iota")]: + run_and_verify_svn_in_wc(sbox, "svn: E205000: Cannot mix repository and working " + "copy targets", 'lock', target1, target2) -def invalid_lock_targets(sbox): - "wc paths and repo URL target mixture for 'lock'" - sbox.build(read_only=True) - for (target1, target2) in [("iota", "^/"), ("file://", "iota")]: - run_and_verify_svn_in_wc(sbox, "svn: E205000: Cannot mix repository and working " - "copy targets", 'lock', target1, target2) + def invalid_unlock_targets(): + "wc paths and repo URL target mixture for 'unlock'" + for (target1, target2) in [("iota", "^/"), ("file://", "iota")]: + run_and_verify_svn_in_wc(sbox, "svn: E205000: Cannot mix repository and working " + "copy targets", 'unlock', target1, target2) -def invalid_unlock_targets(sbox): - "wc paths and repo URL target mixture for 'unlock'" - sbox.build(read_only=True) - for (target1, target2) in [("iota", "^/"), ("file://", "iota")]: - run_and_verify_svn_in_wc(sbox, "svn: E205000: Cannot mix repository and working " - "copy targets", 'unlock', target1, target2) + def invalid_status_targets(): + "non-working copy paths for 'status'" + for target in _invalid_wc_path_targets: + run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'status', + target) -def invalid_status_targets(sbox): - "non-working copy paths for 'status'" - sbox.build(read_only=True) - for target in _invalid_wc_path_targets: - run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'status', - target) + def invalid_patch_targets(): + "non-working copy paths for 'patch'" + for (target1, target2) in [("foo", "^/"), ("^/", "^/"), ("^/", "foo")]: + run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'patch', + target1, target2) -def invalid_patch_targets(sbox): - "non-working copy paths for 'patch'" - sbox.build(read_only=True) - for (target1, target2) in [("foo", "^/"), ("^/", "^/"), ("^/", "foo")]: - run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'patch', - target1, target2) + def invalid_switch_targets(): + "non-working copy paths for 'switch'" + run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'switch', + "^/", "^/") -def invalid_switch_targets(sbox): - "non-working copy paths for 'switch'" - sbox.build(read_only=True) - run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'switch', - "^/", "^/") + def invalid_relocate_targets(): + "non-working copy paths for 'relocate'" + run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'relocate', + "^/", "^/", "^/") -def invalid_relocate_targets(sbox): - "non-working copy paths for 'relocate'" - sbox.build(read_only=True) - run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'relocate', - "^/", "^/", "^/") + # See also basic_tests.py:basic_mkdir_mix_targets(), which tests + # the same thing the other way around. + def invalid_mkdir_targets(): + "invalid targets for 'mkdir'" + run_and_verify_svn_in_wc(sbox, "svn: E205000: Cannot mix repository and working " + "copy targets", 'mkdir', "folder", "^/folder") -# See also basic_tests.py:basic_mkdir_mix_targets(), which tests -# the same thing the other way around. -def invalid_mkdir_targets(sbox): - "invalid targets for 'mkdir'" - sbox.build(read_only=True) - run_and_verify_svn_in_wc(sbox, "svn: E205000: Cannot mix repository and working " - "copy targets", 'mkdir', "folder", "^/folder") + def invalid_update_targets(): + "non-working copy paths for 'update'" + run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'update', + "^/") -def invalid_update_targets(sbox): - "non-working copy paths for 'update'" - sbox.build(read_only=True) - run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'update', - "^/") + invalid_wcpath_add() + invalid_wcpath_changelist() + invalid_wcpath_cleanup() + invalid_wcpath_commit() + invalid_copy_sources() + invalid_copy_target() + invalid_delete_targets() + invalid_diff_targets() + invalid_export_targets() + invalid_import_args() + invalid_log_targets() + invalid_merge_args() + invalid_wcpath_upgrade() + invalid_resolve_targets() + invalid_resolved_targets() + invalid_revert_targets() + invalid_lock_targets() + invalid_unlock_targets() + invalid_status_targets() + invalid_patch_targets() + invalid_switch_targets() + invalid_relocate_targets() + invalid_mkdir_targets() + invalid_update_targets() ######################################################################## # Run the tests # list all tests here, starting with None: test_list = [ None, - invalid_wcpath_add, - invalid_wcpath_changelist, - invalid_wcpath_cleanup, - invalid_wcpath_commit, - invalid_copy_sources, - invalid_copy_target, - invalid_delete_targets, - invalid_diff_targets, - invalid_export_targets, - invalid_import_args, - invalid_log_targets, - invalid_merge_args, - invalid_wcpath_upgrade, - invalid_resolve_targets, - invalid_resolved_targets, - invalid_revert_targets, - invalid_lock_targets, - invalid_unlock_targets, - invalid_status_targets, - invalid_patch_targets, - invalid_switch_targets, - invalid_relocate_targets, - invalid_mkdir_targets, - invalid_update_targets, + invalid_targets, ] if __name__ == '__main__':