##// END OF EJS Templates
Added signature for changeset 411dc27fd9fd
Added signature for changeset 411dc27fd9fd

File last commit:

r47817:12450fbe default
r48358:29ea3b4c stable
Show More
test-manifest.py
460 lines | 15.2 KiB | text/x-python | PythonLexer
Pulkit Goyal
tests: make test-manifest use absolute_import
r28929 from __future__ import absolute_import
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214
Pulkit Goyal
tests: make test-manifest use absolute_import
r28929 import binascii
import itertools
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 import silenttestrunner
Pulkit Goyal
tests: make test-manifest use absolute_import
r28929 import unittest
Augie Fackler
manifest: make sure there's a filename before bothering to look for newline...
r40635 import zlib
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214
Joerg Sonnenberger
node: introduce nodeconstants class...
r47538 from mercurial.node import sha1nodeconstants
Pulkit Goyal
tests: make test-manifest use absolute_import
r28929 from mercurial import (
manifest as manifestmod,
match as matchmod,
Matt Harbison
tests: convert the `root` arg of matchmod.match() to local path separators...
r44416 util,
Pulkit Goyal
tests: make test-manifest use absolute_import
r28929 )
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 EMTPY_MANIFEST = b''
Martin von Zweigbergk
test-manifest: create constant for empty manifest...
r24569
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 HASH_1 = b'1' * 40
Martin von Zweigbergk
test-manifest: extract constants for binary hashes...
r24570 BIN_HASH_1 = binascii.unhexlify(HASH_1)
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 HASH_2 = b'f' * 40
Martin von Zweigbergk
test-manifest: extract constants for binary hashes...
r24570 BIN_HASH_2 = binascii.unhexlify(HASH_2)
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 HASH_3 = b'1234567890abcdef0987654321deadbeef0fcafe'
Martin von Zweigbergk
test-manifest: extract constants for binary hashes...
r24570 BIN_HASH_3 = binascii.unhexlify(HASH_3)
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 A_SHORT_MANIFEST = (
Augie Fackler
formatting: blacken the codebase...
r43346 b'bar/baz/qux.py\0%(hash2)s%(flag2)s\n' b'foo\0%(hash1)s%(flag1)s\n'
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 ) % {
b'hash1': HASH_1,
b'flag1': b'',
b'hash2': HASH_2,
b'flag2': b'l',
}
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549 A_DEEPER_MANIFEST = (
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 b'a/b/c/bar.py\0%(hash3)s%(flag1)s\n'
b'a/b/c/bar.txt\0%(hash1)s%(flag1)s\n'
b'a/b/c/foo.py\0%(hash3)s%(flag1)s\n'
b'a/b/c/foo.txt\0%(hash2)s%(flag2)s\n'
b'a/b/d/baz.py\0%(hash3)s%(flag1)s\n'
b'a/b/d/qux.py\0%(hash1)s%(flag2)s\n'
b'a/b/d/ten.txt\0%(hash3)s%(flag2)s\n'
b'a/b/dog.py\0%(hash3)s%(flag1)s\n'
b'a/b/fish.py\0%(hash2)s%(flag1)s\n'
b'a/c/london.py\0%(hash3)s%(flag2)s\n'
b'a/c/paper.txt\0%(hash2)s%(flag2)s\n'
b'a/c/paris.py\0%(hash2)s%(flag1)s\n'
b'a/d/apple.py\0%(hash3)s%(flag1)s\n'
b'a/d/pizza.py\0%(hash3)s%(flag2)s\n'
b'a/green.py\0%(hash1)s%(flag2)s\n'
b'a/purple.py\0%(hash2)s%(flag1)s\n'
b'app.py\0%(hash3)s%(flag1)s\n'
b'readme.txt\0%(hash2)s%(flag1)s\n'
Augie Fackler
formatting: blacken the codebase...
r43346 ) % {
b'hash1': HASH_1,
b'flag1': b'',
b'hash2': HASH_2,
b'flag2': b'l',
b'hash3': HASH_3,
}
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 HUGE_MANIFEST_ENTRIES = 200001
Augie Fackler
tests: make test-manifest finish importing in Python 3...
r32534 izip = getattr(itertools, 'izip', zip)
if 'xrange' not in globals():
xrange = range
Augie Fackler
formatting: blacken the codebase...
r43346 A_HUGE_MANIFEST = b''.join(
sorted(
b'file%d\0%s%s\n' % (i, h, f)
for i, h, f in izip(
xrange(200001),
itertools.cycle((HASH_1, HASH_2)),
itertools.cycle((b'', b'x', b'l')),
)
)
)
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214
Drew Gottlieb
test-manifest: make manifesttest a base class that is extended...
r24655 class basemanifesttests(object):
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 def parsemanifest(self, text):
Drew Gottlieb
test-manifest: make manifesttest a base class that is extended...
r24655 raise NotImplementedError('parsemanifest not implemented by test case')
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214
def testEmptyManifest(self):
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 m = self.parsemanifest(EMTPY_MANIFEST)
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 self.assertEqual(0, len(m))
Martin von Zweigbergk
test-manifest.py: rewrite tests in terms of manifestdict...
r24466 self.assertEqual([], list(m))
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214
def testManifest(self):
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 m = self.parsemanifest(A_SHORT_MANIFEST)
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 self.assertEqual([b'bar/baz/qux.py', b'foo'], list(m))
self.assertEqual(BIN_HASH_2, m[b'bar/baz/qux.py'])
self.assertEqual(b'l', m.flags(b'bar/baz/qux.py'))
self.assertEqual(BIN_HASH_1, m[b'foo'])
self.assertEqual(b'', m.flags(b'foo'))
Gregory Szorc
tests: use context manager form of assertRaises...
r32279 with self.assertRaises(KeyError):
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 m[b'wat']
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214
Augie Fackler
manifest: add test for long hashes...
r45201 def testManifestLongHashes(self):
m = self.parsemanifest(b'a\0' + b'f' * 64 + b'\n')
self.assertEqual(binascii.unhexlify(b'f' * 64), m[b'a'])
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 def testSetItem(self):
Martin von Zweigbergk
test-manifest: extract constants for binary hashes...
r24570 want = BIN_HASH_1
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 m = self.parsemanifest(EMTPY_MANIFEST)
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 m[b'a'] = want
self.assertIn(b'a', m)
self.assertEqual(want, m[b'a'])
self.assertEqual(b'a\0' + HASH_1 + b'\n', m.text())
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 m = self.parsemanifest(A_SHORT_MANIFEST)
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 m[b'a'] = want
self.assertEqual(want, m[b'a'])
Augie Fackler
formatting: blacken the codebase...
r43346 self.assertEqual(b'a\0' + HASH_1 + b'\n' + A_SHORT_MANIFEST, m.text())
Martin von Zweigbergk
test-manifest.py: separate out test for double-free after copy()...
r24465
Martin von Zweigbergk
test-manifest.py: rewrite tests in terms of manifestdict...
r24466 def testSetFlag(self):
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 want = b'x'
Martin von Zweigbergk
test-manifest.py: rewrite tests in terms of manifestdict...
r24466
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 m = self.parsemanifest(EMTPY_MANIFEST)
Martin von Zweigbergk
test-manifest.py: rewrite tests in terms of manifestdict...
r24466 # first add a file; a file-less flag makes no sense
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 m[b'a'] = BIN_HASH_1
m.setflag(b'a', want)
self.assertEqual(want, m.flags(b'a'))
self.assertEqual(b'a\0' + HASH_1 + want + b'\n', m.text())
Martin von Zweigbergk
test-manifest.py: rewrite tests in terms of manifestdict...
r24466
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 m = self.parsemanifest(A_SHORT_MANIFEST)
Martin von Zweigbergk
test-manifest.py: rewrite tests in terms of manifestdict...
r24466 # first add a file; a file-less flag makes no sense
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 m[b'a'] = BIN_HASH_1
m.setflag(b'a', want)
self.assertEqual(want, m.flags(b'a'))
Augie Fackler
formatting: blacken the codebase...
r43346 self.assertEqual(
b'a\0' + HASH_1 + want + b'\n' + A_SHORT_MANIFEST, m.text()
)
Martin von Zweigbergk
test-manifest.py: rewrite tests in terms of manifestdict...
r24466
Martin von Zweigbergk
test-manifest.py: separate out test for double-free after copy()...
r24465 def testCopy(self):
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 m = self.parsemanifest(A_SHORT_MANIFEST)
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 m[b'a'] = BIN_HASH_1
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 m2 = m.copy()
del m
Augie Fackler
formatting: blacken the codebase...
r43346 del m2 # make sure we don't double free() anything
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214
def testCompaction(self):
unhex = binascii.unhexlify
h1, h2 = unhex(HASH_1), unhex(HASH_2)
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 m = self.parsemanifest(A_SHORT_MANIFEST)
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 m[b'alpha'] = h1
m[b'beta'] = h2
del m[b'foo']
want = b'alpha\0%s\nbar/baz/qux.py\0%sl\nbeta\0%s\n' % (
Augie Fackler
formatting: blacken the codebase...
r43346 HASH_1,
HASH_2,
HASH_2,
)
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 self.assertEqual(want, m.text())
self.assertEqual(3, len(m))
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 self.assertEqual([b'alpha', b'bar/baz/qux.py', b'beta'], list(m))
self.assertEqual(h1, m[b'alpha'])
self.assertEqual(h2, m[b'bar/baz/qux.py'])
self.assertEqual(h2, m[b'beta'])
self.assertEqual(b'', m.flags(b'alpha'))
self.assertEqual(b'l', m.flags(b'bar/baz/qux.py'))
self.assertEqual(b'', m.flags(b'beta'))
Gregory Szorc
tests: use context manager form of assertRaises...
r32279 with self.assertRaises(KeyError):
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 m[b'foo']
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214
Martin von Zweigbergk
test-manifest.py: rewrite tests in terms of manifestdict...
r24466 def testMatchException(self):
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 m = self.parsemanifest(A_SHORT_MANIFEST)
Matt Harbison
tests: convert the `root` arg of matchmod.match() to local path separators...
r44416 match = matchmod.match(util.localpath(b'/repo'), b'', [b're:.*'])
Augie Fackler
formatting: blacken the codebase...
r43346
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 def filt(path):
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 if path == b'foo':
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 assert False
return True
Augie Fackler
formatting: blacken the codebase...
r43346
Martin von Zweigbergk
test-manifest.py: rewrite tests in terms of manifestdict...
r24466 match.matchfn = filt
Gregory Szorc
tests: use context manager form of assertRaises...
r32279 with self.assertRaises(AssertionError):
Augie Fackler
manifest: move matches method to be outside the interface...
r44826 m._matches(match)
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214
def testRemoveItem(self):
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 m = self.parsemanifest(A_SHORT_MANIFEST)
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 del m[b'foo']
Gregory Szorc
tests: use context manager form of assertRaises...
r32279 with self.assertRaises(KeyError):
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 m[b'foo']
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 self.assertEqual(1, len(m))
self.assertEqual(1, len(list(m)))
Augie Fackler
lazymanifest: use a binary search to do an insertion...
r24228 # now restore and make sure everything works right
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 m[b'foo'] = b'a' * 20
Augie Fackler
lazymanifest: use a binary search to do an insertion...
r24228 self.assertEqual(2, len(m))
self.assertEqual(2, len(list(m)))
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214
def testManifestDiff(self):
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 MISSING = (None, b'')
addl = b'z-only-in-left\0' + HASH_1 + b'\n'
addr = b'z-only-in-right\0' + HASH_2 + b'x\n'
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 left = self.parsemanifest(
Augie Fackler
formatting: blacken the codebase...
r43346 A_SHORT_MANIFEST.replace(HASH_1, HASH_3 + b'x') + addl
)
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 right = self.parsemanifest(A_SHORT_MANIFEST + addr)
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 want = {
Augie Fackler
formatting: blacken the codebase...
r43346 b'foo': ((BIN_HASH_3, b'x'), (BIN_HASH_1, b'')),
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 b'z-only-in-left': ((BIN_HASH_1, b''), MISSING),
b'z-only-in-right': (MISSING, (BIN_HASH_2, b'x')),
Augie Fackler
formatting: blacken the codebase...
r43346 }
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 self.assertEqual(want, left.diff(right))
want = {
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 b'bar/baz/qux.py': (MISSING, (BIN_HASH_2, b'l')),
b'foo': (MISSING, (BIN_HASH_3, b'x')),
b'z-only-in-left': (MISSING, (BIN_HASH_1, b'')),
Augie Fackler
formatting: blacken the codebase...
r43346 }
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 self.assertEqual(want, self.parsemanifest(EMTPY_MANIFEST).diff(left))
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214
want = {
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 b'bar/baz/qux.py': ((BIN_HASH_2, b'l'), MISSING),
b'foo': ((BIN_HASH_3, b'x'), MISSING),
b'z-only-in-left': ((BIN_HASH_1, b''), MISSING),
Augie Fackler
formatting: blacken the codebase...
r43346 }
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 self.assertEqual(want, left.diff(self.parsemanifest(EMTPY_MANIFEST)))
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 copy = right.copy()
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 del copy[b'z-only-in-right']
del right[b'foo']
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 want = {
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 b'foo': (MISSING, (BIN_HASH_1, b'')),
b'z-only-in-right': ((BIN_HASH_2, b'x'), MISSING),
Augie Fackler
formatting: blacken the codebase...
r43346 }
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 self.assertEqual(want, right.diff(copy))
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 short = self.parsemanifest(A_SHORT_MANIFEST)
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 pruned = short.copy()
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 del pruned[b'foo']
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 want = {
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 b'foo': ((BIN_HASH_1, b''), MISSING),
Augie Fackler
formatting: blacken the codebase...
r43346 }
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 self.assertEqual(want, short.diff(pruned))
want = {
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 b'foo': (MISSING, (BIN_HASH_1, b'')),
Augie Fackler
formatting: blacken the codebase...
r43346 }
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 self.assertEqual(want, pruned.diff(short))
want = {
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 b'bar/baz/qux.py': None,
b'foo': (MISSING, (BIN_HASH_1, b'')),
Augie Fackler
formatting: blacken the codebase...
r43346 }
Durham Goode
manifest: add match argument to diff and filesnotin...
r31255 self.assertEqual(want, pruned.diff(short, clean=True))
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214
def testReversedLines(self):
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 backwards = b''.join(
Augie Fackler
formatting: blacken the codebase...
r43346 l + b'\n' for l in reversed(A_SHORT_MANIFEST.split(b'\n')) if l
)
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 try:
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 self.parsemanifest(backwards)
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 self.fail('Should have raised ValueError')
Gregory Szorc
global: mass rewrite to use modern exception syntax...
r25660 except ValueError as v:
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 self.assertIn('Manifest lines not in sorted order.', str(v))
def testNoTerminalNewline(self):
try:
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 self.parsemanifest(A_SHORT_MANIFEST + b'wat')
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 self.fail('Should have raised ValueError')
Gregory Szorc
global: mass rewrite to use modern exception syntax...
r25660 except ValueError as v:
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 self.assertIn('Manifest did not end in a newline.', str(v))
def testNoNewLineAtAll(self):
try:
Augie Fackler
tests: make test-manifest.py portable to Python 3...
r32551 self.parsemanifest(b'wat')
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 self.fail('Should have raised ValueError')
Gregory Szorc
global: mass rewrite to use modern exception syntax...
r25660 except ValueError as v:
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 self.assertIn('Manifest did not end in a newline.', str(v))
def testHugeManifest(self):
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 m = self.parsemanifest(A_HUGE_MANIFEST)
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 self.assertEqual(HUGE_MANIFEST_ENTRIES, len(m))
self.assertEqual(len(m), len(list(m)))
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549 def testMatchesMetadata(self):
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """Tests matches() for a few specific files to make sure that both
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549 the set of files as well as their flags and nodeids are correct in
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 the resulting manifest."""
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 m = self.parsemanifest(A_HUGE_MANIFEST)
Drew Gottlieb
manifest: make manifest.intersectfiles() internal...
r24495
Martin von Zweigbergk
match: delete unused root and cwd arguments from {always,never,exact}() (API)...
r41825 match = matchmod.exact([b'file1', b'file200', b'file300'])
Augie Fackler
manifest: move matches method to be outside the interface...
r44826 m2 = m._matches(match)
Drew Gottlieb
manifest: make manifest.intersectfiles() internal...
r24495
Augie Fackler
formatting: blacken the codebase...
r43346 w = (b'file1\0%sx\n' b'file200\0%sl\n' b'file300\0%s\n') % (
HASH_2,
HASH_1,
HASH_1,
)
Augie Fackler
manifest: split manifestdict into high-level and low-level logic...
r24225 self.assertEqual(w, m2.text())
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549 def testMatchesNonexistentFile(self):
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """Tests matches() for a small set of specific files, including one
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549 nonexistent file to make sure in only matches against existing files.
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 m = self.parsemanifest(A_DEEPER_MANIFEST)
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549
Augie Fackler
formatting: blacken the codebase...
r43346 match = matchmod.exact(
[b'a/b/c/bar.txt', b'a/b/d/qux.py', b'readme.txt', b'nonexistent']
)
Augie Fackler
manifest: move matches method to be outside the interface...
r44826 m2 = m._matches(match)
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549
self.assertEqual(
Augie Fackler
formatting: blacken the codebase...
r43346 [b'a/b/c/bar.txt', b'a/b/d/qux.py', b'readme.txt'], m2.keys()
)
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549
def testMatchesNonexistentDirectory(self):
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """Tests matches() for a relpath match on a directory that doesn't
actually exist."""
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 m = self.parsemanifest(A_DEEPER_MANIFEST)
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549
Matt Harbison
tests: convert the `root` arg of matchmod.match() to local path separators...
r44416 match = matchmod.match(
util.localpath(b'/repo'), b'', [b'a/f'], default=b'relpath'
)
Augie Fackler
manifest: move matches method to be outside the interface...
r44826 m2 = m._matches(match)
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549
self.assertEqual([], m2.keys())
def testMatchesExactLarge(self):
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """Tests matches() for files matching a large list of exact files."""
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 m = self.parsemanifest(A_HUGE_MANIFEST)
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549
flist = m.keys()[80:300]
Martin von Zweigbergk
match: delete unused root and cwd arguments from {always,never,exact}() (API)...
r41825 match = matchmod.exact(flist)
Augie Fackler
manifest: move matches method to be outside the interface...
r44826 m2 = m._matches(match)
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549
self.assertEqual(flist, m2.keys())
def testMatchesFull(self):
'''Tests matches() for what should be a full match.'''
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 m = self.parsemanifest(A_DEEPER_MANIFEST)
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549
Matt Harbison
tests: convert the `root` arg of matchmod.match() to local path separators...
r44416 match = matchmod.match(util.localpath(b'/repo'), b'', [b''])
Augie Fackler
manifest: move matches method to be outside the interface...
r44826 m2 = m._matches(match)
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549
self.assertEqual(m.keys(), m2.keys())
def testMatchesDirectory(self):
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """Tests matches() on a relpath match on a directory, which should
match against all files within said directory."""
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 m = self.parsemanifest(A_DEEPER_MANIFEST)
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549
Matt Harbison
tests: convert the `root` arg of matchmod.match() to local path separators...
r44416 match = matchmod.match(
util.localpath(b'/repo'), b'', [b'a/b'], default=b'relpath'
)
Augie Fackler
manifest: move matches method to be outside the interface...
r44826 m2 = m._matches(match)
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549
Augie Fackler
formatting: blacken the codebase...
r43346 self.assertEqual(
[
b'a/b/c/bar.py',
b'a/b/c/bar.txt',
b'a/b/c/foo.py',
b'a/b/c/foo.txt',
b'a/b/d/baz.py',
b'a/b/d/qux.py',
b'a/b/d/ten.txt',
b'a/b/dog.py',
b'a/b/fish.py',
],
m2.keys(),
)
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549
def testMatchesExactPath(self):
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """Tests matches() on an exact match on a directory, which should
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549 result in an empty manifest because you can't perform an exact match
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 against a directory."""
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 m = self.parsemanifest(A_DEEPER_MANIFEST)
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549
Martin von Zweigbergk
match: delete unused root and cwd arguments from {always,never,exact}() (API)...
r41825 match = matchmod.exact([b'a/b'])
Augie Fackler
manifest: move matches method to be outside the interface...
r44826 m2 = m._matches(match)
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549
self.assertEqual([], m2.keys())
def testMatchesCwd(self):
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """Tests matches() on a relpath match with the current directory ('.')
when not in the root directory."""
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 m = self.parsemanifest(A_DEEPER_MANIFEST)
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549
Matt Harbison
tests: convert the `root` arg of matchmod.match() to local path separators...
r44416 match = matchmod.match(
util.localpath(b'/repo'), b'a/b', [b'.'], default=b'relpath'
)
Augie Fackler
manifest: move matches method to be outside the interface...
r44826 m2 = m._matches(match)
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549
Augie Fackler
formatting: blacken the codebase...
r43346 self.assertEqual(
[
b'a/b/c/bar.py',
b'a/b/c/bar.txt',
b'a/b/c/foo.py',
b'a/b/c/foo.txt',
b'a/b/d/baz.py',
b'a/b/d/qux.py',
b'a/b/d/ten.txt',
b'a/b/dog.py',
b'a/b/fish.py',
],
m2.keys(),
)
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549
def testMatchesWithPattern(self):
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """Tests matches() for files matching a pattern that reside
deeper than the specified directory."""
Drew Gottlieb
test-manifest: move parsemanifest() to be a testmanifest class method...
r24654 m = self.parsemanifest(A_DEEPER_MANIFEST)
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549
Matt Harbison
tests: convert the `root` arg of matchmod.match() to local path separators...
r44416 match = matchmod.match(util.localpath(b'/repo'), b'', [b'a/b/*/*.txt'])
Augie Fackler
manifest: move matches method to be outside the interface...
r44826 m2 = m._matches(match)
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549
self.assertEqual(
Augie Fackler
formatting: blacken the codebase...
r43346 [b'a/b/c/bar.txt', b'a/b/c/foo.txt', b'a/b/d/ten.txt'], m2.keys()
)
Drew Gottlieb
manifest: add some tests for manifest.matches()...
r24549
Drew Gottlieb
test-manifest: make manifesttest a base class that is extended...
r24655 class testmanifestdict(unittest.TestCase, basemanifesttests):
def parsemanifest(self, text):
return manifestmod.manifestdict(text)
Augie Fackler
manifest: make sure there's a filename before bothering to look for newline...
r40635 def testObviouslyBogusManifest(self):
# This is a 163k manifest that came from oss-fuzz. It was a
# timeout there, but when run normally it doesn't seem to
# present any particular slowness.
data = zlib.decompress(
Augie Fackler
tests: fix bytes/str issue I introduced when adding this test...
r40663 b'x\x9c\xed\xce;\n\x83\x00\x10\x04\xd0\x8deNa\x93~\xf1\x03\xc9q\xf4'
b'\x14\xeaU\xbdB\xda\xd4\xe6Cj\xc1FA\xde+\x86\xe9f\xa2\xfci\xbb\xfb'
b'\xa3\xef\xea\xba\xca\x7fk\x86q\x9a\xc6\xc8\xcc&\xb3\xcf\xf8\xb8|#'
b'\x8a9\x00\xd8\xe6v\xf4\x01N\xe1\n\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\xc0\x8aey\x1d}\x01\xd8\xe0\xb9\xf3\xde\x1b\xcf\x17'
Augie Fackler
formatting: blacken the codebase...
r43346 b'\xac\xbe'
)
Augie Fackler
manifest: make sure there's a filename before bothering to look for newline...
r40635 with self.assertRaises(ValueError):
self.parsemanifest(data)
Augie Fackler
formatting: blacken the codebase...
r43346
Drew Gottlieb
test-manifest: add some test coverage for treemanifest...
r24656 class testtreemanifest(unittest.TestCase, basemanifesttests):
def parsemanifest(self, text):
Joerg Sonnenberger
node: introduce nodeconstants class...
r47538 return manifestmod.treemanifest(sha1nodeconstants, b'', text)
Drew Gottlieb
test-manifest: add some test coverage for treemanifest...
r24656
Durham Goode
treemanifest: add walksubtrees api...
r31876 def testWalkSubtrees(self):
m = self.parsemanifest(A_DEEPER_MANIFEST)
dirs = [s._dir for s in m.walksubtrees()]
self.assertEqual(
Augie Fackler
formatting: blacken the codebase...
r43346 sorted(
[b'', b'a/', b'a/c/', b'a/d/', b'a/b/', b'a/b/c/', b'a/b/d/']
),
sorted(dirs),
Durham Goode
treemanifest: add walksubtrees api...
r31876 )
Matt Harbison
tests: convert the `root` arg of matchmod.match() to local path separators...
r44416 match = matchmod.match(util.localpath(b'/repo'), b'', [b'path:a/b/'])
Durham Goode
treemanifest: add walksubtrees api...
r31876 dirs = [s._dir for s in m.walksubtrees(matcher=match)]
Augie Fackler
formatting: blacken the codebase...
r43346 self.assertEqual(sorted([b'a/b/', b'a/b/c/', b'a/b/d/']), sorted(dirs))
Durham Goode
treemanifest: add walksubtrees api...
r31876
Augie Fackler
manifest.c: new extension code to lazily parse manifests...
r24214 if __name__ == '__main__':
silenttestrunner.main(__name__)