##// END OF EJS Templates
tests: fix test-sparse-revlog...
tests: fix test-sparse-revlog This one is not covered by the CIbecause I requires an expensive artifact to be cached. So it goes out of think on regular basis (we should fix that…) The test ouput was affected by e706bb41fdb3 as we filtering now happens sooner, removing for the output.

File last commit:

r49801:642e31cb default
r50521:da636e7a default
Show More
test-rust-discovery.py
119 lines | 4.1 KiB | text/x-python | PythonLexer
/ tests / test-rust-discovery.py
Georges Racinet
rust-discovery: cpython bindings for the core logic...
r42356 import unittest
Raphaël Gomès
module-policy: update rust extension import to use the new module policy...
r42895 from mercurial import policy
PartialDiscovery = policy.importrust('discovery', member='PartialDiscovery')
Georges Racinet
rust-discovery: cpython bindings for the core logic...
r42356
try:
from mercurial.cext import parsers as cparsers
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'
Augie Fackler
formatting: blacken the codebase...
r43346 )
Georges Racinet
rust-discovery: cpython bindings for the core logic...
r42356
Gregory Szorc
py3: use class X: instead of class X(object):...
r49801 class fakechangelog:
Augie Fackler
tests: split joint repo/changelog fake into one for each type...
r43004 def __init__(self, idx):
self.index = idx
Augie Fackler
formatting: blacken the codebase...
r43346
Gregory Szorc
py3: use class X: instead of class X(object):...
r49801 class fakerepo:
Georges Racinet
rust-discovery: read the index from a repo passed at init...
r42964 def __init__(self, idx):
"""Just make so that self.changelog.index is the given idx."""
Augie Fackler
tests: split joint repo/changelog fake into one for each type...
r43004 self.changelog = fakechangelog(idx)
Georges Racinet
rust-discovery: cpython bindings for the core logic...
r42356
Augie Fackler
formatting: blacken the codebase...
r43346
@unittest.skipIf(
PartialDiscovery is None or cparsers is None,
"rustext or the C Extension parsers module "
"discovery relies on is not available",
)
Georges Racinet
rust-discovery: cpython bindings for the core logic...
r42356 class rustdiscoverytest(unittest.TestCase):
"""Test the correctness of binding to Rust code.
This test is merely for the binding to Rust itself: extraction of
Python variable, giving back the results etc.
It is not meant to test the algorithmic correctness of the provided
methods. Hence the very simple embedded index data is good enough.
Algorithmic correctness is asserted by the Rust unit tests.
"""
def parseindex(self):
return cparsers.parse_index2(data_non_inlined, False)[0]
Georges Racinet
rust-discovery: read the index from a repo passed at init...
r42964 def repo(self):
return fakerepo(self.parseindex())
Georges Racinet
rust-discovery: cpython bindings for the core logic...
r42356 def testindex(self):
idx = self.parseindex()
# checking our assumptions about the index binary data:
Augie Fackler
formatting: blacken the codebase...
r43346 self.assertEqual(
{i: (r[5], r[6]) for i, r in enumerate(idx)},
{0: (-1, -1), 1: (0, -1), 2: (1, -1), 3: (2, -1)},
)
Georges Racinet
rust-discovery: cpython bindings for the core logic...
r42356
def testaddcommonsmissings(self):
Georges Racinet
rust-discovery: read the index from a repo passed at init...
r42964 disco = PartialDiscovery(self.repo(), [3], True)
Georges Racinet
rust-discovery: cpython bindings for the core logic...
r42356 self.assertFalse(disco.hasinfo())
self.assertFalse(disco.iscomplete())
disco.addcommons([1])
self.assertTrue(disco.hasinfo())
self.assertFalse(disco.iscomplete())
disco.addmissings([2])
self.assertTrue(disco.hasinfo())
self.assertTrue(disco.iscomplete())
self.assertEqual(disco.commonheads(), {1})
Georges Racinet
rust-discovery: implementing and exposing stats()...
r42357 def testaddmissingsstats(self):
Georges Racinet
rust-discovery: read the index from a repo passed at init...
r42964 disco = PartialDiscovery(self.repo(), [3], True)
Georges Racinet
rust-discovery: implementing and exposing stats()...
r42357 self.assertIsNone(disco.stats()['undecided'], None)
disco.addmissings([2])
self.assertEqual(disco.stats()['undecided'], 2)
Georges Racinet
rust-discovery: cpython bindings for the core logic...
r42356 def testaddinfocommonfirst(self):
Georges Racinet
rust-discovery: read the index from a repo passed at init...
r42964 disco = PartialDiscovery(self.repo(), [3], True)
Georges Racinet
rust-discovery: cpython bindings for the core logic...
r42356 disco.addinfo([(1, True), (2, False)])
self.assertTrue(disco.hasinfo())
self.assertTrue(disco.iscomplete())
self.assertEqual(disco.commonheads(), {1})
def testaddinfomissingfirst(self):
Georges Racinet
rust-discovery: read the index from a repo passed at init...
r42964 disco = PartialDiscovery(self.repo(), [3], True)
Georges Racinet
rust-discovery: cpython bindings for the core logic...
r42356 disco.addinfo([(2, False), (1, True)])
self.assertTrue(disco.hasinfo())
self.assertTrue(disco.iscomplete())
self.assertEqual(disco.commonheads(), {1})
Georges Racinet
rust-discovery: optionally don't randomize at all, for tests...
r42968 def testinitnorandom(self):
PartialDiscovery(self.repo(), [3], True, randomize=False)
Augie Fackler
formatting: blacken the codebase...
r43346
Georges Racinet
rust-discovery: cpython bindings for the core logic...
r42356 if __name__ == '__main__':
import silenttestrunner
Augie Fackler
formatting: blacken the codebase...
r43346
Georges Racinet
rust-discovery: cpython bindings for the core logic...
r42356 silenttestrunner.main(__name__)