https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=e6231b4cff0eba5f0153b7e8f0e869bb1339e9e3 commit e6231b4cff0eba5f0153b7e8f0e869bb1339e9e3 Author: Jon Turney Date: Sun Apr 9 17:34:13 2017 +0100 Test with python 3.6 as well on Travis https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=2427b7b89d99dce3db44c7d442f2f8f448f309b5 commit 2427b7b89d99dce3db44c7d442f2f8f448f309b5 Author: Jon Turney Date: Thu Nov 16 01:45:24 2017 +0000 Fix representation of defaultdict in test data for python 3.6 Similarly, pprint of defaultdict was also fixed to print the defaultdict repr, rather than as a dict Explicitly convert to a dict in test_scan_uploads to keep the same text representation https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=190330a4a922699bdf1dbc0651b6f03dc5e91e54 commit 190330a4a922699bdf1dbc0651b6f03dc5e91e54 Author: Jon Turney Date: Thu Nov 16 13:10:00 2017 +0000 Shrink ldesc in one hint to work around limitations of previous fix Shrink ldesc slightly in one hint to deal with not quite compatible choice of where to break the line https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=761a3b79565dea290573d3162f0ab8a21692f1cc commit 761a3b79565dea290573d3162f0ab8a21692f1cc Author: Jon Turney Date: Thu Nov 16 13:03:05 2017 +0000 Extend the sdesc in one hint to work around limitations of previous fix Due to pprint internals, pprint of an OrderedDict() which fits on a single line isn't effected by the monkey-patch. Make the sdesc in the one hint which is rendered this way a little longer. https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=b666c2dbe4157293bef99a4abdcb2d92699e7bd8 commit b666c2dbe4157293bef99a4abdcb2d92699e7bd8 Author: Jon Turney Date: Thu Nov 16 00:47:30 2017 +0000 Fix representation of OrderedDict in test data with python 3.6 pprint was fixed by [1] from printing an OrderedDict as a dict, with the lines in order, to printing the repr of the OrderedDict. Monkey-patch pprint on python 3.6 to get the python 3.4 behaviour. Probably better to do that the other way around, but that means changing the test data... [1] https://bugs.python.org/issue23775 Diff: --- .travis.yml | 1 + test/test_calm.py | 39 ++++++++++++++++++-- test/testdata/hints/x86/release/rpm-doc/expected | 2 +- .../x86/release/testpackage/setup.hint | 2 +- test/testdata/htdocs.expected/x86/packages.inc | 2 +- .../htdocs.expected/x86/rpm-doc/rpm-doc-4.1-2 | 4 +- .../htdocs.expected/x86/rpm-doc/rpm-doc-4.1-2-src | 4 +- .../htdocs.expected/x86/rpm-doc/rpm-doc-999-1 | 4 +- test/testdata/inifile/setup.ini.expected | 2 +- test/testdata/process_arch/setup.ini.expected | 4 +- .../relarea/x86/release/rpm-doc/setup.hint | 2 +- test/testdata/uploads/pkglist.expected | 3 +- 12 files changed, 51 insertions(+), 18 deletions(-) diff --git a/.travis.yml b/.travis.yml index ceda33e..e54b58a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,7 @@ language: python sudo: false python: - "3.4" + - "3.6" install: "pip install pycodestyle dirq" script: - ./pep8 diff --git a/test/test_calm.py b/test/test_calm.py index 0f30e85..7cacd01 100755 --- a/test/test_calm.py +++ b/test/test_calm.py @@ -25,6 +25,8 @@ # tests # +import collections +import contextlib import filecmp import logging import os @@ -87,6 +89,35 @@ def capture_dirtree(basedir): # +# a context to monkey-patch pprint so OrderedDict appears as with python <3.5 +# (a dict, with lines ordered, rather than OrderedDict repr) +# + +def patched_pprint_ordered_dict(self, object, stream, indent, allowance, context, level): + write = stream.write + write('{') + if self._indent_per_level > 1: + write((self._indent_per_level - 1) * ' ') + length = len(object) + if length: + items = list(object.items()) + self._format_dict_items(items, stream, indent, allowance + 1, + context, level) + write('}') + +@contextlib.contextmanager +def pprint_patch(): + if isinstance(getattr(pprint.PrettyPrinter, '_dispatch', None), dict): + orig = pprint.PrettyPrinter._dispatch[collections.OrderedDict.__repr__] + pprint.PrettyPrinter._dispatch[collections.OrderedDict.__repr__] = patched_pprint_ordered_dict + try: + yield + finally: + pprint.PrettyPrinter._dispatch[collections.OrderedDict.__repr__] = orig + else: + yield + +# # # @@ -101,7 +132,8 @@ class CalmTest(unittest.TestCase): with self.subTest(package=os.path.basename(dirpath)): logging.info('Reading %s' % os.path.join(dirpath, 'setup.hint')) results = hint.hint_file_parse(os.path.join(dirpath, 'setup.hint'), hint.setup) - compare_with_expected_file(self, os.path.join('testdata/hints', relpath), results) + with pprint_patch(): + compare_with_expected_file(self, os.path.join('testdata/hints', relpath), results) # # something like "find -name results -exec sh -c 'cd `dirname {}` ; cp results @@ -278,11 +310,12 @@ class CalmTest(unittest.TestCase): scan_result = uploads.scan(m, pkglist + ['not-on-maintainer-list'], args.arch, args) self.assertEqual(scan_result.error, False) - compare_with_expected_file(self, 'testdata/uploads', scan_result.to_relarea, 'move') + compare_with_expected_file(self, 'testdata/uploads', dict(scan_result.to_relarea), 'move') self.assertCountEqual(scan_result.to_vault, {'x86/release/testpackage': ['x86/release/testpackage/testpackage-0.1-1.tar.bz2']}) self.assertCountEqual(scan_result.remove_always, [f for (f, t) in ready_fns]) self.assertEqual(scan_result.remove_success, ['testdata/homes/Blooey McFooey/x86/release/testpackage/-testpackage-0.1-1-src.tar.bz2', 'testdata/homes/Blooey McFooey/x86/release/testpackage/-testpackage-0.1-1.tar.bz2']) - compare_with_expected_file(self, 'testdata/uploads', scan_result.packages, 'pkglist') + with pprint_patch(): + compare_with_expected_file(self, 'testdata/uploads', dict(scan_result.packages), 'pkglist') def test_package_set(self): self.maxDiff = None diff --git a/test/testdata/hints/x86/release/rpm-doc/expected b/test/testdata/hints/x86/release/rpm-doc/expected index db48c82..a47a381 100644 --- a/test/testdata/hints/x86/release/rpm-doc/expected +++ b/test/testdata/hints/x86/release/rpm-doc/expected @@ -1,2 +1,2 @@ -{'sdesc': '"Obsolete package for RPM package management system manual pages"', +{'sdesc': '"Obsolete package for RPM package management system manual pages (extra text to so repr is not one line)"', 'category': '_obsolete'} diff --git a/test/testdata/homes/Blooey McFooey/x86/release/testpackage/setup.hint b/test/testdata/homes/Blooey McFooey/x86/release/testpackage/setup.hint index 290111b..d1373e3 100644 --- a/test/testdata/homes/Blooey McFooey/x86/release/testpackage/setup.hint +++ b/test/testdata/homes/Blooey McFooey/x86/release/testpackage/setup.hint @@ -1,6 +1,6 @@ sdesc: "A test package" ldesc: "A test package -It's description might contains some unicode gibberish +It's description might contains some unicode junk Like it’s you’re Markup Language™ Nokogiri’s tool―that Bézier." category: Devel requires: cygwin diff --git a/test/testdata/htdocs.expected/x86/packages.inc b/test/testdata/htdocs.expected/x86/packages.inc index fa8b66b..2d85324 100755 --- a/test/testdata/htdocs.expected/x86/packages.inc +++ b/test/testdata/htdocs.expected/x86/packages.inc @@ -21,7 +21,7 @@ per-versionPer-version hint test package per-version-replacement-hint-onlyPer-version hint test package perl-Net-SMTP-SSLPerl distribution Net-SMTP-SSL -rpm-docObsolete package for RPM package management system manual pages +rpm-docObsolete package for RPM package management system manual pages (extra text to so repr is not one line) staleversionTest package for stale version removal test-ctest package C test-dtest package D diff --git a/test/testdata/htdocs.expected/x86/rpm-doc/rpm-doc-4.1-2 b/test/testdata/htdocs.expected/x86/rpm-doc/rpm-doc-4.1-2 index 9cd2ff7..8ae10d2 100644 --- a/test/testdata/htdocs.expected/x86/rpm-doc/rpm-doc-4.1-2 +++ b/test/testdata/htdocs.expected/x86/rpm-doc/rpm-doc-4.1-2 @@ -1,10 +1,10 @@ -rpm-doc: Obsolete package for RPM package management system manual pages +rpm-doc: Obsolete package for RPM package management system manual pages (extra text to so repr is not one line) -

rpm-doc: Obsolete package for RPM package management system manual pages

+

rpm-doc: Obsolete package for RPM package management system manual pages (extra text to so repr is not one line)

     2003-05-02 11:46       25562 usr/man/fr/man8/rpm.8
     2003-05-02 11:46       39721 usr/man/ja/man8/rpm.8
diff --git a/test/testdata/htdocs.expected/x86/rpm-doc/rpm-doc-4.1-2-src b/test/testdata/htdocs.expected/x86/rpm-doc/rpm-doc-4.1-2-src
index 032a602..c810de5 100644
--- a/test/testdata/htdocs.expected/x86/rpm-doc/rpm-doc-4.1-2-src
+++ b/test/testdata/htdocs.expected/x86/rpm-doc/rpm-doc-4.1-2-src
@@ -1,10 +1,10 @@
 
 
 
-rpm-doc: Obsolete package for RPM package management system manual pages (source code)
+rpm-doc: Obsolete package for RPM package management system manual pages (extra text to so repr is not one line) (source code)
 
 
-

rpm-doc: Obsolete package for RPM package management system manual pages (source code)

+

rpm-doc: Obsolete package for RPM package management system manual pages (extra text to so repr is not one line) (source code)

 
diff --git a/test/testdata/htdocs.expected/x86/rpm-doc/rpm-doc-999-1 b/test/testdata/htdocs.expected/x86/rpm-doc/rpm-doc-999-1 index 737ef80..6ac87cb 100644 --- a/test/testdata/htdocs.expected/x86/rpm-doc/rpm-doc-999-1 +++ b/test/testdata/htdocs.expected/x86/rpm-doc/rpm-doc-999-1 @@ -1,10 +1,10 @@ -rpm-doc: Obsolete package for RPM package management system manual pages +rpm-doc: Obsolete package for RPM package management system manual pages (extra text to so repr is not one line) -

rpm-doc: Obsolete package for RPM package management system manual pages

+

rpm-doc: Obsolete package for RPM package management system manual pages (extra text to so repr is not one line)

 
diff --git a/test/testdata/inifile/setup.ini.expected b/test/testdata/inifile/setup.ini.expected index ced8b29..ee8d17d 100644 --- a/test/testdata/inifile/setup.ini.expected +++ b/test/testdata/inifile/setup.ini.expected @@ -250,7 +250,7 @@ '4de528554acb0b63f2a964bc8a0421118f96ce05cb4c9d111983aaea1a4a93025b31627fd66875fa09c2dfaecc11a89f2a294bdd3c77055bfaa93a27fdfc1f07\n' '\n' '@ rpm-doc\n' - 'sdesc: "Obsolete package for RPM package management system manual pages"\n' + 'sdesc: "Obsolete package for RPM package management system manual pages (extra text to so repr is not one line)"\n' 'category: _obsolete\n' 'version: 999-1\n' 'install: x86/release/rpm-doc/rpm-doc-999-1.tar.bz2 42 ' diff --git a/test/testdata/process_arch/setup.ini.expected b/test/testdata/process_arch/setup.ini.expected index 01766f0..bdeea8c 100644 --- a/test/testdata/process_arch/setup.ini.expected +++ b/test/testdata/process_arch/setup.ini.expected @@ -262,7 +262,7 @@ '4de528554acb0b63f2a964bc8a0421118f96ce05cb4c9d111983aaea1a4a93025b31627fd66875fa09c2dfaecc11a89f2a294bdd3c77055bfaa93a27fdfc1f07\n' '\n' '@ rpm-doc\n' - 'sdesc: "Obsolete package for RPM package management system manual pages"\n' + 'sdesc: "Obsolete package for RPM package management system manual pages (extra text to so repr is not one line)"\n' 'category: _obsolete\n' 'version: 999-1\n' 'install: x86/release/rpm-doc/rpm-doc-999-1.tar.bz2 42 ' @@ -329,7 +329,7 @@ '@ testpackage\n' 'sdesc: "A test package"\n' 'ldesc: "A test package\n' - "It's description might contains some unicode gibberish\n" + "It's description might contains some unicode junk\n" 'Like it’s you’re Markup Language™ Nokogiri’s tool―that Bézier."\n' 'category: Devel\n' 'requires: cygwin\n' diff --git a/test/testdata/relarea/x86/release/rpm-doc/setup.hint b/test/testdata/relarea/x86/release/rpm-doc/setup.hint index f3bbf78..087a6dd 100644 --- a/test/testdata/relarea/x86/release/rpm-doc/setup.hint +++ b/test/testdata/relarea/x86/release/rpm-doc/setup.hint @@ -1,2 +1,2 @@ -sdesc: "Obsolete package for RPM package management system manual pages" +sdesc: "Obsolete package for RPM package management system manual pages (extra text to so repr is not one line)" category: _obsolete diff --git a/test/testdata/uploads/pkglist.expected b/test/testdata/uploads/pkglist.expected index aec9b6f..4275391 100644 --- a/test/testdata/uploads/pkglist.expected +++ b/test/testdata/uploads/pkglist.expected @@ -1,8 +1,7 @@ {'testpackage': Package('x86/release/testpackage', {'1.0-1': {'testpackage-1.0-1-src.tar.bz2': Tar('aff488008bee3486e25b539fe6ccd1397bd3c5c0ba2ee2cf34af279554baa195af7493ee51d6f8510735c9a2ea54436d776a71e768165716762aec286abbbf83', 195, False), 'testpackage-1.0-1.tar.bz2': Tar('aff488008bee3486e25b539fe6ccd1397bd3c5c0ba2ee2cf34af279554baa195af7493ee51d6f8510735c9a2ea54436d776a71e768165716762aec286abbbf83', 195, False)}}, {'1.0-1': {'sdesc': '"A test package"', 'ldesc': '"A test package\n' - "It's description might contains some unicode " - 'gibberish\n' + "It's description might contains some unicode junk\n" 'Like it’s you’re Markup Language™ Nokogiri’s tool―that ' 'Bézier."', 'category': 'Devel',