Author: troycurtisjr
Date: Sun Feb 25 17:26:45 2018
New Revision: 1825316

URL: http://svn.apache.org/viewvc?rev=1825316&view=rev
Log:
Update external 'diff' command test for svn.fs.FileDiff() to depend on presence
of the command instead of testing for 'win32' platform.

* subversion/bindings/swig/python/tests/fs.py
  (SubversionFSTestCase.test_diff_repos_paths): Split function into internal
   and external variants.
  (SubversionFSTestCase.test_diff_repos_paths_external): New test method.
  (SubversionFSTestCase.test_diff_repos_paths_internal): New test method.
  (SubversionFSTestCase.setUp): Added unicode test commit from original
   test_diff_repos_paths() so all test methods have a common repository setup.

Found by: stsp

Modified:
    subversion/trunk/subversion/bindings/swig/python/tests/fs.py

Modified: subversion/trunk/subversion/bindings/swig/python/tests/fs.py
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/python/tests/fs.py?rev=1825316&r1=1825315&r2=1825316&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/swig/python/tests/fs.py (original)
+++ subversion/trunk/subversion/bindings/swig/python/tests/fs.py Sun Feb 25 
17:26:45 2018
@@ -19,8 +19,9 @@
 # under the License.
 #
 #
-import os, unittest, sys
+import os, unittest, sys, errno
 from tempfile import mkstemp
+from subprocess import Popen, PIPE
 try:
   # Python >=3.0
   from urllib.parse import urljoin
@@ -46,23 +47,13 @@ class SubversionFSTestCase(unittest.Test
     self.fs = repos.fs(self.repos)
     self.rev = fs.youngest_rev(self.fs)
     self.tmpfile = None
-
-  def tearDown(self):
-    self.fs = None
-    self.repos = None
-    self.temper.cleanup()
-
-    if self.tmpfile is not None:
-      os.remove(self.tmpfile)
-
-  def test_diff_repos_paths(self):
-    """Test diffing of a repository path."""
+    self.unistr = u'⊙_ʘ'
     tmpfd, self.tmpfile = mkstemp()
 
     tmpfp = os.fdopen(tmpfd, "wb")
 
     # Use a unicode file to ensure proper non-ascii handling.
-    tmpfp.write(u'⊙_ʘ'.encode('utf8'))
+    tmpfp.write(self.unistr.encode('utf8'))
 
     tmpfp.close()
 
@@ -81,27 +72,48 @@ class SubversionFSTestCase(unittest.Test
                                 urljoin(self.repos_uri +"/", 
"trunk/UniTest.txt"),
                                 True, True,
                                 clientctx)
-    self.assertEqual(commitinfo.revision, self.rev + 1)
+
+    self.commitedrev = commitinfo.revision
+
+  def tearDown(self):
+    self.fs = None
+    self.repos = None
+    self.temper.cleanup()
+
+    if self.tmpfile is not None:
+      os.remove(self.tmpfile)
+
+  def test_diff_repos_paths_internal(self):
+    """Test diffing of a repository path using the internal diff."""
 
     # Test standard internal diff
-    fdiff = fs.FileDiff(fs.revision_root(self.fs, commitinfo.revision), 
"/trunk/UniTest.txt",
+    fdiff = fs.FileDiff(fs.revision_root(self.fs, self.commitedrev), 
"/trunk/UniTest.txt",
                         None, None, diffoptions=None)
 
     diffp = fdiff.get_pipe()
     diffoutput = diffp.read().decode('utf8')
 
-    self.assertTrue(diffoutput.find(u'-⊙_ʘ') > 0)
+    self.assertTrue(diffoutput.find(u'-' + self.unistr) > 0)
+
+  def test_diff_repos_paths_external(self):
+    """Test diffing of a repository path using an external diff (if 
available)."""
+
+    # Test if this environment has the diff command, if not then skip the test
+    try:
+      diffout, differr = Popen(["diff"], stdin=PIPE, stderr=PIPE).communicate()
+
+    except OSError as err:
+      if err.errno == errno.ENOENT:
+        self.skipTest("'diff' command not present")
+      else:
+        raise err
 
-    # Test passing diffoptions to an external 'diff' executable.
-    # It is unusual to have the 'diff' tool on Windows, so do not
-    # try the test there.
-    if sys.platform != "win32":
-      fdiff = fs.FileDiff(fs.revision_root(self.fs, commitinfo.revision), 
"/trunk/UniTest.txt",
-                          None, None, diffoptions=['--normal'])
-      diffp = fdiff.get_pipe()
-      diffoutput = diffp.read().decode('utf8')
+    fdiff = fs.FileDiff(fs.revision_root(self.fs, self.commitedrev), 
"/trunk/UniTest.txt",
+                        None, None, diffoptions=[])
+    diffp = fdiff.get_pipe()
+    diffoutput = diffp.read().decode('utf8')
 
-      self.assertTrue(diffoutput.find(u'< ⊙_ʘ') > 0)
+    self.assertTrue(diffoutput.find(u'< ' + self.unistr) > 0)
 
 def suite():
     return unittest.defaultTestLoader.loadTestsFromTestCase(


Reply via email to