diff mercurial/testing/revlog.py @ 52796:07740bd86fd9

rust-pyo3: reviving test-rust-revlog.py This test file was removed in 7346f93be7a4. Adaptation to the new `InnerRevlog` / `RustIndexProxy` structure was as easy as redefining the `parserustindex()` method to use `RustIndexProxy`. As we did before with `test-rust-ancestors.py`, we are preparing a mixin class that will contain tests for both bindings. Existing tests will migrate from `RustInnerRevlogTest` (the one for `hg-cpython`) to the mixin.
author Georges Racinet <georges.racinet@cloudcrane.io>
date Sun, 22 Dec 2024 20:26:57 +0100
parents cf5b47b885b1
children
line wrap: on
line diff
--- a/mercurial/testing/revlog.py	Wed Dec 25 14:00:34 2024 +0100
+++ b/mercurial/testing/revlog.py	Sun Dec 22 20:26:57 2024 +0100
@@ -44,9 +44,22 @@
     rust_revlog = None
 
 
+try:
+    from ..pyo3_rustext import (  # pytype: disable=import-error
+        revlog as pyo3_revlog,
+    )
+
+    pyo3_revlog.__name__  # force actual import
+except ImportError:
+    pyo3_revlog = None
+
+
 @unittest.skipIf(
     cparsers is None,
-    'The C version of the "parsers" module is not available. It is needed for this test.',
+    (
+        'The C version of the "parsers" module is not available. '
+        'It is needed for this test.'
+    ),
 )
 class RevlogBasedTestBase(unittest.TestCase):
     def parseindex(self, data=None):
@@ -65,13 +78,21 @@
     revlog_delta_config = revlog.DeltaConfig()
     revlog_feature_config = revlog.FeatureConfig()
 
+    @classmethod
+    def irl_class(cls):
+        return rust_revlog.InnerRevlog
+
+    @classmethod
+    def nodetree(cls, idx):
+        return rust_revlog.NodeTree(idx)
+
     def make_inner_revlog(
         self, data=None, vfs_is_readonly=True, kind=KIND_CHANGELOG
     ):
         if data is None:
             data = data_non_inlined
 
-        return rust_revlog.InnerRevlog(
+        return self.irl_class()(
             vfs_base=b"Just a path",
             fncache=None,  # might be enough for now
             vfs_is_readonly=vfs_is_readonly,
@@ -91,3 +112,17 @@
 
     def parserustindex(self, data=None):
         return revlog.RustIndexProxy(self.make_inner_revlog(data=data))
+
+
+@unittest.skipIf(
+    pyo3_revlog is None,
+    'The Rust PyO3 revlog module is not available. It is needed for this test.',
+)
+class PyO3RevlogBasedTestBase(RustRevlogBasedTestBase):
+    @classmethod
+    def irl_class(cls):
+        return pyo3_revlog.InnerRevlog
+
+    @classmethod
+    def nodetree(cls, idx):
+        return pyo3_revlog.NodeTree(idx)