mirror of
https://github.com/getpelican/pelican.git
synced 2025-10-15 20:28:56 +02:00
Merge pull request #1521 from iKevinY/update-tests
Added tests for generators, settings, and pelican_import
This commit is contained in:
commit
053d198f22
6 changed files with 91 additions and 13 deletions
|
|
@ -7,7 +7,6 @@ try:
|
||||||
from unittest.mock import MagicMock
|
from unittest.mock import MagicMock
|
||||||
except ImportError:
|
except ImportError:
|
||||||
from mock import MagicMock
|
from mock import MagicMock
|
||||||
from operator import itemgetter
|
|
||||||
from shutil import rmtree
|
from shutil import rmtree
|
||||||
from tempfile import mkdtemp
|
from tempfile import mkdtemp
|
||||||
|
|
||||||
|
|
@ -35,12 +34,17 @@ class TestGenerator(unittest.TestCase):
|
||||||
|
|
||||||
|
|
||||||
def test_include_path(self):
|
def test_include_path(self):
|
||||||
|
self.settings['IGNORE_FILES'] = {'ignored1.rst', 'ignored2.rst'}
|
||||||
|
|
||||||
filename = os.path.join(CUR_DIR, 'content', 'article.rst')
|
filename = os.path.join(CUR_DIR, 'content', 'article.rst')
|
||||||
include_path = self.generator._include_path
|
include_path = self.generator._include_path
|
||||||
self.assertTrue(include_path(filename))
|
self.assertTrue(include_path(filename))
|
||||||
self.assertTrue(include_path(filename, extensions=('rst',)))
|
self.assertTrue(include_path(filename, extensions=('rst',)))
|
||||||
self.assertFalse(include_path(filename, extensions=('md',)))
|
self.assertFalse(include_path(filename, extensions=('md',)))
|
||||||
|
|
||||||
|
ignored_file = os.path.join(CUR_DIR, 'content', 'ignored1.rst')
|
||||||
|
self.assertFalse(include_path(ignored_file))
|
||||||
|
|
||||||
def test_get_files_exclude(self):
|
def test_get_files_exclude(self):
|
||||||
"""Test that Generator.get_files() properly excludes directories.
|
"""Test that Generator.get_files() properly excludes directories.
|
||||||
"""
|
"""
|
||||||
|
|
@ -56,6 +60,13 @@ class TestGenerator(unittest.TestCase):
|
||||||
self.assertFalse(expected_files - found_files,
|
self.assertFalse(expected_files - found_files,
|
||||||
"get_files() failed to find one or more files")
|
"get_files() failed to find one or more files")
|
||||||
|
|
||||||
|
# Test string as `paths` argument rather than list
|
||||||
|
filepaths = generator.get_files(paths='maindir')
|
||||||
|
found_files = {os.path.basename(f) for f in filepaths}
|
||||||
|
expected_files = {'maindir.md', 'subdir.md'}
|
||||||
|
self.assertFalse(expected_files - found_files,
|
||||||
|
"get_files() failed to find one or more files")
|
||||||
|
|
||||||
filepaths = generator.get_files(paths=[''], exclude=['maindir'])
|
filepaths = generator.get_files(paths=[''], exclude=['maindir'])
|
||||||
found_files = {os.path.basename(f) for f in filepaths}
|
found_files = {os.path.basename(f) for f in filepaths}
|
||||||
self.assertNotIn('maindir.md', found_files,
|
self.assertNotIn('maindir.md', found_files,
|
||||||
|
|
@ -318,6 +329,14 @@ class TestArticlesGenerator(unittest.TestCase):
|
||||||
settings,
|
settings,
|
||||||
blog=True, dates=dates)
|
blog=True, dates=dates)
|
||||||
|
|
||||||
|
def test_nonexistent_template(self):
|
||||||
|
"""Attempt to load a non-existent template"""
|
||||||
|
settings = get_settings(filenames={})
|
||||||
|
generator = ArticlesGenerator(
|
||||||
|
context=settings, settings=settings,
|
||||||
|
path=None, theme=settings['THEME'], output_path=None)
|
||||||
|
self.assertRaises(Exception, generator.get_template, "not_a_template")
|
||||||
|
|
||||||
def test_generate_authors(self):
|
def test_generate_authors(self):
|
||||||
"""Check authors generation."""
|
"""Check authors generation."""
|
||||||
authors = [author.name for author, _ in self.generator.authors]
|
authors = [author.name for author, _ in self.generator.authors]
|
||||||
|
|
|
||||||
|
|
@ -245,6 +245,41 @@ class TestBuildHeader(unittest.TestCase):
|
||||||
header = build_header('test', None, None, None, None, None)
|
header = build_header('test', None, None, None, None, None)
|
||||||
self.assertEqual(header, 'test\n####\n\n')
|
self.assertEqual(header, 'test\n####\n\n')
|
||||||
|
|
||||||
|
def test_build_header_with_fields(self):
|
||||||
|
header_data = [
|
||||||
|
'Test Post',
|
||||||
|
'2014-11-04',
|
||||||
|
'Alexis Métaireau',
|
||||||
|
['Programming'],
|
||||||
|
['Pelican', 'Python'],
|
||||||
|
'test-post',
|
||||||
|
]
|
||||||
|
|
||||||
|
expected_docutils = '\n'.join([
|
||||||
|
'Test Post',
|
||||||
|
'#########',
|
||||||
|
':date: 2014-11-04',
|
||||||
|
':author: Alexis Métaireau',
|
||||||
|
':category: Programming',
|
||||||
|
':tags: Pelican, Python',
|
||||||
|
':slug: test-post',
|
||||||
|
'\n',
|
||||||
|
])
|
||||||
|
|
||||||
|
expected_md = '\n'.join([
|
||||||
|
'Title: Test Post',
|
||||||
|
'Date: 2014-11-04',
|
||||||
|
'Author: Alexis Métaireau',
|
||||||
|
'Category: Programming',
|
||||||
|
'Tags: Pelican, Python',
|
||||||
|
'Slug: test-post',
|
||||||
|
'\n',
|
||||||
|
])
|
||||||
|
|
||||||
|
self.assertEqual(build_header(*header_data), expected_docutils)
|
||||||
|
self.assertEqual(build_markdown_header(*header_data), expected_md)
|
||||||
|
|
||||||
|
|
||||||
def test_build_header_with_east_asian_characters(self):
|
def test_build_header_with_east_asian_characters(self):
|
||||||
header = build_header('これは広い幅の文字だけで構成されたタイトルです',
|
header = build_header('これは広い幅の文字だけで構成されたタイトルです',
|
||||||
None, None, None, None, None)
|
None, None, None, None, None)
|
||||||
|
|
@ -265,6 +300,7 @@ class TestBuildHeader(unittest.TestCase):
|
||||||
self.assertEqual(header, 'Title: test\n' + 'Attachments: output/test1, '
|
self.assertEqual(header, 'Title: test\n' + 'Attachments: output/test1, '
|
||||||
+ 'output/test2\n\n')
|
+ 'output/test2\n\n')
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipUnless(BeautifulSoup, 'Needs BeautifulSoup module')
|
@unittest.skipUnless(BeautifulSoup, 'Needs BeautifulSoup module')
|
||||||
class TestWordpressXMLAttachements(unittest.TestCase):
|
class TestWordpressXMLAttachements(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals, absolute_import
|
from __future__ import unicode_literals, absolute_import
|
||||||
import six
|
|
||||||
import locale
|
import locale
|
||||||
|
|
||||||
from pelican.tests.support import unittest, get_settings
|
from pelican.tests.support import unittest, get_settings
|
||||||
|
|
|
||||||
|
|
@ -123,8 +123,6 @@ class TestPelican(LoggedTestCase):
|
||||||
locale_available('French'), 'French locale needed')
|
locale_available('French'), 'French locale needed')
|
||||||
def test_custom_locale_generation_works(self):
|
def test_custom_locale_generation_works(self):
|
||||||
'''Test that generation with fr_FR.UTF-8 locale works'''
|
'''Test that generation with fr_FR.UTF-8 locale works'''
|
||||||
old_locale = locale.setlocale(locale.LC_TIME)
|
|
||||||
|
|
||||||
if sys.platform == 'win32':
|
if sys.platform == 'win32':
|
||||||
our_locale = str('French')
|
our_locale = str('French')
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ class TestSettingsConfiguration(unittest.TestCase):
|
||||||
self.assertNotIn('foobar', self.settings)
|
self.assertNotIn('foobar', self.settings)
|
||||||
|
|
||||||
def test_read_empty_settings(self):
|
def test_read_empty_settings(self):
|
||||||
# Providing no file should return the default values.
|
# Ensure an empty settings file results in default settings.
|
||||||
settings = read_settings(None)
|
settings = read_settings(None)
|
||||||
expected = copy.deepcopy(DEFAULT_CONFIG)
|
expected = copy.deepcopy(DEFAULT_CONFIG)
|
||||||
# Added by configure settings
|
# Added by configure settings
|
||||||
|
|
@ -67,8 +67,8 @@ class TestSettingsConfiguration(unittest.TestCase):
|
||||||
settings['SITENAME'] = 'Not a Pelican Blog'
|
settings['SITENAME'] = 'Not a Pelican Blog'
|
||||||
self.assertNotEqual(settings['SITENAME'], DEFAULT_CONFIG['SITENAME'])
|
self.assertNotEqual(settings['SITENAME'], DEFAULT_CONFIG['SITENAME'])
|
||||||
|
|
||||||
def test_path_settings_safety(self):
|
def test_static_path_settings_safety(self):
|
||||||
"""Don't let people setting the static path listings to strs"""
|
# Disallow static paths from being strings
|
||||||
settings = {'STATIC_PATHS': 'foo/bar',
|
settings = {'STATIC_PATHS': 'foo/bar',
|
||||||
'THEME_STATIC_PATHS': 'bar/baz',
|
'THEME_STATIC_PATHS': 'bar/baz',
|
||||||
# These 4 settings are required to run configure_settings
|
# These 4 settings are required to run configure_settings
|
||||||
|
|
@ -84,8 +84,7 @@ class TestSettingsConfiguration(unittest.TestCase):
|
||||||
DEFAULT_CONFIG['THEME_STATIC_PATHS'])
|
DEFAULT_CONFIG['THEME_STATIC_PATHS'])
|
||||||
|
|
||||||
def test_configure_settings(self):
|
def test_configure_settings(self):
|
||||||
#Manipulations to settings should be applied correctly.
|
# Manipulations to settings should be applied correctly.
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
'SITEURL': 'http://blog.notmyidea.org/',
|
'SITEURL': 'http://blog.notmyidea.org/',
|
||||||
'LOCALE': '',
|
'LOCALE': '',
|
||||||
|
|
@ -93,6 +92,7 @@ class TestSettingsConfiguration(unittest.TestCase):
|
||||||
'THEME': DEFAULT_THEME,
|
'THEME': DEFAULT_THEME,
|
||||||
}
|
}
|
||||||
configure_settings(settings)
|
configure_settings(settings)
|
||||||
|
|
||||||
# SITEURL should not have a trailing slash
|
# SITEURL should not have a trailing slash
|
||||||
self.assertEqual(settings['SITEURL'], 'http://blog.notmyidea.org')
|
self.assertEqual(settings['SITEURL'], 'http://blog.notmyidea.org')
|
||||||
|
|
||||||
|
|
@ -103,12 +103,38 @@ class TestSettingsConfiguration(unittest.TestCase):
|
||||||
configure_settings(settings)
|
configure_settings(settings)
|
||||||
self.assertEqual(settings['FEED_DOMAIN'], 'http://feeds.example.com')
|
self.assertEqual(settings['FEED_DOMAIN'], 'http://feeds.example.com')
|
||||||
|
|
||||||
|
def test_theme_settings_exceptions(self):
|
||||||
|
settings = self.settings
|
||||||
|
|
||||||
|
# Check that theme lookup in "pelican/themes" functions as expected
|
||||||
|
settings['THEME'] = os.path.split(settings['THEME'])[1]
|
||||||
|
configure_settings(settings)
|
||||||
|
self.assertEqual(settings['THEME'], DEFAULT_THEME)
|
||||||
|
|
||||||
|
# Check that non-existent theme raises exception
|
||||||
|
settings['THEME'] = 'foo'
|
||||||
|
self.assertRaises(Exception, configure_settings, settings)
|
||||||
|
|
||||||
|
def test_deprecated_dir_setting(self):
|
||||||
|
settings = self.settings
|
||||||
|
|
||||||
|
settings['ARTICLE_DIR'] = 'foo'
|
||||||
|
settings['PAGE_DIR'] = 'bar'
|
||||||
|
|
||||||
|
configure_settings(settings)
|
||||||
|
|
||||||
|
self.assertEqual(settings['ARTICLE_PATHS'], ['foo'])
|
||||||
|
self.assertEqual(settings['PAGE_PATHS'], ['bar'])
|
||||||
|
|
||||||
|
with self.assertRaises(KeyError):
|
||||||
|
settings['ARTICLE_DIR']
|
||||||
|
settings['PAGE_DIR']
|
||||||
|
|
||||||
@unittest.skipIf(platform == 'win32', "Doesn't work on Windows")
|
@unittest.skipIf(platform == 'win32', "Doesn't work on Windows")
|
||||||
def test_default_encoding(self):
|
def test_default_encoding(self):
|
||||||
# test that the default locale is set if
|
# Test that the default locale is set if not specified in settings
|
||||||
# locale is not specified in the settings
|
|
||||||
|
|
||||||
#reset locale to python default
|
# Reset locale to Python's default locale
|
||||||
locale.setlocale(locale.LC_ALL, str('C'))
|
locale.setlocale(locale.LC_ALL, str('C'))
|
||||||
self.assertEqual(self.settings['LOCALE'], DEFAULT_CONFIG['LOCALE'])
|
self.assertEqual(self.settings['LOCALE'], DEFAULT_CONFIG['LOCALE'])
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import shutil
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
import locale
|
import locale
|
||||||
from sys import platform, version_info
|
from sys import platform
|
||||||
from tempfile import mkdtemp
|
from tempfile import mkdtemp
|
||||||
|
|
||||||
import pytz
|
import pytz
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue