Mercurial > public > mercurial-scm > hg-stable
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)