[PATCH 1 of 4 shelve-ext v4] scmutil: add simplekeyvaluefile reading test
Kostia Balytskyi
ikostia at fb.com
Sun May 7 13:07:03 UTC 2017
# HG changeset patch
# User Kostia Balytskyi <ikostia at fb.com>
# Date 1494157223 25200
# Sun May 07 04:40:23 2017 -0700
# Node ID e9b77b6f16c04efced06169735a813d5db82dddf
# Parent 31f42e683321f225eb9c306f8d4b3a9e8d82a1da
scmutil: add simplekeyvaluefile reading test
Before this patch, mockvfs did not emulate readlines correctly
and there was no test for simplekeyvaluefile reading.
diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py
--- a/mercurial/scmutil.py
+++ b/mercurial/scmutil.py
@@ -925,7 +925,10 @@ class simplekeyvaluefile(object):
def read(self):
lines = self.vfs.readlines(self.path)
try:
- d = dict(line[:-1].split('=', 1) for line in lines if line)
+ # the 'if line.strip()' part prevents us from failing on empty
+ # lines which only contain '\n' therefore are not skipped
+ # by 'if line'
+ d = dict(line[:-1].split('=', 1) for line in lines if line.strip())
except ValueError as e:
raise error.CorruptedState(str(e))
return d
diff --git a/tests/test-simplekeyvaluefile.py b/tests/test-simplekeyvaluefile.py
--- a/tests/test-simplekeyvaluefile.py
+++ b/tests/test-simplekeyvaluefile.py
@@ -33,7 +33,8 @@ class mockvfs(object):
return mockfile(path, self).read()
def readlines(self, path):
- return mockfile(path, self).read().split('\n')
+ # lines need to contain the trailing '\n' to mock the real readlines
+ return [l + '\n' for l in mockfile(path, self).read().split('\n')]
def __call__(self, path, mode, atomictemp):
return mockfile(path, self)
@@ -42,11 +43,13 @@ class testsimplekeyvaluefile(unittest.Te
def setUp(self):
self.vfs = mockvfs()
- def testbasicwriting(self):
- d = {'key1': 'value1', 'Key2': 'value2'}
- scmutil.simplekeyvaluefile(self.vfs, 'kvfile').write(d)
+ def testbasicwritingiandreading(self):
+ dw = {'key1': 'value1', 'Key2': 'value2'}
+ scmutil.simplekeyvaluefile(self.vfs, 'kvfile').write(dw)
self.assertEqual(sorted(self.vfs.read('kvfile').split('\n')),
['', 'Key2=value2', 'key1=value1'])
+ dr = scmutil.simplekeyvaluefile(self.vfs, 'kvfile').read()
+ self.assertEqual(dr, dw)
def testinvalidkeys(self):
d = {'0key1': 'value1', 'Key2': 'value2'}
More information about the Mercurial-devel
mailing list