diff --git a/pelican/tests/support.py b/pelican/tests/support.py index eb869a57..a4fd2c35 100644 --- a/pelican/tests/support.py +++ b/pelican/tests/support.py @@ -161,10 +161,14 @@ def locale_available(locale_): return True -def get_settings(): +def get_settings(**kwargs): + """Provide tweaked setting dictionaries for testing + + Set keyword arguments to override specific settings. + """ settings = DEFAULT_CONFIG.copy() - settings['DIRECT_TEMPLATES'] = ['archives'] - settings['filenames'] = {} + for key,value in kwargs.items(): + settings[key] = value return settings diff --git a/pelican/tests/test_contents.py b/pelican/tests/test_contents.py index a0918851..c081639d 100644 --- a/pelican/tests/test_contents.py +++ b/pelican/tests/test_contents.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals from datetime import datetime from sys import platform -from .support import unittest +from .support import unittest, get_settings from pelican.contents import Page, Article, URLWrapper from pelican.settings import DEFAULT_CONFIG @@ -62,7 +62,7 @@ class TestPage(unittest.TestCase): # If a :SUMMARY_MAX_LENGTH: is set, and there is no other summary, # generated summary should not exceed the given length. page_kwargs = self._copy_page_kwargs() - settings = DEFAULT_CONFIG.copy() + settings = get_settings() page_kwargs['settings'] = settings del page_kwargs['metadata']['summary'] settings['SUMMARY_MAX_LENGTH'] = None @@ -108,8 +108,7 @@ class TestPage(unittest.TestCase): page = Page(**self.page_kwargs) self.assertIn('summary', page.url_format.keys()) page.metadata['directory'] = 'test-dir' - page.settings = DEFAULT_CONFIG.copy() - page.settings['PAGE_SAVE_AS'] = '{directory}/{slug}' + page.settings = get_settings(PAGE_SAVE_AS='{directory}/{slug}') self.assertEqual(page.save_as, 'test-dir/foo-bar') def test_datetime(self): @@ -125,8 +124,7 @@ class TestPage(unittest.TestCase): self.assertEqual(page.locale_date, dt.strftime(DEFAULT_CONFIG['DEFAULT_DATE_FORMAT'])) - page_kwargs['settings'] = dict([(x, DEFAULT_CONFIG[x]) for x in - DEFAULT_CONFIG]) + page_kwargs['settings'] = get_settings() # I doubt this can work on all platforms ... if platform == "win32": diff --git a/pelican/tests/test_generators.py b/pelican/tests/test_generators.py index f20f0b4a..cb54b5ec 100644 --- a/pelican/tests/test_generators.py +++ b/pelican/tests/test_generators.py @@ -29,7 +29,7 @@ class TestArticlesGenerator(unittest.TestCase): for each test. """ if self.generator is None: - settings = get_settings() + settings = get_settings(filenames={}) settings['ARTICLE_DIR'] = 'content' settings['DEFAULT_CATEGORY'] = 'Default' settings['DEFAULT_DATE'] = (1970, 1, 1) @@ -144,7 +144,7 @@ class TestArticlesGenerator(unittest.TestCase): def test_direct_templates_save_as_default(self): - settings = get_settings() + settings = get_settings(filenames={}) generator = ArticlesGenerator(settings, settings, None, settings['THEME'], None, settings['MARKUP']) @@ -212,7 +212,7 @@ class TestPageGenerator(unittest.TestCase): return distilled def test_generate_context(self): - settings = get_settings() + settings = get_settings(filenames={}) settings['PAGE_DIR'] = 'TestPages' settings['DEFAULT_DATE'] = (1970, 1, 1) diff --git a/pelican/tests/test_readers.py b/pelican/tests/test_readers.py index f3427066..9fb3320d 100644 --- a/pelican/tests/test_readers.py +++ b/pelican/tests/test_readers.py @@ -5,7 +5,7 @@ import datetime import os from pelican import readers -from pelican.tests.support import unittest +from pelican.tests.support import unittest, get_settings CUR_DIR = os.path.dirname(__file__) CONTENT_PATH = os.path.join(CUR_DIR, 'content') @@ -15,11 +15,18 @@ def _path(*args): return os.path.join(CONTENT_PATH, *args) -class RstReaderTest(unittest.TestCase): +class ReaderTest(unittest.TestCase): + + def read_file(self, path, **kwargs): + # Isolate from future API changes to readers.read_file + return readers.read_file( + _path(path), settings=get_settings(**kwargs)) + + +class RstReaderTest(ReaderTest): def test_article_with_metadata(self): - reader = readers.RstReader({}) - content, metadata = reader.read(_path('article_with_metadata.rst')) + content, metadata = self.read_file(path='article_with_metadata.rst') expected = { 'category': 'yeah', 'author': 'Alexis Métaireau', @@ -36,8 +43,9 @@ class RstReaderTest(unittest.TestCase): self.assertEqual(value, metadata[key], key) def test_article_with_filename_metadata(self): - content, metadata = readers.read_file( - _path('2012-11-29_rst_w_filename_meta#foo-bar.rst')) + content, metadata = self.read_file( + path='2012-11-29_rst_w_filename_meta#foo-bar.rst', + FILENAME_METADATA=None) expected = { 'category': 'yeah', 'author': 'Alexis Métaireau', @@ -46,11 +54,9 @@ class RstReaderTest(unittest.TestCase): for key, value in metadata.items(): self.assertEqual(value, expected[key], key) - content, metadata = readers.read_file( - _path('2012-11-29_rst_w_filename_meta#foo-bar.rst'), - settings={ - 'FILENAME_METADATA': '(?P\d{4}-\d{2}-\d{2}).*' - }) + content, metadata = self.read_file( + path='2012-11-29_rst_w_filename_meta#foo-bar.rst', + FILENAME_METADATA='(?P\d{4}-\d{2}-\d{2}).*') expected = { 'category': 'yeah', 'author': 'Alexis Métaireau', @@ -60,13 +66,12 @@ class RstReaderTest(unittest.TestCase): for key, value in metadata.items(): self.assertEqual(value, expected[key], key) - content, metadata = readers.read_file( - _path('2012-11-29_rst_w_filename_meta#foo-bar.rst'), - settings={ - 'FILENAME_METADATA': '(?P\d{4}-\d{2}-\d{2})_' - '_(?P.*)' - '#(?P.*)-(?P.*)' - }) + content, metadata = self.read_file( + path='2012-11-29_rst_w_filename_meta#foo-bar.rst', + FILENAME_METADATA=( + '(?P\d{4}-\d{2}-\d{2})_' + '_(?P.*)' + '#(?P.*)-(?P.*)')) expected = { 'category': 'yeah', 'author': 'Alexis Métaireau', @@ -91,7 +96,7 @@ class RstReaderTest(unittest.TestCase): def test_typogrify(self): # if nothing is specified in the settings, the content should be # unmodified - content, _ = readers.read_file(_path('article.rst')) + content, _ = self.read_file(path='article.rst') expected = ('

This is some content. With some stuff to ' '"typogrify".

\n

Now with added ' 'support for ' @@ -101,8 +106,7 @@ class RstReaderTest(unittest.TestCase): try: # otherwise, typogrify should be applied - content, _ = readers.read_file(_path('article.rst'), - settings={'TYPOGRIFY': True}) + content, _ = self.read_file(path='article.rst', TYPOGRIFY=True) expected = ('

This is some content. With some stuff to ' '“typogrify”.

\n

Now with added ' 'support for ' @@ -113,7 +117,7 @@ class RstReaderTest(unittest.TestCase): return unittest.skip('need the typogrify distribution') -class MdReaderTest(unittest.TestCase): +class MdReaderTest(ReaderTest): @unittest.skipUnless(readers.Markdown, "markdown isn't installed") def test_article_with_metadata(self): @@ -221,9 +225,9 @@ class MdReaderTest(unittest.TestCase): def test_article_with_markdown_markup_extension(self): # test to ensure the markdown markup extension is being processed as # expected - content, metadata = readers.read_file( - _path('article_with_markdown_markup_extensions.md'), - settings={'MD_EXTENSIONS': ['toc', 'codehilite', 'extra']}) + content, metadata = self.read_file( + path='article_with_markdown_markup_extensions.md', + MD_EXTENSIONS=['toc', 'codehilite', 'extra']) expected = ('

\n' '
    \n' '
  • Level1
      \n' @@ -239,8 +243,9 @@ class MdReaderTest(unittest.TestCase): @unittest.skipUnless(readers.Markdown, "markdown isn't installed") def test_article_with_filename_metadata(self): - content, metadata = readers.read_file( - _path('2012-11-30_md_w_filename_meta#foo-bar.md')) + content, metadata = self.read_file( + path='2012-11-30_md_w_filename_meta#foo-bar.md', + FILENAME_METADATA=None) expected = { 'category': 'yeah', 'author': 'Alexis Métaireau', @@ -248,11 +253,9 @@ class MdReaderTest(unittest.TestCase): for key, value in expected.items(): self.assertEqual(value, metadata[key], key) - content, metadata = readers.read_file( - _path('2012-11-30_md_w_filename_meta#foo-bar.md'), - settings={ - 'FILENAME_METADATA': '(?P\d{4}-\d{2}-\d{2}).*' - }) + content, metadata = self.read_file( + path='2012-11-30_md_w_filename_meta#foo-bar.md', + FILENAME_METADATA='(?P\d{4}-\d{2}-\d{2}).*') expected = { 'category': 'yeah', 'author': 'Alexis Métaireau', @@ -261,13 +264,12 @@ class MdReaderTest(unittest.TestCase): for key, value in expected.items(): self.assertEqual(value, metadata[key], key) - content, metadata = readers.read_file( - _path('2012-11-30_md_w_filename_meta#foo-bar.md'), - settings={ - 'FILENAME_METADATA': '(?P\d{4}-\d{2}-\d{2})' - '_(?P.*)' - '#(?P.*)-(?P.*)' - }) + content, metadata = self.read_file( + path='2012-11-30_md_w_filename_meta#foo-bar.md', + FILENAME_METADATA=( + '(?P\d{4}-\d{2}-\d{2})' + '_(?P.*)' + '#(?P.*)-(?P.*)')) expected = { 'category': 'yeah', 'author': 'Alexis Métaireau', @@ -279,14 +281,13 @@ class MdReaderTest(unittest.TestCase): self.assertEqual(value, metadata[key], key) -class AdReaderTest(unittest.TestCase): +class AdReaderTest(ReaderTest): @unittest.skipUnless(readers.asciidoc, "asciidoc isn't installed") def test_article_with_asc_extension(self): # Ensure the asc extension is being processed by the correct reader - reader = readers.AsciiDocReader({}) - content, metadata = reader.read( - _path('article_with_asc_extension.asc')) + content, metadata = self.read_file( + path='article_with_asc_extension.asc') expected = ('
      \n

      ' 'Used for pelican test

      \n' '

      The quick brown fox jumped over' @@ -316,10 +317,9 @@ class AdReaderTest(unittest.TestCase): self.assertEqual(content, expected) -class HTMLReaderTest(unittest.TestCase): +class HTMLReaderTest(ReaderTest): def test_article_with_comments(self): - reader = readers.HTMLReader({}) - content, metadata = reader.read(_path('article_with_comments.html')) + content, metadata = self.read_file(path='article_with_comments.html') self.assertEqual(''' Body content @@ -327,8 +327,7 @@ class HTMLReaderTest(unittest.TestCase): ''', content) def test_article_with_keywords(self): - reader = readers.HTMLReader({}) - content, metadata = reader.read(_path('article_with_keywords.html')) + content, metadata = self.read_file(path='article_with_keywords.html') expected = { 'tags': ['foo', 'bar', 'foobar'], } @@ -337,8 +336,7 @@ class HTMLReaderTest(unittest.TestCase): self.assertEqual(value, metadata[key], key) def test_article_with_metadata(self): - reader = readers.HTMLReader({}) - content, metadata = reader.read(_path('article_with_metadata.html')) + content, metadata = self.read_file(path='article_with_metadata.html') expected = { 'category': 'yeah', 'author': 'Alexis Métaireau', @@ -353,9 +351,8 @@ class HTMLReaderTest(unittest.TestCase): self.assertEqual(value, metadata[key], key) def test_article_with_null_attributes(self): - reader = readers.HTMLReader({}) - content, metadata = reader.read( - _path('article_with_null_attributes.html')) + content, metadata = self.read_file( + path='article_with_null_attributes.html') self.assertEqual(''' Ensure that empty attributes are copied properly. @@ -364,9 +361,8 @@ class HTMLReaderTest(unittest.TestCase): def test_article_metadata_key_lowercase(self): # Keys of metadata should be lowercase. - reader = readers.HTMLReader({}) - content, metadata = reader.read( - _path('article_with_uppercase_metadata.html')) + content, metadata = self.read_file( + path='article_with_uppercase_metadata.html') self.assertIn('category', metadata, 'Key should be lowercase.') self.assertEqual('Yeah', metadata.get('category'), 'Value keeps cases.')