Author: pburba Date: Wed Jan 6 16:48:38 2010 New Revision: 896522 URL: http://svn.apache.org/viewvc?rev=896522&view=rev Log: New test for 'svn resolve -R --accept [base | theirs-full | mine-full]'.
This works fine on trunk but is currently failing on 1.6.x and the only existing test coverage of this is in the Ruby bindings tests. See http://svn.haxx.se/dev/archive-2010-01/0088.shtml * subversion/tests/cmdline/resolve_tests.py: New Python test file. There are some 'svn resolve' tests scattered throughout other tests, but a subcommand deserves its own home. Heck, maybe this will encourage some actual coverage! Added: subversion/trunk/subversion/tests/cmdline/resolve_tests.py (with props) Added: subversion/trunk/subversion/tests/cmdline/resolve_tests.py URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/resolve_tests.py?rev=896522&view=auto ============================================================================== --- subversion/trunk/subversion/tests/cmdline/resolve_tests.py (added) +++ subversion/trunk/subversion/tests/cmdline/resolve_tests.py Wed Jan 6 16:48:38 2010 @@ -0,0 +1,112 @@ +#!/usr/bin/env python +# +# resolve_tests.py: testing 'svn resolve' +# +# Subversion is a tool for revision control. +# See http://subversion.tigris.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, sys, re, os +import time + +# Our testing module +import svntest +from svntest import wc + +# (abbreviation) +Item = wc.StateItem +XFail = svntest.testcase.XFail +Skip = svntest.testcase.Skip +SkipUnless = svntest.testcase.SkipUnless + +from merge_tests import set_up_branch + +# 'svn resolve --accept [ base | mine-full | theirs-full ]' was segfaulting +# on 1.6.x. Prior to this test, the bug was only caught by the Ruby binding +# tests, see http://svn.haxx.se/dev/archive-2010-01/0088.shtml. +def automatic_conflict_resolution(sbox): + "resolve -R --accept [base | mf | tf]" + + sbox.build() + wc_dir = sbox.wc_dir + + # Some paths we'll care about + A_COPY_path = os.path.join(wc_dir, "A_COPY") + psi_COPY_path = os.path.join(wc_dir, "A_COPY", "D", "H", "psi") + + # Branch A to A_COPY in r2, then make some changes under 'A' in r3-6. + wc_disk, wc_status = set_up_branch(sbox) + + # Make a change on the A_COPY branch such that a subsequent merge + # conflicts. + svntest.main.file_write(psi_COPY_path, "Branch content.\n") + svntest.actions.run_and_verify_svn(None, None, [], + 'commit', '-m', 'log msg', wc_dir) + def do_text_conflicting_merge(): + svntest.actions.run_and_verify_svn(None, None, [], + 'revert', '--recursive', A_COPY_path) + svntest.actions.run_and_verify_svn(None, + "(--- Merging r3 into .*A_COPY':\n)|" + "(C .*psi\n)|" + "(Summary of conflicts:\n)|" + "( Text conflicts: 1\n)", + [], 'merge', '-c3', + sbox.repo_url + '/A', + A_COPY_path) + + # Test 'svn resolve -R --accept base' + do_text_conflicting_merge() + svntest.actions.run_and_verify_resolve([psi_COPY_path], + '-R', '--accept', 'base', + A_COPY_path) + wc_disk.tweak('A_COPY/D/H/psi', contents="This is the file 'psi'.\n") + svntest.actions.verify_disk(wc_dir, wc_disk) + + # Test 'svn resolve -R --accept mine-full' + do_text_conflicting_merge() + svntest.actions.run_and_verify_resolve([psi_COPY_path], + '-R', '--accept', 'mine-full', + A_COPY_path) + wc_disk.tweak('A_COPY/D/H/psi', contents="Branch content.\n") + svntest.actions.verify_disk(wc_dir, wc_disk) + + # Test 'svn resolve -R --accept theirs-full' + do_text_conflicting_merge() + svntest.actions.run_and_verify_resolve([psi_COPY_path], + '-R', '--accept', 'theirs-full', + A_COPY_path) + wc_disk.tweak('A_COPY/D/H/psi', contents="New content") + svntest.actions.verify_disk(wc_dir, wc_disk) + +######################################################################## +# Run the tests + +# list all tests here, starting with None: +test_list = [ None, + automatic_conflict_resolution, + ] + +if __name__ == '__main__': + svntest.main.run_tests(test_list) + # NOTREACHED + +### End of file. Propchange: subversion/trunk/subversion/tests/cmdline/resolve_tests.py ------------------------------------------------------------------------------ svn:eol-style = native Propchange: subversion/trunk/subversion/tests/cmdline/resolve_tests.py ------------------------------------------------------------------------------ svn:executable = *
