| #!/usr/bin/env python |
| # |
| # basic_tests.py: testing working-copy interactions with ra_local |
| # |
| # Subversion is a tool for revision control. |
| # See http://subversion.apache.org for more information. |
| # |
| # ==================================================================== |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| ###################################################################### |
| |
| # General modules |
| import shutil, stat, re, os, logging |
| |
| logger = logging.getLogger() |
| |
| # Our testing module |
| import svntest |
| from svntest import wc |
| from svntest import main |
| from svntest import actions |
| |
| # (abbreviation) |
| 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 = wc.StateItem |
| |
| ###################################################################### |
| # Helper functions |
| |
| # Most of our tests use absolute paths as parameters on the command line. But |
| # for these tests, it's important that we can use bare file names in the |
| # commands, because the parser may have (and as of this writing does have) |
| # edge-case bugs that we can only expose in this way. Therefore, these helpers |
| # ensure that we run 'svn' with the CWD at the root of the working copy. |
| def run_svn(sbox, expected_status, expected_stderr, *varargs): |
| if expected_stderr is None: |
| expected_stderr = [] |
| |
| cwd = os.getcwd() |
| try: |
| os.chdir(sbox.wc_dir) |
| actions.run_and_verify_svn(None, expected_stderr, *varargs) |
| finally: |
| os.chdir(cwd) |
| |
| if expected_status is not None: |
| actions.run_and_verify_status(sbox.wc_dir, expected_status) |
| |
| def get_trojan_virginal_state(sbox): |
| return actions.get_virginal_state(sbox.wc_dir, '1', tree='trojan') |
| |
| def build_trojan_sandbox(sbox, expected_stderr): |
| sbox.build(tree='trojan') |
| if expected_stderr is None: |
| return get_trojan_virginal_state(sbox) |
| return None |
| |
| def build_empty_sandbox(sbox, expected_stderr): |
| sbox.build(empty=True) |
| if expected_stderr is None: |
| return svntest.wc.State(sbox.wc_dir, { |
| '': svntest.wc.StateItem(status=' ', wc_rev='0') |
| }) |
| return None |
| |
| def build_sandbox(sbox, empty_sandbox, expected_stderr): |
| if not empty_sandbox: |
| return build_trojan_sandbox(sbox, expected_stderr) |
| else: |
| return build_empty_sandbox(sbox, expected_stderr) |
| |
| def do_add_file(sbox, dst, dst_cmdline, |
| expected_stderr=None, empty_sandbox=False): |
| expected_status = build_sandbox(sbox, empty_sandbox, expected_stderr) |
| if expected_status is not None: |
| expected_status.add({dst: Item(status='A ', wc_rev='-')}) |
| |
| main.file_write(sbox.ospath(dst), "This is file '" + dst + "'.") |
| run_svn(sbox, expected_status, expected_stderr, |
| 'add', dst_cmdline) |
| |
| def do_add_file_e(sbox, dst, dst_cmdline, expected_stderr=None): |
| "like do_add_file() but with an empty sandbox" |
| return do_add_file(sbox, dst, dst_cmdline, expected_stderr, True) |
| |
| def do_make_dir(sbox, dst, dst_cmdline, |
| expected_stderr=None, empty_sandbox=False): |
| expected_status = build_sandbox(sbox, empty_sandbox, expected_stderr) |
| if expected_status is not None: |
| expected_status.add({dst: Item(status='A ', wc_rev='-')}) |
| |
| run_svn(sbox, expected_status, expected_stderr, |
| 'mkdir', dst_cmdline) |
| |
| def do_make_dir_e(sbox, dst, dst_cmdline, expected_stderr=None): |
| "like do_make_dir() but with an empty sandbox" |
| return do_make_dir(sbox, dst, dst_cmdline, expected_stderr, True) |
| |
| def do_remove(sbox, dst, dst_cmdline, expected_stderr=None): |
| expected_status = build_trojan_sandbox(sbox, expected_stderr) |
| if expected_status is not None and dst in expected_status.desc: |
| expected_status.tweak(dst, status='D ') |
| |
| run_svn(sbox, expected_status, expected_stderr, |
| 'remove', dst_cmdline) |
| |
| def do_rename(sbox, src, src_cmdline, dst, dst_cmdline, |
| expected_stderr=None): |
| expected_status = build_trojan_sandbox(sbox, expected_stderr) |
| if expected_status is not None: |
| expected_status.tweak(src, status='D ', moved_to=dst) |
| expected_status.add({dst: Item(status='A ', copied='+', |
| moved_from=src, wc_rev='-')}) |
| |
| run_svn(sbox, expected_status, expected_stderr, |
| 'rename', src_cmdline, dst_cmdline) |
| |
| |
| ###################################################################### |
| # Tests |
| # |
| # Each test must return on success or raise on failure. |
| |
| #===================================================================== |
| # Tests for 'svn add' in the current directory |
| |
| def add_file_here_1_escape_peg(sbox): |
| "add file 'tau' with pegrev escape" |
| do_add_file_e(sbox, 'tau', 'tau@') |
| |
| def add_file_here_2_escape_peg(sbox): |
| "add file '@tau' with pegrev escape" |
| do_add_file_e(sbox, '@tau', '@tau@') |
| |
| def add_file_here_3_escape_peg(sbox): |
| "add file '_@tau' with pegrev escape" |
| do_add_file_e(sbox, '_@tau', '_@tau@') |
| |
| def add_file_here_4_escape_peg(sbox): |
| "add file '.@tau' with pegrev escape" |
| do_add_file_e(sbox, '.@tau', '.@tau@') |
| |
| def add_file_here_5_escape_peg(sbox): |
| "add file 'tau@' with pegrev escape" |
| do_add_file_e(sbox, 'tau@', 'tau@@') |
| |
| def add_file_here_6_escape_peg(sbox): |
| "add file '@tau@' with pegrev escape" |
| do_add_file_e(sbox, '@tau@', '@tau@@') |
| |
| def add_file_here_7_escape_peg(sbox): |
| "add file '@' with pegrev escape" |
| do_add_file_e(sbox, '@', '@@') |
| |
| #--------------------------------------------------------------------- |
| |
| def add_file_here_1_no_escape_peg(sbox): |
| "add file 'tau' without pegrev escape" |
| do_add_file_e(sbox, 'tau', 'tau') |
| |
| def add_file_here_2_no_escape_peg(sbox): |
| "add file '@tau' without pegrev escape" |
| do_add_file_e(sbox, '@tau', '@tau', "svn: E125001: '@tau'") |
| |
| def add_file_here_3_no_escape_peg(sbox): |
| "add file '_@tau' without pegrev escape" |
| do_add_file_e(sbox, '_@tau', '_@tau', "svn: E200009: '_@tau'") |
| |
| @Wimp("The error message mentions '@tau' instead of '.@tau'") |
| def add_file_here_4_no_escape_peg(sbox): |
| "add file '.@tau' without pegrev escape" |
| do_add_file_e(sbox, '.@tau', '.@tau', "svn: E200009: '.@tau'") |
| |
| def add_file_here_5_no_escape_peg(sbox): |
| "add file 'tau@' without pegrev escape" |
| do_add_file_e(sbox, 'tau@', 'tau@', 'svn: E200009: ') |
| |
| def add_file_here_6_no_escape_peg(sbox): |
| "add file '@tau@' without pegrev escape" |
| do_add_file_e(sbox, '@tau@', '@tau@', 'svn: E200009: ') |
| |
| def add_file_here_7_no_escape_peg(sbox): |
| "add file '@' without pegrev escape" |
| do_add_file_e(sbox, '@', '@', "svn: E125001: '@'") |
| |
| #===================================================================== |
| # Tests for 'svn add' in a subdirectory |
| |
| def add_file_subdir_1_escape_peg(sbox): |
| "add file 'E/tau' with pegrev escape" |
| do_add_file(sbox, 'E/tau', 'E/tau@') |
| |
| def add_file_subdir_2_escape_peg(sbox): |
| "add file 'E/@tau' with pegrev escape" |
| do_add_file(sbox, 'E/@tau', 'E/@tau@') |
| |
| def add_file_subdir_3_escape_peg(sbox): |
| "add file 'E/_@tau' with pegrev escape" |
| do_add_file(sbox, 'E/_@tau', 'E/_@tau@') |
| |
| def add_file_subdir_4_escape_peg(sbox): |
| "add file 'E/.@tau' with pegrev escape" |
| do_add_file(sbox, 'E/.@tau', 'E/.@tau@') |
| |
| def add_file_subdir_5_escape_peg(sbox): |
| "add file 'E/tau@' with pegrev escape" |
| do_add_file(sbox, 'E/tau@', 'E/tau@@') |
| |
| def add_file_subdir_6_escape_peg(sbox): |
| "add file 'E/@tau@' with pegrev escape" |
| do_add_file(sbox, 'E/@tau@', 'E/@tau@@') |
| |
| def add_file_subdir_7_escape_peg(sbox): |
| "add file 'E/@' with pegrev escape" |
| do_add_file(sbox, 'E/@', 'E/@@') |
| |
| #--------------------------------------------------------------------- |
| |
| def add_file_subdir_1_no_escape_peg(sbox): |
| "add file 'E/tau' without pegrev escape" |
| do_add_file(sbox, 'E/tau', 'E/tau') |
| |
| @Wimp("The error message mentions 'E@tau' instead of 'E/@tau'") |
| @Wimp("The error message should be E125001") |
| def add_file_subdir_2_no_escape_peg(sbox): |
| "add file 'E/@tau' without pegrev escape" |
| do_add_file(sbox, 'E/@tau', 'E/@tau', r"svn: E200009: 'E[\\/]@tau'") |
| |
| def add_file_subdir_3_no_escape_peg(sbox): |
| "add file 'E/_@tau' without pegrev escape" |
| do_add_file(sbox, 'E/_@tau', 'E/_@tau', r"svn: E200009: 'E[\\/]_@tau'") |
| |
| @Wimp("The error message mentions 'E@tau' instead of 'E/.@tau'") |
| def add_file_subdir_4_no_escape_peg(sbox): |
| "add file 'E/.@tau' without pegrev escape" |
| do_add_file(sbox, 'E/.@tau', 'E/.@tau', r"svn: E200009: 'E[\\/].@tau'") |
| |
| def add_file_subdir_5_no_escape_peg(sbox): |
| "add file 'E/tau@' without pegrev escape" |
| do_add_file(sbox, 'E/tau@', 'E/tau@', 'svn: E200009: ') |
| |
| def add_file_subdir_6_no_escape_peg(sbox): |
| "add file 'E/@tau@' without pegrev escape" |
| do_add_file(sbox, 'E/@tau@', 'E/@tau@', 'svn: E200009: ') |
| |
| @Wimp("The error message is E200009 but should be E125001") |
| def add_file_subdir_7_no_escape_peg(sbox): |
| "add file 'E/@' without pegrev escape" |
| do_add_file(sbox, 'E/@', 'E/@', r"svn: E125001: 'E[\\/]@'") |
| |
| #===================================================================== |
| # Tests for 'svn mkdir' in the current directory |
| |
| def make_dir_here_1_escape_peg(sbox): |
| "create directory 'T' with pegrev escape" |
| do_make_dir_e(sbox, 'T', 'T@') |
| |
| def make_dir_here_2_escape_peg(sbox): |
| "create directory '@T' with pegrev escape" |
| do_make_dir_e(sbox, '@T', '@T@') |
| |
| def make_dir_here_3_escape_peg(sbox): |
| "create directory '_@T' with pegrev escape" |
| do_make_dir(sbox, '_@T', '_@T@') |
| |
| def make_dir_here_4_escape_peg(sbox): |
| "create directory '.@T' with pegrev escape" |
| do_make_dir_e(sbox, '.@T', '.@T@') |
| |
| def make_dir_here_5_escape_peg(sbox): |
| "create directory 'T@' with pegrev escape" |
| do_make_dir_e(sbox, 'T@', 'T@@') |
| |
| def make_dir_here_6_escape_peg(sbox): |
| "create directory '@T@' with pegrev escape" |
| do_make_dir_e(sbox, '@T@', '@T@@') |
| |
| def make_dir_here_7_escape_peg(sbox): |
| "create directory '@' with pegrev escape" |
| do_make_dir_e(sbox, '@', '@@') |
| |
| #--------------------------------------------------------------------- |
| |
| def make_dir_here_1_no_escape_peg(sbox): |
| "create directory 'T' without pegrev escape" |
| do_make_dir_e(sbox, 'T', 'T') |
| |
| def make_dir_here_2_no_escape_peg(sbox): |
| "create directory '@T' without pegrev escape" |
| do_make_dir_e(sbox, '@T', '@T', "svn: E125001: '@T'") |
| |
| def make_dir_here_3_no_escape_peg(sbox): |
| "create directory '_@T' without pegrev escape" |
| do_make_dir_e(sbox, '_@T', '_@T', "svn: E200009: '_@T'") |
| |
| @Wimp("The error message mentions '@T' instead of '.@T'") |
| def make_dir_here_4_no_escape_peg(sbox): |
| "create directory '.@T' without pegrev escape" |
| do_make_dir_e(sbox, '.@T', '.@T', "svn: E200009: '.@T'") |
| |
| # Skip tests 5 and 6 that create a directory with a trailing @ in the name |
| # because is correctly interpreted as a peg revision escape. This is already |
| # tested by: |
| # - make_dir_here_5_escape_peg |
| # - make_dir_here_6_escape_peg |
| |
| def make_dir_here_7_no_escape_peg(sbox): |
| "create directory '@' without pegrev escape" |
| do_make_dir_e(sbox, '@', '@', "svn: E125001: '@'") |
| |
| #===================================================================== |
| # Tests for 'svn add' in a subdirectory |
| |
| def make_dir_subdir_1_escape_peg(sbox): |
| "create directory 'E/T' with pegrev escape" |
| do_make_dir(sbox, 'E/T', 'E/T@') |
| |
| def make_dir_subdir_2_escape_peg(sbox): |
| "create directory 'E/@T' with pegrev escape" |
| do_make_dir(sbox, 'E/@T', 'E/@T@') |
| |
| def make_dir_subdir_3_escape_peg(sbox): |
| "create directory 'E/_@T' with pegrev escape" |
| do_make_dir(sbox, 'E/_@T', 'E/_@T@') |
| |
| def make_dir_subdir_4_escape_peg(sbox): |
| "create directory 'E/.@T' with pegrev escape" |
| do_make_dir(sbox, 'E/.@T', 'E/.@T@') |
| |
| def make_dir_subdir_5_escape_peg(sbox): |
| "create directory 'E/T@' with pegrev escape" |
| do_make_dir(sbox, 'E/T@', 'E/T@@') |
| |
| def make_dir_subdir_6_escape_peg(sbox): |
| "create directory 'E/@T@' with pegrev escape" |
| do_make_dir(sbox, 'E/@T@', 'E/@T@@') |
| |
| def make_dir_subdir_7_escape_peg(sbox): |
| "create directory 'E/@' with pegrev escape" |
| do_make_dir(sbox, 'E/@', 'E/@@') |
| |
| #--------------------------------------------------------------------- |
| |
| def make_dir_subdir_1_no_escape_peg(sbox): |
| "create directory 'E/T' without pegrev escape" |
| do_make_dir(sbox, 'E/T', 'E/T') |
| |
| @Wimp("The error message mentions 'E@T' instead of 'E/@T'") |
| @Wimp("The error message should be E125001") |
| def make_dir_subdir_2_no_escape_peg(sbox): |
| "create directory 'E/@T' without pegrev escape" |
| do_make_dir(sbox, 'E/@T', 'E/@T', r"svn: E200009: 'E[\\/]@T'") |
| |
| def make_dir_subdir_3_no_escape_peg(sbox): |
| "create directory 'E/_@T' without pegrev escape" |
| do_make_dir(sbox, 'E/_@T', 'E/_@T', r"svn: E200009: 'E[\\/]_@T'") |
| |
| @Wimp("The error message mentions 'E@T' instead of 'E/.@T'") |
| def make_dir_subdir_4_no_escape_peg(sbox): |
| "create directory 'E/.@T' without pegrev escape" |
| do_make_dir(sbox, 'E/.@T', 'E/.@T', r"svn: E200009: 'E[\\/].@T'") |
| |
| # Skip tests 5 and 6 that create a directory with a trailing @ in the name |
| # because is correctly interpreted as a peg revision escape. This is already |
| # tested by: |
| # - make_dir_subdir_5_escape_peg |
| # - make_dir_subdir_6_escape_peg |
| |
| @Wimp("Reports error that E exists but should be E125001 for E/@") |
| def make_dir_subdir_7_no_escape_peg(sbox): |
| "create directory 'E/@' without pegrev escape" |
| do_make_dir(sbox, 'E/@', 'E/@', r"svn: E125001: 'E[\\/]@'") |
| |
| #===================================================================== |
| # Tests for 'svn remove' in the current directory |
| |
| def remove_here_1_escape_peg(sbox): |
| "remove 'iota' with pegrev escape" |
| do_remove(sbox, 'iota', 'iota@') |
| |
| def remove_here_2_escape_peg(sbox): |
| "remove '@zeta' with pegrev escape" |
| do_remove(sbox, '@zeta', '@zeta@') |
| |
| def remove_here_3_escape_peg(sbox): |
| "remove '_@theta' with pegrev escape" |
| do_remove(sbox, '_@theta', '_@theta@') |
| |
| def remove_here_4_escape_peg(sbox): |
| "remove '.@kappa' with pegrev escape" |
| do_remove(sbox, '.@kappa', '.@kappa@') |
| |
| def remove_here_5_escape_peg(sbox): |
| "remove 'lambda@' with pegrev escape" |
| do_remove(sbox, 'lambda@', 'lambda@@') |
| |
| def remove_here_6_escape_peg(sbox): |
| "remove '@omicron@' with pegrev escape" |
| do_remove(sbox, '@omicron@', '@omicron@@') |
| |
| def remove_here_7_escape_peg(sbox): |
| "remove '@' with pegrev escape" |
| do_remove(sbox, '@', '@@') |
| |
| #--------------------------------------------------------------------- |
| |
| def remove_here_1_no_escape_peg(sbox): |
| "remove 'iota' without pegrev escape" |
| do_remove(sbox, 'iota', 'iota') |
| |
| def remove_here_2_no_escape_peg(sbox): |
| "remove '@zeta' without pegrev escape" |
| do_remove(sbox, '@zeta', '@zeta', "svn: E125001: '@zeta'") |
| |
| def remove_here_3_no_escape_peg(sbox): |
| "remove '_@theta' without pegrev escape" |
| do_remove(sbox, '_@theta', '_@theta', "svn: E200009: '_@theta'") |
| |
| @Wimp("The error message mentions '@kappa' instead of '.@kappa'") |
| def remove_here_4_no_escape_peg(sbox): |
| "remove '.@kappa' without pegrev escape" |
| do_remove(sbox, '.@kappa', '.@kappa', "svn: E200009: '.@kappa'") |
| |
| def remove_here_5_no_escape_peg(sbox): |
| "remove 'lambda@' without pegrev escape" |
| do_remove(sbox, 'lambda@', 'lambda@', 'svn: E200005: ') |
| |
| def remove_here_6_no_escape_peg(sbox): |
| "remove '@omicron@' without pegrev escape" |
| do_remove(sbox, '@omicron@', '@omicron@', 'svn: E200005: ') |
| |
| def remove_here_7_no_escape_peg(sbox): |
| "remove '@' without pegrev escape" |
| do_remove(sbox, '@', '@', "svn: E125001: '@'") |
| |
| #===================================================================== |
| # Tests for 'svn remove' in a subdirectory directory |
| |
| def remove_subdir_1_escape_peg(sbox): |
| "remove 'A/alpha' with pegrev escape" |
| do_remove(sbox, 'A/alpha', 'A/alpha@') |
| |
| def remove_subdir_2_escape_peg(sbox): |
| "remove 'B/@beta' with pegrev escape" |
| do_remove(sbox, 'B/@beta', 'B/@beta@') |
| |
| def remove_subdir_3_escape_peg(sbox): |
| "remove 'G/_@gamma' with pegrev escape" |
| do_remove(sbox, 'G/_@gamma', 'G/_@gamma@') |
| |
| def remove_subdir_4_escape_peg(sbox): |
| "remove 'D/.@delta' with pegrev escape" |
| do_remove(sbox, 'D/.@delta', 'D/.@delta@') |
| |
| def remove_subdir_5_escape_peg(sbox): |
| "remove 'B/pi@' with pegrev escape" |
| do_remove(sbox, 'B/pi@', 'B/pi@@') |
| |
| def remove_subdir_6_escape_peg(sbox): |
| "remove 'A/@omega@' with pegrev escape" |
| do_remove(sbox, 'A/@omega@', 'A/@omega@@') |
| |
| def remove_subdir_7_escape_peg(sbox): |
| "remove 'B/@' with pegrev escape" |
| do_remove(sbox, 'B/@', 'B/@@') |
| |
| def remove_subdir_7a_escape_peg(sbox): |
| "remove missing 'E/@' with pegrev escape" |
| do_remove(sbox, 'E/@', 'E/@@', r"svn: E200005: '.*[\\/]E[\\/]@'") |
| |
| def remove_subdir_7b_escape_peg(sbox): |
| "remove missing '@/@' with pegrev escape" |
| do_remove(sbox, '@/@@', '@/@@', r"svn: E200005: '.*[\\/]@[\\/]@'") |
| |
| #--------------------------------------------------------------------- |
| |
| def remove_subdir_1_no_escape_peg(sbox): |
| "remove 'A/alpha' without pegrev escape" |
| do_remove(sbox, 'A/alpha', 'A/alpha') |
| |
| @Wimp("The error message mentions 'B@beta' instead of 'B/@beta'") |
| @Wimp("The error message should be E125001") |
| def remove_subdir_2_no_escape_peg(sbox): |
| "remove 'B/@beta' without pegrev escape" |
| do_remove(sbox, 'B/@beta', 'B/@beta', r"svn: E200009: 'B[\\/]@beta'") |
| |
| def remove_subdir_3_no_escape_peg(sbox): |
| "remove 'G/_@gamma' without pegrev escape" |
| do_remove(sbox, 'G/_@gamma', 'G/_@gamma', r"svn: E200009: 'G[\\/]_@gamma'") |
| |
| @Wimp("The error message mentions 'D@delta' instead of 'D/.@delta'") |
| def remove_subdir_4_no_escape_peg(sbox): |
| "remove 'D/.@delta' without pegrev escape" |
| do_remove(sbox, 'D/.@delta', 'D/.@delta', "svn: E200009: 'D/.@delta'") |
| |
| # Skip tests 5 and 6 that remove a node with a trailing @ in the name |
| # because is correctly interpreted as a peg revision escape. This is already |
| # tested by: |
| # - remove_subdir_5_escape_peg |
| # - remove_subdir__escape_peg |
| |
| @Wimp("Removes B instead of reporting E125001 for B/@") |
| def remove_subdir_7_no_escape_peg(sbox): |
| "remove 'B/@' without pegrev escape" |
| do_remove(sbox, 'B/@', 'B/@') #, r"svn: E125001: 'B[\\/]@'") |
| |
| @Wimp("Removes E instead of reporting ENOENT or E125001 for E/@") |
| def remove_subdir_7a_no_escape_peg(sbox): |
| "remove missing 'E/@' without pegrev escape" |
| do_remove(sbox, 'E/@', 'E/@') #, r"svn: E125001: 'E[\\/]@'") |
| |
| @Wimp("Removes @ instead of reporting ENOENT or E125001 for @/@") |
| def remove_subdir_7b_no_escape_peg(sbox): |
| "remove missing '@/@' without pegrev escape" |
| do_remove(sbox, '@/@', '@/@') #, r"svn: E125001: '@[\\/]@'") |
| |
| #===================================================================== |
| # Test for 'svn move' to a subdirectory |
| |
| @Wimp("Rename creates 'E/@tau@' instead of '@/@tau'") |
| @Issue(4530) |
| def rename_to_subdir_2_dst_escape_peg(sbox): |
| "rename 'iota' to 'E/@tau with pegrev escape" |
| # NOTE: This rename succeeds, but creates E/@tau@ instead of E/@tau, even |
| # though it should strip away the pegrev escape from the target. |
| do_rename(sbox, 'iota', 'iota', 'E/@tau', 'E/@tau@') |
| |
| #--------------------------------------------------------------------- |
| |
| @Wimp("Rename creates 'E@tau' instead of failing") |
| @Issue(4530) |
| def rename_to_subdir_2_no_dst_escape_peg(sbox): |
| "rename 'iota' to 'E/@tau without pegrev escape" |
| # NOTE: This rename succeeds, but creates E@tau in the current directory, |
| # when instead it should fail with 'svn: E125001: ...'. |
| do_rename(sbox, 'iota', 'iota', 'E/@tau', 'E/@tau') ### 'svn: E200009: ' |
| |
| |
| ######################################################################## |
| # Run the tests |
| |
| # list all tests here, starting with None: |
| test_list = [ None, |
| add_file_here_1_escape_peg, |
| add_file_here_2_escape_peg, |
| add_file_here_3_escape_peg, |
| add_file_here_4_escape_peg, |
| add_file_here_5_escape_peg, |
| add_file_here_6_escape_peg, |
| add_file_here_7_escape_peg, |
| |
| add_file_here_1_no_escape_peg, |
| add_file_here_2_no_escape_peg, |
| add_file_here_3_no_escape_peg, |
| add_file_here_4_no_escape_peg, |
| add_file_here_5_no_escape_peg, |
| add_file_here_6_no_escape_peg, |
| add_file_here_7_no_escape_peg, |
| |
| add_file_subdir_1_escape_peg, |
| add_file_subdir_2_escape_peg, |
| add_file_subdir_3_escape_peg, |
| add_file_subdir_4_escape_peg, |
| add_file_subdir_5_escape_peg, |
| add_file_subdir_6_escape_peg, |
| add_file_subdir_7_escape_peg, |
| |
| add_file_subdir_1_no_escape_peg, |
| add_file_subdir_2_no_escape_peg, |
| add_file_subdir_3_no_escape_peg, |
| add_file_subdir_4_no_escape_peg, |
| add_file_subdir_5_no_escape_peg, |
| add_file_subdir_6_no_escape_peg, |
| add_file_subdir_7_no_escape_peg, |
| |
| make_dir_here_1_escape_peg, |
| make_dir_here_2_escape_peg, |
| make_dir_here_3_escape_peg, |
| make_dir_here_4_escape_peg, |
| make_dir_here_5_escape_peg, |
| make_dir_here_6_escape_peg, |
| make_dir_here_7_escape_peg, |
| |
| make_dir_here_1_no_escape_peg, |
| make_dir_here_2_no_escape_peg, |
| make_dir_here_3_no_escape_peg, |
| make_dir_here_4_no_escape_peg, |
| # skipped: make_dir_here_5_no_escape_peg |
| # skipped: make_dir_here_6_no_escape_peg |
| make_dir_here_7_no_escape_peg, |
| |
| make_dir_subdir_1_escape_peg, |
| make_dir_subdir_2_escape_peg, |
| make_dir_subdir_3_escape_peg, |
| make_dir_subdir_4_escape_peg, |
| make_dir_subdir_5_escape_peg, |
| make_dir_subdir_6_escape_peg, |
| make_dir_subdir_7_escape_peg, |
| |
| make_dir_subdir_1_no_escape_peg, |
| make_dir_subdir_2_no_escape_peg, |
| make_dir_subdir_3_no_escape_peg, |
| make_dir_subdir_4_no_escape_peg, |
| # skipped: make_dir_subdir_5_no_escape_peg |
| # skipped: make_dir_subdir_6_no_escape_peg |
| make_dir_subdir_7_no_escape_peg, |
| |
| remove_here_1_escape_peg, |
| remove_here_2_escape_peg, |
| remove_here_3_escape_peg, |
| remove_here_4_escape_peg, |
| remove_here_5_escape_peg, |
| remove_here_6_escape_peg, |
| remove_here_7_escape_peg, |
| |
| remove_here_1_no_escape_peg, |
| remove_here_2_no_escape_peg, |
| remove_here_3_no_escape_peg, |
| remove_here_4_no_escape_peg, |
| remove_here_5_no_escape_peg, |
| remove_here_6_no_escape_peg, |
| remove_here_7_no_escape_peg, |
| |
| remove_subdir_1_escape_peg, |
| remove_subdir_2_escape_peg, |
| remove_subdir_3_escape_peg, |
| remove_subdir_4_escape_peg, |
| remove_subdir_5_escape_peg, |
| remove_subdir_6_escape_peg, |
| remove_subdir_7_escape_peg, |
| remove_subdir_7a_escape_peg, |
| remove_subdir_7b_escape_peg, |
| |
| remove_subdir_1_no_escape_peg, |
| remove_subdir_2_no_escape_peg, |
| remove_subdir_3_no_escape_peg, |
| remove_subdir_4_no_escape_peg, |
| # skipped: remove_subdir_5_no_escape_peg, |
| # skipped: remove_subdir_6_no_escape_peg, |
| remove_subdir_7_no_escape_peg, |
| remove_subdir_7a_no_escape_peg, |
| remove_subdir_7b_no_escape_peg, |
| |
| rename_to_subdir_2_dst_escape_peg, |
| rename_to_subdir_2_no_dst_escape_peg, |
| ] |
| |
| if __name__ == '__main__': |
| svntest.main.run_tests(test_list) |
| # NOTREACHED |
| |
| |
| ### End of file. |