mirror of
https://github.com/getpelican/pelican.git
synced 2025-10-15 20:28:56 +02:00
Merge pull request #1681 from ingwinlu/fix_test_readers
Maintain test_readers
This commit is contained in:
commit
44bd308dd2
1 changed files with 140 additions and 41 deletions
|
|
@ -22,6 +22,52 @@ class ReaderTest(unittest.TestCase):
|
||||||
r = readers.Readers(settings=get_settings(**kwargs))
|
r = readers.Readers(settings=get_settings(**kwargs))
|
||||||
return r.read_file(base_path=CONTENT_PATH, path=path)
|
return r.read_file(base_path=CONTENT_PATH, path=path)
|
||||||
|
|
||||||
|
def assertDictHasSubset(self, dictionary, subset):
|
||||||
|
for key, value in subset.items():
|
||||||
|
if key in dictionary:
|
||||||
|
real_value = dictionary.get(key)
|
||||||
|
self.assertEqual(
|
||||||
|
value,
|
||||||
|
real_value,
|
||||||
|
str('Expected %r to have value %r, but was %r')
|
||||||
|
% (key, value, real_value))
|
||||||
|
else:
|
||||||
|
self.fail(
|
||||||
|
str('Expected %r to have value %r, but was not in Dict')
|
||||||
|
% (key, value))
|
||||||
|
|
||||||
|
class TestAssertDictHasSubset(ReaderTest):
|
||||||
|
def setUp(self):
|
||||||
|
self.dictionary = {
|
||||||
|
'key-a' : 'val-a',
|
||||||
|
'key-b' : 'val-b'}
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
self.dictionary = None
|
||||||
|
|
||||||
|
def test_subset(self):
|
||||||
|
self.assertDictHasSubset(self.dictionary, {'key-a':'val-a'})
|
||||||
|
|
||||||
|
def test_equal(self):
|
||||||
|
self.assertDictHasSubset(self.dictionary, self.dictionary)
|
||||||
|
|
||||||
|
def test_fail_not_set(self):
|
||||||
|
self.assertRaisesRegexp(
|
||||||
|
AssertionError,
|
||||||
|
'Expected.*key-c.*to have value.*val-c.*but was not in Dict',
|
||||||
|
self.assertDictHasSubset,
|
||||||
|
self.dictionary,
|
||||||
|
{'key-c':'val-c'}
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_fail_wrong_val(self):
|
||||||
|
self.assertRaisesRegexp(
|
||||||
|
AssertionError,
|
||||||
|
'Expected .*key-a.* to have value .*val-b.* but was .*val-a.*',
|
||||||
|
self.assertDictHasSubset,
|
||||||
|
self.dictionary,
|
||||||
|
{'key-a':'val-b'}
|
||||||
|
)
|
||||||
|
|
||||||
class DefaultReaderTest(ReaderTest):
|
class DefaultReaderTest(ReaderTest):
|
||||||
|
|
||||||
|
|
@ -48,8 +94,7 @@ class RstReaderTest(ReaderTest):
|
||||||
'custom_field': 'http://notmyidea.org',
|
'custom_field': 'http://notmyidea.org',
|
||||||
}
|
}
|
||||||
|
|
||||||
for key, value in expected.items():
|
self.assertDictHasSubset(page.metadata, expected)
|
||||||
self.assertEqual(value, page.metadata[key], key)
|
|
||||||
|
|
||||||
def test_article_with_filename_metadata(self):
|
def test_article_with_filename_metadata(self):
|
||||||
page = self.read_file(
|
page = self.read_file(
|
||||||
|
|
@ -61,8 +106,7 @@ class RstReaderTest(ReaderTest):
|
||||||
'title': 'Rst with filename metadata',
|
'title': 'Rst with filename metadata',
|
||||||
'reader': 'rst',
|
'reader': 'rst',
|
||||||
}
|
}
|
||||||
for key, value in page.metadata.items():
|
self.assertDictHasSubset(page.metadata, expected)
|
||||||
self.assertEqual(value, expected[key], key)
|
|
||||||
|
|
||||||
page = self.read_file(
|
page = self.read_file(
|
||||||
path='2012-11-29_rst_w_filename_meta#foo-bar.rst',
|
path='2012-11-29_rst_w_filename_meta#foo-bar.rst',
|
||||||
|
|
@ -74,13 +118,12 @@ class RstReaderTest(ReaderTest):
|
||||||
'date': SafeDatetime(2012, 11, 29),
|
'date': SafeDatetime(2012, 11, 29),
|
||||||
'reader': 'rst',
|
'reader': 'rst',
|
||||||
}
|
}
|
||||||
for key, value in page.metadata.items():
|
self.assertDictHasSubset(page.metadata, expected)
|
||||||
self.assertEqual(value, expected[key], key)
|
|
||||||
|
|
||||||
page = self.read_file(
|
page = self.read_file(
|
||||||
path='2012-11-29_rst_w_filename_meta#foo-bar.rst',
|
path='2012-11-29_rst_w_filename_meta#foo-bar.rst',
|
||||||
FILENAME_METADATA=(
|
FILENAME_METADATA=(
|
||||||
'(?P<date>\d{4}-\d{2}-\d{2})_'
|
'(?P<date>\d{4}-\d{2}-\d{2})'
|
||||||
'_(?P<Slug>.*)'
|
'_(?P<Slug>.*)'
|
||||||
'#(?P<MyMeta>.*)-(?P<author>.*)'))
|
'#(?P<MyMeta>.*)-(?P<author>.*)'))
|
||||||
expected = {
|
expected = {
|
||||||
|
|
@ -88,12 +131,11 @@ class RstReaderTest(ReaderTest):
|
||||||
'author': 'Alexis Métaireau',
|
'author': 'Alexis Métaireau',
|
||||||
'title': 'Rst with filename metadata',
|
'title': 'Rst with filename metadata',
|
||||||
'date': SafeDatetime(2012, 11, 29),
|
'date': SafeDatetime(2012, 11, 29),
|
||||||
'slug': 'article_with_filename_metadata',
|
'slug': 'rst_w_filename_meta',
|
||||||
'mymeta': 'foo',
|
'mymeta': 'foo',
|
||||||
'reader': 'rst',
|
'reader': 'rst',
|
||||||
}
|
}
|
||||||
for key, value in page.metadata.items():
|
self.assertDictHasSubset(page.metadata, expected)
|
||||||
self.assertEqual(value, expected[key], key)
|
|
||||||
|
|
||||||
def test_article_metadata_key_lowercase(self):
|
def test_article_metadata_key_lowercase(self):
|
||||||
# Keys of metadata should be lowercase.
|
# Keys of metadata should be lowercase.
|
||||||
|
|
@ -105,6 +147,81 @@ class RstReaderTest(ReaderTest):
|
||||||
self.assertEqual('Yeah', metadata.get('category'),
|
self.assertEqual('Yeah', metadata.get('category'),
|
||||||
'Value keeps case.')
|
'Value keeps case.')
|
||||||
|
|
||||||
|
def test_article_extra_path_metadata(self):
|
||||||
|
input_with_metadata = '2012-11-29_rst_w_filename_meta#foo-bar.rst'
|
||||||
|
page_metadata = self.read_file(
|
||||||
|
path=input_with_metadata,
|
||||||
|
FILENAME_METADATA=(
|
||||||
|
'(?P<date>\d{4}-\d{2}-\d{2})'
|
||||||
|
'_(?P<Slug>.*)'
|
||||||
|
'#(?P<MyMeta>.*)-(?P<author>.*)'
|
||||||
|
),
|
||||||
|
EXTRA_PATH_METADATA={
|
||||||
|
input_with_metadata: {
|
||||||
|
'key-1a': 'value-1a',
|
||||||
|
'key-1b': 'value-1b'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
expected_metadata = {
|
||||||
|
'category': 'yeah',
|
||||||
|
'author' : 'Alexis Métaireau',
|
||||||
|
'title': 'Rst with filename metadata',
|
||||||
|
'date': SafeDatetime(2012, 11, 29),
|
||||||
|
'slug': 'rst_w_filename_meta',
|
||||||
|
'mymeta': 'foo',
|
||||||
|
'reader': 'rst',
|
||||||
|
'key-1a': 'value-1a',
|
||||||
|
'key-1b': 'value-1b'
|
||||||
|
}
|
||||||
|
self.assertDictHasSubset(page_metadata.metadata, expected_metadata)
|
||||||
|
|
||||||
|
input_file_path_without_metadata = 'article.rst'
|
||||||
|
page_without_metadata = self.read_file(
|
||||||
|
path=input_file_path_without_metadata,
|
||||||
|
EXTRA_PATH_METADATA={
|
||||||
|
input_file_path_without_metadata: {
|
||||||
|
'author': 'Charlès Overwrite'}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
expected_without_metadata = {
|
||||||
|
'category' : 'misc',
|
||||||
|
'author' : 'Charlès Overwrite',
|
||||||
|
'title' : 'Article title',
|
||||||
|
'reader' : 'rst',
|
||||||
|
}
|
||||||
|
self.assertDictHasSubset(
|
||||||
|
page_without_metadata.metadata,
|
||||||
|
expected_without_metadata)
|
||||||
|
|
||||||
|
def test_article_extra_path_metadata_dont_overwrite(self):
|
||||||
|
#EXTRA_PATH_METADATA['author'] should get ignored
|
||||||
|
#since we don't overwrite already set values
|
||||||
|
input_file_path = '2012-11-29_rst_w_filename_meta#foo-bar.rst'
|
||||||
|
page = self.read_file(
|
||||||
|
path=input_file_path,
|
||||||
|
FILENAME_METADATA=(
|
||||||
|
'(?P<date>\d{4}-\d{2}-\d{2})'
|
||||||
|
'_(?P<Slug>.*)'
|
||||||
|
'#(?P<MyMeta>.*)-(?P<orginalauthor>.*)'),
|
||||||
|
EXTRA_PATH_METADATA={
|
||||||
|
input_file_path: {
|
||||||
|
'author': 'Charlès Overwrite',
|
||||||
|
'key-1b': 'value-1b'}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
expected = {
|
||||||
|
'category': 'yeah',
|
||||||
|
'author' : 'Alexis Métaireau',
|
||||||
|
'title': 'Rst with filename metadata',
|
||||||
|
'date': SafeDatetime(2012, 11, 29),
|
||||||
|
'slug': 'rst_w_filename_meta',
|
||||||
|
'mymeta': 'foo',
|
||||||
|
'reader': 'rst',
|
||||||
|
'key-1b': 'value-1b'
|
||||||
|
}
|
||||||
|
self.assertDictHasSubset(page.metadata, expected)
|
||||||
|
|
||||||
def test_typogrify(self):
|
def test_typogrify(self):
|
||||||
# if nothing is specified in the settings, the content should be
|
# if nothing is specified in the settings, the content should be
|
||||||
# unmodified
|
# unmodified
|
||||||
|
|
@ -205,13 +322,11 @@ class RstReaderTest(ReaderTest):
|
||||||
'authors': ['First Author', 'Second Author']
|
'authors': ['First Author', 'Second Author']
|
||||||
}
|
}
|
||||||
|
|
||||||
for key, value in expected.items():
|
self.assertDictHasSubset(page.metadata, expected)
|
||||||
self.assertEqual(value, page.metadata[key], key)
|
|
||||||
|
|
||||||
|
|
||||||
|
@unittest.skipUnless(readers.Markdown, "markdown isn't installed")
|
||||||
class MdReaderTest(ReaderTest):
|
class MdReaderTest(ReaderTest):
|
||||||
|
|
||||||
@unittest.skipUnless(readers.Markdown, "markdown isn't installed")
|
|
||||||
def test_article_with_metadata(self):
|
def test_article_with_metadata(self):
|
||||||
reader = readers.MarkdownReader(settings=get_settings())
|
reader = readers.MarkdownReader(settings=get_settings())
|
||||||
content, metadata = reader.read(
|
content, metadata = reader.read(
|
||||||
|
|
@ -224,8 +339,7 @@ class MdReaderTest(ReaderTest):
|
||||||
'modified': SafeDatetime(2010, 12, 2, 10, 20),
|
'modified': SafeDatetime(2010, 12, 2, 10, 20),
|
||||||
'tags': ['foo', 'bar', 'foobar'],
|
'tags': ['foo', 'bar', 'foobar'],
|
||||||
}
|
}
|
||||||
for key, value in metadata.items():
|
self.assertDictHasSubset(metadata, expected)
|
||||||
self.assertEqual(value, expected[key], key)
|
|
||||||
|
|
||||||
content, metadata = reader.read(
|
content, metadata = reader.read(
|
||||||
_path('article_with_markdown_and_nonascii_summary.md'))
|
_path('article_with_markdown_and_nonascii_summary.md'))
|
||||||
|
|
@ -238,10 +352,8 @@ class MdReaderTest(ReaderTest):
|
||||||
'tags': ['パイソン', 'マック'],
|
'tags': ['パイソン', 'マック'],
|
||||||
'slug': 'python-virtualenv-on-mac-osx-mountain-lion-10.8',
|
'slug': 'python-virtualenv-on-mac-osx-mountain-lion-10.8',
|
||||||
}
|
}
|
||||||
for key, value in metadata.items():
|
self.assertDictHasSubset(metadata, expected)
|
||||||
self.assertEqual(value, expected[key], key)
|
|
||||||
|
|
||||||
@unittest.skipUnless(readers.Markdown, "markdown isn't installed")
|
|
||||||
def test_article_with_footnote(self):
|
def test_article_with_footnote(self):
|
||||||
reader = readers.MarkdownReader(settings=get_settings())
|
reader = readers.MarkdownReader(settings=get_settings())
|
||||||
content, metadata = reader.read(
|
content, metadata = reader.read(
|
||||||
|
|
@ -271,7 +383,6 @@ class MdReaderTest(ReaderTest):
|
||||||
'<em>should</em> be supported.</p>'),
|
'<em>should</em> be supported.</p>'),
|
||||||
'date': SafeDatetime(2012, 10, 31),
|
'date': SafeDatetime(2012, 10, 31),
|
||||||
'modified': SafeDatetime(2012, 11, 1),
|
'modified': SafeDatetime(2012, 11, 1),
|
||||||
'slug': 'article-with-markdown-containing-footnotes',
|
|
||||||
'multiline': [
|
'multiline': [
|
||||||
'Line Metadata should be handle properly.',
|
'Line Metadata should be handle properly.',
|
||||||
'See syntax of Meta-Data extension of Python Markdown package:',
|
'See syntax of Meta-Data extension of Python Markdown package:',
|
||||||
|
|
@ -282,10 +393,8 @@ class MdReaderTest(ReaderTest):
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
self.assertEqual(content, expected_content)
|
self.assertEqual(content, expected_content)
|
||||||
for key, value in metadata.items():
|
self.assertDictHasSubset(metadata, expected_metadata)
|
||||||
self.assertEqual(value, expected_metadata[key], key)
|
|
||||||
|
|
||||||
@unittest.skipUnless(readers.Markdown, "markdown isn't installed")
|
|
||||||
def test_article_with_file_extensions(self):
|
def test_article_with_file_extensions(self):
|
||||||
reader = readers.MarkdownReader(settings=get_settings())
|
reader = readers.MarkdownReader(settings=get_settings())
|
||||||
# test to ensure the md file extension is being processed by the
|
# test to ensure the md file extension is being processed by the
|
||||||
|
|
@ -322,7 +431,6 @@ class MdReaderTest(ReaderTest):
|
||||||
" the mdown extension.</p>")
|
" the mdown extension.</p>")
|
||||||
self.assertEqual(content, expected)
|
self.assertEqual(content, expected)
|
||||||
|
|
||||||
@unittest.skipUnless(readers.Markdown, "markdown isn't installed")
|
|
||||||
def test_article_with_markdown_markup_extension(self):
|
def test_article_with_markdown_markup_extension(self):
|
||||||
# test to ensure the markdown markup extension is being processed as
|
# test to ensure the markdown markup extension is being processed as
|
||||||
# expected
|
# expected
|
||||||
|
|
@ -342,7 +450,6 @@ class MdReaderTest(ReaderTest):
|
||||||
|
|
||||||
self.assertEqual(page.content, expected)
|
self.assertEqual(page.content, expected)
|
||||||
|
|
||||||
@unittest.skipUnless(readers.Markdown, "markdown isn't installed")
|
|
||||||
def test_article_with_filename_metadata(self):
|
def test_article_with_filename_metadata(self):
|
||||||
page = self.read_file(
|
page = self.read_file(
|
||||||
path='2012-11-30_md_w_filename_meta#foo-bar.md',
|
path='2012-11-30_md_w_filename_meta#foo-bar.md',
|
||||||
|
|
@ -351,8 +458,7 @@ class MdReaderTest(ReaderTest):
|
||||||
'category': 'yeah',
|
'category': 'yeah',
|
||||||
'author': 'Alexis Métaireau',
|
'author': 'Alexis Métaireau',
|
||||||
}
|
}
|
||||||
for key, value in expected.items():
|
self.assertDictHasSubset(page.metadata, expected)
|
||||||
self.assertEqual(value, page.metadata[key], key)
|
|
||||||
|
|
||||||
page = self.read_file(
|
page = self.read_file(
|
||||||
path='2012-11-30_md_w_filename_meta#foo-bar.md',
|
path='2012-11-30_md_w_filename_meta#foo-bar.md',
|
||||||
|
|
@ -362,8 +468,7 @@ class MdReaderTest(ReaderTest):
|
||||||
'author': 'Alexis Métaireau',
|
'author': 'Alexis Métaireau',
|
||||||
'date': SafeDatetime(2012, 11, 30),
|
'date': SafeDatetime(2012, 11, 30),
|
||||||
}
|
}
|
||||||
for key, value in expected.items():
|
self.assertDictHasSubset(page.metadata, expected)
|
||||||
self.assertEqual(value, page.metadata[key], key)
|
|
||||||
|
|
||||||
page = self.read_file(
|
page = self.read_file(
|
||||||
path='2012-11-30_md_w_filename_meta#foo-bar.md',
|
path='2012-11-30_md_w_filename_meta#foo-bar.md',
|
||||||
|
|
@ -378,8 +483,7 @@ class MdReaderTest(ReaderTest):
|
||||||
'slug': 'md_w_filename_meta',
|
'slug': 'md_w_filename_meta',
|
||||||
'mymeta': 'foo',
|
'mymeta': 'foo',
|
||||||
}
|
}
|
||||||
for key, value in expected.items():
|
self.assertDictHasSubset(page.metadata, expected)
|
||||||
self.assertEqual(value, page.metadata[key], key)
|
|
||||||
|
|
||||||
|
|
||||||
class HTMLReaderTest(ReaderTest):
|
class HTMLReaderTest(ReaderTest):
|
||||||
|
|
@ -397,8 +501,7 @@ class HTMLReaderTest(ReaderTest):
|
||||||
'tags': ['foo', 'bar', 'foobar'],
|
'tags': ['foo', 'bar', 'foobar'],
|
||||||
}
|
}
|
||||||
|
|
||||||
for key, value in expected.items():
|
self.assertDictHasSubset(page.metadata, expected)
|
||||||
self.assertEqual(value, page.metadata[key], key)
|
|
||||||
|
|
||||||
def test_article_with_metadata(self):
|
def test_article_with_metadata(self):
|
||||||
page = self.read_file(path='article_with_metadata.html')
|
page = self.read_file(path='article_with_metadata.html')
|
||||||
|
|
@ -412,8 +515,7 @@ class HTMLReaderTest(ReaderTest):
|
||||||
'custom_field': 'http://notmyidea.org',
|
'custom_field': 'http://notmyidea.org',
|
||||||
}
|
}
|
||||||
|
|
||||||
for key, value in expected.items():
|
self.assertDictHasSubset(page.metadata, expected)
|
||||||
self.assertEqual(value, page.metadata[key], key)
|
|
||||||
|
|
||||||
def test_article_with_multiple_authors(self):
|
def test_article_with_multiple_authors(self):
|
||||||
page = self.read_file(path='article_with_multiple_authors.html')
|
page = self.read_file(path='article_with_multiple_authors.html')
|
||||||
|
|
@ -421,8 +523,7 @@ class HTMLReaderTest(ReaderTest):
|
||||||
'authors': ['First Author', 'Second Author']
|
'authors': ['First Author', 'Second Author']
|
||||||
}
|
}
|
||||||
|
|
||||||
for key, value in expected.items():
|
self.assertDictHasSubset(page.metadata, expected)
|
||||||
self.assertEqual(value, page.metadata[key], key)
|
|
||||||
|
|
||||||
def test_article_with_metadata_and_contents_attrib(self):
|
def test_article_with_metadata_and_contents_attrib(self):
|
||||||
page = self.read_file(path='article_with_metadata_and_contents.html')
|
page = self.read_file(path='article_with_metadata_and_contents.html')
|
||||||
|
|
@ -435,8 +536,7 @@ class HTMLReaderTest(ReaderTest):
|
||||||
'tags': ['foo', 'bar', 'foobar'],
|
'tags': ['foo', 'bar', 'foobar'],
|
||||||
'custom_field': 'http://notmyidea.org',
|
'custom_field': 'http://notmyidea.org',
|
||||||
}
|
}
|
||||||
for key, value in expected.items():
|
self.assertDictHasSubset(page.metadata, expected)
|
||||||
self.assertEqual(value, page.metadata[key], key)
|
|
||||||
|
|
||||||
def test_article_with_null_attributes(self):
|
def test_article_with_null_attributes(self):
|
||||||
page = self.read_file(path='article_with_null_attributes.html')
|
page = self.read_file(path='article_with_null_attributes.html')
|
||||||
|
|
@ -460,5 +560,4 @@ class HTMLReaderTest(ReaderTest):
|
||||||
'title': 'Article with Nonconformant HTML meta tags',
|
'title': 'Article with Nonconformant HTML meta tags',
|
||||||
}
|
}
|
||||||
|
|
||||||
for key, value in expected.items():
|
self.assertDictHasSubset(page.metadata, expected)
|
||||||
self.assertEqual(value, page.metadata[key], key)
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue