changeset 43950:8a8305f557d0

test: extract some generic data and utility from test-rust-ancestor.py We will reuse this for more tests related to revlog index. In pratice this series of changesets add an index implementation provided from Rust and we want to be able to test it. Differential Revision: https://phab.mercurial-scm.org/D7652
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Wed, 11 Dec 2019 18:40:04 +0100
parents 0671f0a19d93
children f98f0e3ddaa1
files mercurial/testing/revlog.py tests/test-rust-ancestor.py
diffstat 2 files changed, 52 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/testing/revlog.py	Wed Dec 11 18:40:04 2019 +0100
@@ -0,0 +1,38 @@
+from __future__ import absolute_import
+import unittest
+
+# picked from test-parse-index2, copied rather than imported
+# so that it stays stable even if test-parse-index2 changes or disappears.
+data_non_inlined = (
+    b'\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01D\x19'
+    b'\x00\x07e\x12\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff'
+    b'\xff\xff\xff\xff\xd1\xf4\xbb\xb0\xbe\xfc\x13\xbd\x8c\xd3\x9d'
+    b'\x0f\xcd\xd9;\x8c\x07\x8cJ/\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+    b'\x00\x00\x00\x00\x00\x00\x01D\x19\x00\x00\x00\x00\x00\xdf\x00'
+    b'\x00\x01q\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\xff'
+    b'\xff\xff\xff\xc1\x12\xb9\x04\x96\xa4Z1t\x91\xdfsJ\x90\xf0\x9bh'
+    b'\x07l&\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+    b'\x00\x01D\xf8\x00\x00\x00\x00\x01\x1b\x00\x00\x01\xb8\x00\x00'
+    b'\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\xff\xff\xff\xff\x02\n'
+    b'\x0e\xc6&\xa1\x92\xae6\x0b\x02i\xfe-\xe5\xbao\x05\xd1\xe7\x00'
+    b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01F'
+    b'\x13\x00\x00\x00\x00\x01\xec\x00\x00\x03\x06\x00\x00\x00\x01'
+    b'\x00\x00\x00\x03\x00\x00\x00\x02\xff\xff\xff\xff\x12\xcb\xeby1'
+    b'\xb6\r\x98B\xcb\x07\xbd`\x8f\x92\xd9\xc4\x84\xbdK\x00\x00\x00'
+    b'\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+)
+
+
+try:
+    from ..cext import parsers as cparsers
+except ImportError:
+    cparsers = None
+
+
+@unittest.skipIf(
+    cparsers is None,
+    'The C version of the "parsers" module is not available. It is needed for this test.',
+)
+class RevlogBasedTestBase(unittest.TestCase):
+    def parseindex(self):
+        return cparsers.parse_index2(data_non_inlined, False)[0]
--- a/tests/test-rust-ancestor.py	Tue Dec 17 23:33:35 2019 -0500
+++ b/tests/test-rust-ancestor.py	Wed Dec 11 18:40:04 2019 +0100
@@ -7,6 +7,8 @@
     node,
 )
 
+from mercurial.testing import revlog as revlogtesting
+
 try:
     from mercurial import rustext
 
@@ -27,34 +29,18 @@
 except ImportError:
     cparsers = None
 
-# picked from test-parse-index2, copied rather than imported
-# so that it stays stable even if test-parse-index2 changes or disappears.
-data_non_inlined = (
-    b'\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01D\x19'
-    b'\x00\x07e\x12\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff'
-    b'\xff\xff\xff\xff\xd1\xf4\xbb\xb0\xbe\xfc\x13\xbd\x8c\xd3\x9d'
-    b'\x0f\xcd\xd9;\x8c\x07\x8cJ/\x00\x00\x00\x00\x00\x00\x00\x00\x00'
-    b'\x00\x00\x00\x00\x00\x00\x01D\x19\x00\x00\x00\x00\x00\xdf\x00'
-    b'\x00\x01q\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\xff'
-    b'\xff\xff\xff\xc1\x12\xb9\x04\x96\xa4Z1t\x91\xdfsJ\x90\xf0\x9bh'
-    b'\x07l&\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
-    b'\x00\x01D\xf8\x00\x00\x00\x00\x01\x1b\x00\x00\x01\xb8\x00\x00'
-    b'\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\xff\xff\xff\xff\x02\n'
-    b'\x0e\xc6&\xa1\x92\xae6\x0b\x02i\xfe-\xe5\xbao\x05\xd1\xe7\x00'
-    b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01F'
-    b'\x13\x00\x00\x00\x00\x01\xec\x00\x00\x03\x06\x00\x00\x00\x01'
-    b'\x00\x00\x00\x03\x00\x00\x00\x02\xff\xff\xff\xff\x12\xcb\xeby1'
-    b'\xb6\r\x98B\xcb\x07\xbd`\x8f\x92\xd9\xc4\x84\xbdK\x00\x00\x00'
-    b'\x00\x00\x00\x00\x00\x00\x00\x00\x00'
-)
-
 
 @unittest.skipIf(
-    rustext is None or cparsers is None,
-    "rustext or the C Extension parsers module "
-    "ancestor relies on is not available",
+    rustext is None,
+    'The Rust version of the "ancestor" module is not available. It is needed'
+    ' for this test.',
 )
-class rustancestorstest(unittest.TestCase):
+@unittest.skipIf(
+    rustext is None,
+    'The Rust or C version of the "parsers" module, which the "ancestor" module'
+    ' relies on, is not available.',
+)
+class rustancestorstest(revlogtesting.RevlogBasedTestBase):
     """Test the correctness of binding to Rust code.
 
     This test is merely for the binding to Rust itself: extraction of
@@ -67,9 +53,6 @@
     Algorithmic correctness is asserted by the Rust unit tests.
     """
 
-    def parseindex(self):
-        return cparsers.parse_index2(data_non_inlined, False)[0]
-
     def testiteratorrevlist(self):
         idx = self.parseindex()
         # checking test assumption about the index binary data:
@@ -150,7 +133,9 @@
 
     def testgrapherror(self):
         data = (
-            data_non_inlined[: 64 + 27] + b'\xf2' + data_non_inlined[64 + 28 :]
+            revlogtesting.data_non_inlined[: 64 + 27]
+            + b'\xf2'
+            + revlogtesting.data_non_inlined[64 + 28 :]
         )
         idx = cparsers.parse_index2(data, False)[0]
         with self.assertRaises(rustext.GraphError) as arc: