diff --git a/mercurial/testing/revlog.py b/mercurial/testing/revlog.py new file mode 100644 --- /dev/null +++ b/mercurial/testing/revlog.py @@ -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] diff --git a/tests/test-rust-ancestor.py b/tests/test-rust-ancestor.py --- a/tests/test-rust-ancestor.py +++ b/tests/test-rust-ancestor.py @@ -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: