From 53845bf20f21864e73794f4abe7f5ca081a68393 Mon Sep 17 00:00:00 2001 From: drewcassidy Date: Sun, 25 Apr 2021 15:41:51 -0700 Subject: [PATCH] Rewrite tests --- tests/common.py | 79 +++++++++++++++++++++++++++++++++++++++++ tests/test_changelog.py | 67 ++++++++++++---------------------- yaclog/changelog.py | 6 ++-- 3 files changed, 105 insertions(+), 47 deletions(-) create mode 100644 tests/common.py diff --git a/tests/common.py b/tests/common.py new file mode 100644 index 0000000..a9b9887 --- /dev/null +++ b/tests/common.py @@ -0,0 +1,79 @@ +import datetime +import os.path +import textwrap +import yaclog.changelog + +log_segments = [ + '# Changelog', + + 'This changelog is for testing the parser, and has many things in it that might trip it up.', + + '## [Tests]', # 2 + + '- bullet point with no section', + + '### Bullet Points', # 4 + + textwrap.dedent('''\ + - bullet point dash + * bullet point star + + bullet point plus + - sub point 1 + - sub point 2 + - sub point 3'''), + + '### Blocks ##', # 6 + + '#### This is an H4', + '##### This is an H5', + '###### This is an H6', + + '- this is a bullet point\nit spans many lines', + + 'This is\na paragraph\nit spans many lines', + + '```python\nthis is some example code\nit spans many lines\n```', + + '> this is a block quote\nit spans many lines', + + '[FullVersion] - 1969-07-20 [TAG1] [TAG2]\n-----', # 14 + '## Long Version Name', # 15 + + '[FullVersion]: http://endless.horse\n[id]: http://www.koalastothemax.com' +] + +log_text = '\n\n'.join(log_segments) + +log = yaclog.Changelog() +log.header = '# Changelog\n\nThis changelog is for testing the parser, and has many things in it that might trip it up.' +log.links = {'id': 'http://www.koalastothemax.com'} +log.versions = [yaclog.changelog.VersionEntry(), yaclog.changelog.VersionEntry(), yaclog.changelog.VersionEntry()] + +log.versions[0].name = '[Tests]' +log.versions[0].sections = { + '': ['- bullet point with no section'], + 'Bullet Points': [ + '- bullet point dash', + '* bullet point star', + '+ bullet point plus\n - sub point 1\n - sub point 2\n - sub point 3'], + 'Blocks': [ + '#### This is an H4', + '##### This is an H5', + '###### This is an H6', + + '- this is a bullet point\nit spans many lines', + + 'This is\na paragraph\nit spans many lines', + + '```python\nthis is some example code\nit spans many lines\n```', + + '> this is a block quote\nit spans many lines', + ] +} + +log.versions[1].name = 'FullVersion' +log.versions[1].link = 'http://endless.horse' +log.versions[1].tags = ['TAG1', 'TAG2'] +log.versions[1].date = datetime.date.fromisoformat('1969-07-20') + +log.versions[2].name = 'Long Version Name' diff --git a/tests/test_changelog.py b/tests/test_changelog.py index 6ad8655..5e9a074 100644 --- a/tests/test_changelog.py +++ b/tests/test_changelog.py @@ -1,61 +1,40 @@ import unittest -import yaclog +import yaclog.changelog import os.path import datetime - -test_dir = os.path.dirname(os.path.realpath(__file__)) +import textwrap +import tempfile +from tests.common import log, log_segments, log_text class TestParser(unittest.TestCase): - def setUp(self): - self.log = yaclog.read(os.path.join(test_dir, 'Test-Changelog.md')) + + @classmethod + def setUpClass(cls): + with tempfile.TemporaryDirectory() as td: + cls.path = os.path.join(td, 'changelog.md') + with open(cls.path, 'w') as fd: + fd.write(log_text) + cls.log = yaclog.read(cls.path) def test_header(self): - self.assertEqual(self.log.header, - '# Changelog\n\n' - 'This changelog is for testing the parser, and has many things in it that might trip it up.') + self.assertEqual(log.header, self.log.header) def test_path(self): - self.assertEqual(self.log.path, os.path.join(test_dir, 'Test-Changelog.md')) + self.assertEqual(self.path, self.log.path) def test_links(self): - self.assertEqual(self.log.links, {'unreleased': 'http://beesbeesbees.com', - '1.1.0': 'http://endless.horse', - 'id': 'http://www.koalastothemax.com'}) + self.assertEqual({'fullversion': 'http://endless.horse', **log.links}, self.log.links) def test_versions(self): - v = self.log.versions - self.assertEqual(v[0].name, 'Unreleased') - self.assertEqual(v[0].link, 'http://beesbeesbees.com') - self.assertEqual(v[0].date, None) - self.assertEqual(v[0].tags, []) - - self.assertEqual(v[1].name, '1.1.0') - self.assertEqual(v[1].link, 'http://endless.horse') - self.assertEqual(v[1].date, datetime.date.fromisoformat('1969-07-20')) - self.assertEqual(v[1].tags, ['PRERELEASE']) - - self.assertEqual(v[2].name, 'Not a version number') - self.assertEqual(v[2].link, None) - self.assertEqual(v[2].date, None) - self.assertEqual(v[2].tags, []) - - def test_unreleased(self): - v = self.log.versions[0] - - self.assertEqual(v.sections[''], ['- bullet point with no section']) - self.assertEqual(v.sections['Added'], - ['- bullet point dash', '* bullet point star', - '+ bullet point plus\n - sub point 1\n - sub point 2\n - sub point 3']) - self.assertEqual(v.sections['Fixed'], - ['- this is a bullet point\n it spans many lines', - 'This is\na paragraph\nit spans many lines', - 'this line has an [id] link', - '#### This is an H4', - '##### This is an H5', - '###### This is an H6', - '```markdown\nthis is some example code\nit spans many lines\n```', - '> this is a block quote\nit spans many lines']) + for i in range(len(self.log.versions)): + self.assertEqual(log.versions[i].name, self.log.versions[i].name) + self.assertEqual(log.versions[i].link, self.log.versions[i].link) + self.assertEqual(log.versions[i].date, self.log.versions[i].date) + self.assertEqual(log.versions[i].tags, self.log.versions[i].tags) + + def test_Entries(self): + self.assertEqual(log.versions[0].sections, self.log.versions[0].sections) if __name__ == '__main__': diff --git a/yaclog/changelog.py b/yaclog/changelog.py index e5f16e9..521add8 100644 --- a/yaclog/changelog.py +++ b/yaclog/changelog.py @@ -120,7 +120,7 @@ class Changelog: self.versions: List[VersionEntry] = [] self.links = {} - if not os.path.exists(path): + if not path or not os.path.exists(path): self.header = default_header return @@ -266,11 +266,11 @@ class Changelog: for version in self.versions: if version.link: - v_links[version.name] = version.link + v_links[version.name.lower()] = version.link segments.append(version.text()) - segments += [f'[{link_id.lower()}]: {link}' for link_id, link in v_links.items()] + segments += [f'[{link_id}]: {link}' for link_id, link in v_links.items()] text = _join_markdown(segments)