--- a/tests/test-manifest.py Tue Apr 07 22:31:36 2015 -0400
+++ b/tests/test-manifest.py Tue Apr 07 15:16:19 2015 -0700
@@ -95,10 +95,9 @@
itertools.cycle((HASH_1, HASH_2)),
itertools.cycle(('', 'x', 'l')))))
-def parsemanifest(text):
- return manifestmod.manifestdict(text)
-
class testmanifest(unittest.TestCase):
+ def parsemanifest(self, text):
+ return manifestmod.manifestdict(text)
def assertIn(self, thing, container, msg=None):
# assertIn new in 2.7, use it if available, otherwise polyfill
@@ -110,17 +109,17 @@
self.assert_(thing in container, msg)
def testEmptyManifest(self):
- m = parsemanifest(EMTPY_MANIFEST)
+ m = self.parsemanifest(EMTPY_MANIFEST)
self.assertEqual(0, len(m))
self.assertEqual([], list(m))
def testEmptyManifestv2(self):
- m = parsemanifest(EMTPY_MANIFEST_V2)
+ m = self.parsemanifest(EMTPY_MANIFEST_V2)
self.assertEqual(0, len(m))
self.assertEqual([], list(m))
def testManifest(self):
- m = parsemanifest(A_SHORT_MANIFEST)
+ m = self.parsemanifest(A_SHORT_MANIFEST)
self.assertEqual(['bar/baz/qux.py', 'foo'], list(m))
self.assertEqual(BIN_HASH_2, m['bar/baz/qux.py'])
self.assertEqual('l', m.flags('bar/baz/qux.py'))
@@ -129,18 +128,18 @@
self.assertRaises(KeyError, lambda : m['wat'])
def testParseManifestV2(self):
- m1 = parsemanifest(A_SHORT_MANIFEST)
- m2 = parsemanifest(A_SHORT_MANIFEST_V2)
+ m1 = self.parsemanifest(A_SHORT_MANIFEST)
+ m2 = self.parsemanifest(A_SHORT_MANIFEST_V2)
# Should have same content as A_SHORT_MANIFEST
self.assertEqual(m1.text(), m2.text())
def testParseManifestMetadata(self):
# Metadata is for future-proofing and should be accepted but ignored
- m = parsemanifest(A_METADATA_MANIFEST)
+ m = self.parsemanifest(A_METADATA_MANIFEST)
self.assertEqual(A_SHORT_MANIFEST, m.text())
def testParseManifestStemCompression(self):
- m = parsemanifest(A_STEM_COMPRESSED_MANIFEST)
+ m = self.parsemanifest(A_STEM_COMPRESSED_MANIFEST)
self.assertIn('bar/baz/qux.py', m)
self.assertIn('bar/qux/foo.py', m)
self.assertIn('bar/qux/foz.py', m)
@@ -149,20 +148,20 @@
self.assertEqual(A_STEM_COMPRESSED_MANIFEST, m.text(usemanifestv2=True))
def testTextV2(self):
- m1 = parsemanifest(A_SHORT_MANIFEST)
+ m1 = self.parsemanifest(A_SHORT_MANIFEST)
v2text = m1.text(usemanifestv2=True)
self.assertEqual(A_SHORT_MANIFEST_V2, v2text)
def testSetItem(self):
want = BIN_HASH_1
- m = parsemanifest(EMTPY_MANIFEST)
+ m = self.parsemanifest(EMTPY_MANIFEST)
m['a'] = want
self.assertIn('a', m)
self.assertEqual(want, m['a'])
self.assertEqual('a\0' + HASH_1 + '\n', m.text())
- m = parsemanifest(A_SHORT_MANIFEST)
+ m = self.parsemanifest(A_SHORT_MANIFEST)
m['a'] = want
self.assertEqual(want, m['a'])
self.assertEqual('a\0' + HASH_1 + '\n' + A_SHORT_MANIFEST,
@@ -171,14 +170,14 @@
def testSetFlag(self):
want = 'x'
- m = parsemanifest(EMTPY_MANIFEST)
+ m = self.parsemanifest(EMTPY_MANIFEST)
# first add a file; a file-less flag makes no sense
m['a'] = BIN_HASH_1
m.setflag('a', want)
self.assertEqual(want, m.flags('a'))
self.assertEqual('a\0' + HASH_1 + want + '\n', m.text())
- m = parsemanifest(A_SHORT_MANIFEST)
+ m = self.parsemanifest(A_SHORT_MANIFEST)
# first add a file; a file-less flag makes no sense
m['a'] = BIN_HASH_1
m.setflag('a', want)
@@ -187,7 +186,7 @@
m.text())
def testCopy(self):
- m = parsemanifest(A_SHORT_MANIFEST)
+ m = self.parsemanifest(A_SHORT_MANIFEST)
m['a'] = BIN_HASH_1
m2 = m.copy()
del m
@@ -196,7 +195,7 @@
def testCompaction(self):
unhex = binascii.unhexlify
h1, h2 = unhex(HASH_1), unhex(HASH_2)
- m = parsemanifest(A_SHORT_MANIFEST)
+ m = self.parsemanifest(A_SHORT_MANIFEST)
m['alpha'] = h1
m['beta'] = h2
del m['foo']
@@ -214,8 +213,8 @@
self.assertRaises(KeyError, lambda : m['foo'])
def testSetGetNodeSuffix(self):
- clean = parsemanifest(A_SHORT_MANIFEST)
- m = parsemanifest(A_SHORT_MANIFEST)
+ clean = self.parsemanifest(A_SHORT_MANIFEST)
+ m = self.parsemanifest(A_SHORT_MANIFEST)
h = m['foo']
f = m.flags('foo')
want = h + 'a'
@@ -246,7 +245,7 @@
self.assertEqual({'foo': ((h, ''), (want, f))}, clean.diff(m))
def testMatchException(self):
- m = parsemanifest(A_SHORT_MANIFEST)
+ m = self.parsemanifest(A_SHORT_MANIFEST)
match = matchmod.match('', '', ['re:.*'])
def filt(path):
if path == 'foo':
@@ -256,7 +255,7 @@
self.assertRaises(AssertionError, m.matches, match)
def testRemoveItem(self):
- m = parsemanifest(A_SHORT_MANIFEST)
+ m = self.parsemanifest(A_SHORT_MANIFEST)
del m['foo']
self.assertRaises(KeyError, lambda : m['foo'])
self.assertEqual(1, len(m))
@@ -270,9 +269,9 @@
MISSING = (None, '')
addl = 'z-only-in-left\0' + HASH_1 + '\n'
addr = 'z-only-in-right\0' + HASH_2 + 'x\n'
- left = parsemanifest(
+ left = self.parsemanifest(
A_SHORT_MANIFEST.replace(HASH_1, HASH_3 + 'x') + addl)
- right = parsemanifest(A_SHORT_MANIFEST + addr)
+ right = self.parsemanifest(A_SHORT_MANIFEST + addr)
want = {
'foo': ((BIN_HASH_3, 'x'),
(BIN_HASH_1, '')),
@@ -286,14 +285,14 @@
'foo': (MISSING, (BIN_HASH_3, 'x')),
'z-only-in-left': (MISSING, (BIN_HASH_1, '')),
}
- self.assertEqual(want, parsemanifest(EMTPY_MANIFEST).diff(left))
+ self.assertEqual(want, self.parsemanifest(EMTPY_MANIFEST).diff(left))
want = {
'bar/baz/qux.py': ((BIN_HASH_2, 'l'), MISSING),
'foo': ((BIN_HASH_3, 'x'), MISSING),
'z-only-in-left': ((BIN_HASH_1, ''), MISSING),
}
- self.assertEqual(want, left.diff(parsemanifest(EMTPY_MANIFEST)))
+ self.assertEqual(want, left.diff(self.parsemanifest(EMTPY_MANIFEST)))
copy = right.copy()
del copy['z-only-in-right']
del right['foo']
@@ -303,7 +302,7 @@
}
self.assertEqual(want, right.diff(copy))
- short = parsemanifest(A_SHORT_MANIFEST)
+ short = self.parsemanifest(A_SHORT_MANIFEST)
pruned = short.copy()
del pruned['foo']
want = {
@@ -324,27 +323,27 @@
backwards = ''.join(
l + '\n' for l in reversed(A_SHORT_MANIFEST.split('\n')) if l)
try:
- parsemanifest(backwards)
+ self.parsemanifest(backwards)
self.fail('Should have raised ValueError')
except ValueError, v:
self.assertIn('Manifest lines not in sorted order.', str(v))
def testNoTerminalNewline(self):
try:
- parsemanifest(A_SHORT_MANIFEST + 'wat')
+ self.parsemanifest(A_SHORT_MANIFEST + 'wat')
self.fail('Should have raised ValueError')
except ValueError, v:
self.assertIn('Manifest did not end in a newline.', str(v))
def testNoNewLineAtAll(self):
try:
- parsemanifest('wat')
+ self.parsemanifest('wat')
self.fail('Should have raised ValueError')
except ValueError, v:
self.assertIn('Manifest did not end in a newline.', str(v))
def testHugeManifest(self):
- m = parsemanifest(A_HUGE_MANIFEST)
+ m = self.parsemanifest(A_HUGE_MANIFEST)
self.assertEqual(HUGE_MANIFEST_ENTRIES, len(m))
self.assertEqual(len(m), len(list(m)))
@@ -352,7 +351,7 @@
'''Tests matches() for a few specific files to make sure that both
the set of files as well as their flags and nodeids are correct in
the resulting manifest.'''
- m = parsemanifest(A_HUGE_MANIFEST)
+ m = self.parsemanifest(A_HUGE_MANIFEST)
match = matchmod.match('/', '',
['file1', 'file200', 'file300'], exact=True)
@@ -367,7 +366,7 @@
'''Tests matches() for a small set of specific files, including one
nonexistent file to make sure in only matches against existing files.
'''
- m = parsemanifest(A_DEEPER_MANIFEST)
+ m = self.parsemanifest(A_DEEPER_MANIFEST)
match = matchmod.match('/', '',
['a/b/c/bar.txt', 'a/b/d/qux.py', 'readme.txt', 'nonexistent'],
@@ -381,7 +380,7 @@
def testMatchesNonexistentDirectory(self):
'''Tests matches() for a relpath match on a directory that doesn't
actually exist.'''
- m = parsemanifest(A_DEEPER_MANIFEST)
+ m = self.parsemanifest(A_DEEPER_MANIFEST)
match = matchmod.match('/', '', ['a/f'], default='relpath')
m2 = m.matches(match)
@@ -391,7 +390,7 @@
def testMatchesExactLarge(self):
'''Tests matches() for files matching a large list of exact files.
'''
- m = parsemanifest(A_HUGE_MANIFEST)
+ m = self.parsemanifest(A_HUGE_MANIFEST)
flist = m.keys()[80:300]
match = matchmod.match('/', '', flist, exact=True)
@@ -401,7 +400,7 @@
def testMatchesFull(self):
'''Tests matches() for what should be a full match.'''
- m = parsemanifest(A_DEEPER_MANIFEST)
+ m = self.parsemanifest(A_DEEPER_MANIFEST)
match = matchmod.match('/', '', [''])
m2 = m.matches(match)
@@ -411,7 +410,7 @@
def testMatchesDirectory(self):
'''Tests matches() on a relpath match on a directory, which should
match against all files within said directory.'''
- m = parsemanifest(A_DEEPER_MANIFEST)
+ m = self.parsemanifest(A_DEEPER_MANIFEST)
match = matchmod.match('/', '', ['a/b'], default='relpath')
m2 = m.matches(match)
@@ -425,7 +424,7 @@
'''Tests matches() on an exact match on a directory, which should
result in an empty manifest because you can't perform an exact match
against a directory.'''
- m = parsemanifest(A_DEEPER_MANIFEST)
+ m = self.parsemanifest(A_DEEPER_MANIFEST)
match = matchmod.match('/', '', ['a/b'], exact=True)
m2 = m.matches(match)
@@ -435,7 +434,7 @@
def testMatchesCwd(self):
'''Tests matches() on a relpath match with the current directory ('.')
when not in the root directory.'''
- m = parsemanifest(A_DEEPER_MANIFEST)
+ m = self.parsemanifest(A_DEEPER_MANIFEST)
match = matchmod.match('/', 'a/b', ['.'], default='relpath')
m2 = m.matches(match)
@@ -448,7 +447,7 @@
def testMatchesWithPattern(self):
'''Tests matches() for files matching a pattern that reside
deeper than the specified directory.'''
- m = parsemanifest(A_DEEPER_MANIFEST)
+ m = self.parsemanifest(A_DEEPER_MANIFEST)
match = matchmod.match('/', '', ['a/b/*/*.txt'])
m2 = m.matches(match)