# -*- coding: utf-8 -*- from __future__ import unicode_literals, print_function import datetime import os from pelican import readers from pelican.tests.support import unittest, get_settings CUR_DIR = os.path.dirname(__file__) CONTENT_PATH = os.path.join(CUR_DIR, 'content') def _path(*args): return os.path.join(CONTENT_PATH, *args) class ReaderTest(unittest.TestCase): def read_file(self, path, **kwargs): # Isolate from future API changes to readers.read_file r = readers.Readers(settings=get_settings(**kwargs)) return r.read_file(base_path=CONTENT_PATH, path=path) class DefaultReaderTest(ReaderTest): def test_readfile_unknown_extension(self): with self.assertRaises(TypeError): self.read_file(path='article_with_metadata.unknownextension') class RstReaderTest(ReaderTest): def test_article_with_metadata(self): page = self.read_file(path='article_with_metadata.rst') expected = { 'category': 'yeah', 'author': 'Alexis Métaireau', 'title': 'This is a super article !', 'summary': '
Multi-line metadata should be' ' supported\nas well as inline' ' markup and stuff to "typogrify' '"...
\n', 'date': datetime.datetime(2010, 12, 2, 10, 14), 'modified': datetime.datetime(2010, 12, 2, 10, 20), 'tags': ['foo', 'bar', 'foobar'], 'custom_field': 'http://notmyidea.org', } for key, value in expected.items(): self.assertEqual(value, page.metadata[key], key) def test_article_with_filename_metadata(self): page = self.read_file( path='2012-11-29_rst_w_filename_meta#foo-bar.rst', FILENAME_METADATA=None) expected = { 'category': 'yeah', 'author': 'Alexis Métaireau', 'title': 'Rst with filename metadata', } for key, value in page.metadata.items(): self.assertEqual(value, expected[key], key) page = self.read_file( path='2012-11-29_rst_w_filename_meta#foo-bar.rst', FILENAME_METADATA='(?PTHIS is some content. With some stuff to ' '"typogrify"...
\nNow with added ' 'support for ' 'TLA.
\n') self.assertEqual(page.content, expected) try: # otherwise, typogrify should be applied page = self.read_file(path='article.rst', TYPOGRIFY=True) expected = ( 'THIS is some content. ' 'With some stuff to "typogrify"…
\n' 'Now with added support for TLA.
\n') self.assertEqual(page.content, expected) except ImportError: return unittest.skip('need the typogrify distribution') def test_typogrify_summary(self): # if nothing is specified in the settings, the summary should be # unmodified page = self.read_file(path='article_with_metadata.rst') expected = ('Multi-line metadata should be' ' supported\nas well as inline' ' markup and stuff to "typogrify' '"...
\n') self.assertEqual(page.metadata['summary'], expected) try: # otherwise, typogrify should be applied page = self.read_file(path='article_with_metadata.rst', TYPOGRIFY=True) expected = ('Multi-line metadata should be' ' supported\nas well as inline' ' markup and stuff to "typogrify' '"…
\n') self.assertEqual(page.metadata['summary'], expected) except ImportError: return unittest.skip('need the typogrify distribution') def test_article_with_multiple_authors(self): page = self.read_file(path='article_with_multiple_authors.rst') expected = { 'authors': ['First Author', 'Second Author'] } for key, value in expected.items(): self.assertEqual(value, page.metadata[key], key) class MdReaderTest(ReaderTest): @unittest.skipUnless(readers.Markdown, "markdown isn't installed") def test_article_with_metadata(self): reader = readers.MarkdownReader(settings=get_settings()) content, metadata = reader.read( _path('article_with_md_extension.md')) expected = { 'category': 'test', 'title': 'Test md File', 'summary': 'I have a lot to test
', 'date': datetime.datetime(2010, 12, 2, 10, 14), 'modified': datetime.datetime(2010, 12, 2, 10, 20), 'tags': ['foo', 'bar', 'foobar'], } for key, value in metadata.items(): self.assertEqual(value, expected[key], key) content, metadata = reader.read( _path('article_with_markdown_and_nonascii_summary.md')) expected = { 'title': 'マックOS X 10.8でパイソンとVirtualenvをインストールと設定', 'summary': 'パイソンとVirtualenvをまっくでインストールする方法について明確に説明します。
', 'category': '指導書', 'date': datetime.datetime(2012, 12, 20), 'modified': datetime.datetime(2012, 12, 22), 'tags': ['パイソン', 'マック'], 'slug': 'python-virtualenv-on-mac-osx-mountain-lion-10.8', } for key, value in metadata.items(): self.assertEqual(value, expected[key], key) @unittest.skipUnless(readers.Markdown, "markdown isn't installed") def test_article_with_footnote(self): reader = readers.MarkdownReader(settings=get_settings()) content, metadata = reader.read( _path('article_with_markdown_and_footnote.md')) expected_content = ( 'This is some content' '1' ' with some footnotes' '2
\n' '') expected_metadata = { 'title': 'Article with markdown containing footnotes', 'summary': ( 'Summary with inline markup ' 'should be supported.
'), 'date': datetime.datetime(2012, 10, 31), 'modified': datetime.datetime(2012, 11, 1), 'slug': 'article-with-markdown-containing-footnotes', 'multiline': [ 'Line Metadata should be handle properly.', 'See syntax of Meta-Data extension of Python Markdown package:', 'If a line is indented by 4 or more spaces,', 'that line is assumed to be an additional line of the value', 'for the previous keyword.', 'A keyword may have as many lines as desired.', ] } self.assertEqual(content, expected_content) for key, value in metadata.items(): self.assertEqual(value, expected_metadata[key], key) @unittest.skipUnless(readers.Markdown, "markdown isn't installed") def test_article_with_file_extensions(self): reader = readers.MarkdownReader(settings=get_settings()) # test to ensure the md file extension is being processed by the # correct reader content, metadata = reader.read( _path('article_with_md_extension.md')) expected = ( "The quick brown fox jumped over the lazy dog's back.
") self.assertEqual(content, expected) # test to ensure the mkd file extension is being processed by the # correct reader content, metadata = reader.read( _path('article_with_mkd_extension.mkd')) expected = ("This is another markdown test file. Uses" " the mkd extension.
") self.assertEqual(content, expected) # test to ensure the markdown file extension is being processed by the # correct reader content, metadata = reader.read( _path('article_with_markdown_extension.markdown')) expected = ("This is another markdown test file. Uses" " the markdown extension.
") self.assertEqual(content, expected) # test to ensure the mdown file extension is being processed by the # correct reader content, metadata = reader.read( _path('article_with_mdown_extension.mdown')) expected = ("This is another markdown test file. Uses" " the mdown extension.
") self.assertEqual(content, expected) @unittest.skipUnless(readers.Markdown, "markdown isn't installed") def test_article_with_markdown_markup_extension(self): # test to ensure the markdown markup extension is being processed as # expected page = self.read_file( path='article_with_markdown_markup_extensions.md', MD_EXTENSIONS=['toc', 'codehilite', 'extra']) expected = ('\n' '