test-simplekeyvaluefile.py
84 lines
| 2.8 KiB
| text/x-python
|
PythonLexer
/ tests / test-simplekeyvaluefile.py
Kostia Balytskyi
|
r31553 | from __future__ import absolute_import | ||
import unittest | ||||
import silenttestrunner | ||||
from mercurial import ( | ||||
error, | ||||
scmutil, | ||||
) | ||||
class mockfile(object): | ||||
def __init__(self, name, fs): | ||||
self.name = name | ||||
self.fs = fs | ||||
def __enter__(self): | ||||
return self | ||||
def __exit__(self, *args, **kwargs): | ||||
pass | ||||
def write(self, text): | ||||
self.fs.contents[self.name] = text | ||||
def read(self): | ||||
return self.fs.contents[self.name] | ||||
class mockvfs(object): | ||||
def __init__(self): | ||||
self.contents = {} | ||||
def read(self, path): | ||||
return mockfile(path, self).read() | ||||
def readlines(self, path): | ||||
Kostia Balytskyi
|
r32269 | # lines need to contain the trailing '\n' to mock the real readlines | ||
return [l for l in mockfile(path, self).read().splitlines(True)] | ||||
Kostia Balytskyi
|
r31553 | |||
def __call__(self, path, mode, atomictemp): | ||||
return mockfile(path, self) | ||||
class testsimplekeyvaluefile(unittest.TestCase): | ||||
def setUp(self): | ||||
self.vfs = mockvfs() | ||||
Kostia Balytskyi
|
r32269 | def testbasicwritingiandreading(self): | ||
dw = {'key1': 'value1', 'Key2': 'value2'} | ||||
scmutil.simplekeyvaluefile(self.vfs, 'kvfile').write(dw) | ||||
Kostia Balytskyi
|
r31553 | self.assertEqual(sorted(self.vfs.read('kvfile').split('\n')), | ||
['', 'Key2=value2', 'key1=value1']) | ||||
Kostia Balytskyi
|
r32269 | dr = scmutil.simplekeyvaluefile(self.vfs, 'kvfile').read() | ||
self.assertEqual(dr, dw) | ||||
Kostia Balytskyi
|
r31553 | |||
def testinvalidkeys(self): | ||||
d = {'0key1': 'value1', 'Key2': 'value2'} | ||||
Gregory Szorc
|
r32279 | with self.assertRaisesRegexp(error.ProgrammingError, | ||
'keys must start with a letter.*'): | ||||
scmutil.simplekeyvaluefile(self.vfs, 'kvfile').write(d) | ||||
Kostia Balytskyi
|
r31553 | d = {'key1@': 'value1', 'Key2': 'value2'} | ||
Gregory Szorc
|
r32279 | with self.assertRaisesRegexp(error.ProgrammingError, 'invalid key.*'): | ||
scmutil.simplekeyvaluefile(self.vfs, 'kvfile').write(d) | ||||
Kostia Balytskyi
|
r31553 | |||
def testinvalidvalues(self): | ||||
d = {'key1': 'value1', 'Key2': 'value2\n'} | ||||
Gregory Szorc
|
r32279 | with self.assertRaisesRegexp(error.ProgrammingError, 'invalid val.*'): | ||
scmutil.simplekeyvaluefile(self.vfs, 'kvfile').write(d) | ||||
Kostia Balytskyi
|
r31553 | |||
def testcorruptedfile(self): | ||||
self.vfs.contents['badfile'] = 'ababagalamaga\n' | ||||
Gregory Szorc
|
r32279 | with self.assertRaisesRegexp(error.CorruptedState, | ||
'dictionary.*element.*'): | ||||
scmutil.simplekeyvaluefile(self.vfs, 'badfile').read() | ||||
Kostia Balytskyi
|
r31553 | |||
Kostia Balytskyi
|
r32270 | def testfirstline(self): | ||
dw = {'key1': 'value1'} | ||||
scmutil.simplekeyvaluefile(self.vfs, 'fl').write(dw, firstline='1.0') | ||||
self.assertEqual(self.vfs.read('fl'), '1.0\nkey1=value1\n') | ||||
dr = scmutil.simplekeyvaluefile(self.vfs, 'fl')\ | ||||
.read(firstlinenonkeyval=True) | ||||
self.assertEqual(dr, {'__firstline': '1.0', 'key1': 'value1'}) | ||||
Kostia Balytskyi
|
r31553 | if __name__ == "__main__": | ||
silenttestrunner.main(__name__) | ||||