Re: [PATCH 1 of 4 shelve-ext v4] scmutil: add simplekeyvaluefile reading test

2017-05-11 Thread Yuya Nishihara
On Sun, 7 May 2017 06:07:03 -0700, Kostia Balytskyi wrote:
> # HG changeset patch
> # User Kostia Balytskyi 
> # 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')]

Just a nit. this could be .splitlines(keepends=True)
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


[PATCH 1 of 4 shelve-ext v4] scmutil: add simplekeyvaluefile reading test

2017-05-07 Thread Kostia Balytskyi
# HG changeset patch
# User Kostia Balytskyi 
# 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'}
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel