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 = *


Reply via email to