mirror of
https://github.com/getpelican/pelican.git
synced 2025-10-15 20:28:56 +02:00
Merge branch 'master' into fix-functional-tests
Conflicts: tests/test_generators.py
This commit is contained in:
commit
ebfdabf2d7
25 changed files with 528 additions and 234 deletions
10
tests/content/article_with_md_extension.md
Normal file
10
tests/content/article_with_md_extension.md
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
title: Test md File
|
||||
category: test
|
||||
|
||||
Test Markdown File Header
|
||||
=========================
|
||||
|
||||
Used for pelican test
|
||||
---------------------
|
||||
|
||||
The quick brown fox jumped over the lazy dog's back.
|
||||
10
tests/content/article_with_mkd_extension.mkd
Normal file
10
tests/content/article_with_mkd_extension.mkd
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
title: Test mkd File
|
||||
category: test
|
||||
|
||||
Test Markdown File Header
|
||||
=========================
|
||||
|
||||
Used for pelican test
|
||||
---------------------
|
||||
|
||||
This is another markdown test file. Uses the mkd extension.
|
||||
|
|
@ -4,6 +4,8 @@ __all__ = [
|
|||
'unittest',
|
||||
]
|
||||
|
||||
import os
|
||||
import subprocess
|
||||
from contextlib import contextmanager
|
||||
from tempfile import mkdtemp
|
||||
from shutil import rmtree
|
||||
|
|
@ -35,3 +37,21 @@ def get_article(title, slug, content, lang, extra_metadata=None):
|
|||
if extra_metadata is not None:
|
||||
metadata.update(extra_metadata)
|
||||
return Article(content, metadata=metadata)
|
||||
|
||||
|
||||
def skipIfNoExecutable(executable, valid_exit_code=1):
|
||||
"""Tries to run an executable to make sure it's in the path, Skips the tests
|
||||
if not found.
|
||||
"""
|
||||
|
||||
# calling with no params the command should exit with 1
|
||||
with open(os.devnull, 'w') as fnull:
|
||||
try:
|
||||
res = subprocess.call(executable, stdout=fnull, stderr=fnull)
|
||||
except OSError:
|
||||
res = None
|
||||
|
||||
if res != valid_exit_code:
|
||||
return unittest.skip('{0} compiler not found'.format(executable))
|
||||
|
||||
return lambda func: func
|
||||
|
|
|
|||
|
|
@ -2,13 +2,15 @@
|
|||
|
||||
from mock import MagicMock
|
||||
import os
|
||||
import re
|
||||
|
||||
from pelican.generators import ArticlesGenerator
|
||||
from pelican.generators import ArticlesGenerator, LessCSSGenerator
|
||||
from pelican.settings import _DEFAULT_CONFIG
|
||||
from .support import unittest
|
||||
from .support import unittest, temporary_folder, skipIfNoExecutable
|
||||
|
||||
CUR_DIR = os.path.dirname(__file__)
|
||||
|
||||
|
||||
class TestArticlesGenerator(unittest.TestCase):
|
||||
|
||||
def test_generate_feeds(self):
|
||||
|
|
@ -49,4 +51,91 @@ class TestArticlesGenerator(unittest.TestCase):
|
|||
categories = [cat.name for cat, _ in generator.categories]
|
||||
# assert that the categories are ordered as expected
|
||||
self.assertEquals(
|
||||
categories, ['Default', 'TestCategory', 'Yeah', 'yeah'])
|
||||
categories, ['Default', 'TestCategory', 'Yeah', 'test',
|
||||
'yeah'])
|
||||
|
||||
def test_direct_templates_save_as_default(self):
|
||||
|
||||
settings = _DEFAULT_CONFIG.copy()
|
||||
settings['DIRECT_TEMPLATES'] = ['archives']
|
||||
generator = ArticlesGenerator(settings.copy(), settings, None,
|
||||
_DEFAULT_CONFIG['THEME'], None,
|
||||
_DEFAULT_CONFIG['MARKUP'])
|
||||
write = MagicMock()
|
||||
generator.generate_direct_templates(write)
|
||||
write.assert_called_with("archives.html",
|
||||
generator.get_template("archives"), settings,
|
||||
blog=True, paginated={}, page_name='archives')
|
||||
|
||||
def test_direct_templates_save_as_modified(self):
|
||||
|
||||
settings = _DEFAULT_CONFIG.copy()
|
||||
settings['DIRECT_TEMPLATES'] = ['archives']
|
||||
settings['ARCHIVES_SAVE_AS'] = 'archives/index.html'
|
||||
generator = ArticlesGenerator(settings, settings, None,
|
||||
_DEFAULT_CONFIG['THEME'], None,
|
||||
_DEFAULT_CONFIG['MARKUP'])
|
||||
write = MagicMock()
|
||||
generator.generate_direct_templates(write)
|
||||
write.assert_called_with("archives/index.html",
|
||||
generator.get_template("archives"), settings,
|
||||
blog=True, paginated={}, page_name='archives')
|
||||
|
||||
def test_direct_templates_save_as_false(self):
|
||||
|
||||
settings = _DEFAULT_CONFIG.copy()
|
||||
settings['DIRECT_TEMPLATES'] = ['archives']
|
||||
settings['ARCHIVES_SAVE_AS'] = 'archives/index.html'
|
||||
generator = ArticlesGenerator(settings, settings, None,
|
||||
_DEFAULT_CONFIG['THEME'], None,
|
||||
_DEFAULT_CONFIG['MARKUP'])
|
||||
write = MagicMock()
|
||||
generator.generate_direct_templates(write)
|
||||
write.assert_called_count == 0
|
||||
|
||||
|
||||
class TestLessCSSGenerator(unittest.TestCase):
|
||||
|
||||
LESS_CONTENT = """
|
||||
@color: #4D926F;
|
||||
|
||||
#header {
|
||||
color: @color;
|
||||
}
|
||||
h2 {
|
||||
color: @color;
|
||||
}
|
||||
"""
|
||||
|
||||
@skipIfNoExecutable('lessc')
|
||||
def test_less_compiler(self):
|
||||
|
||||
settings = _DEFAULT_CONFIG.copy()
|
||||
settings['STATIC_PATHS'] = ['static']
|
||||
settings['LESS_GENERATOR'] = True
|
||||
|
||||
# we'll nest here for py < 2.7 compat
|
||||
with temporary_folder() as temp_content:
|
||||
with temporary_folder() as temp_output:
|
||||
generator = LessCSSGenerator(None, settings, temp_content,
|
||||
_DEFAULT_CONFIG['THEME'], temp_output, None)
|
||||
|
||||
# create a dummy less file
|
||||
less_dir = os.path.join(temp_content, 'static', 'css')
|
||||
less_filename = os.path.join(less_dir, 'test.less')
|
||||
|
||||
less_output = os.path.join(temp_output, 'static', 'css',
|
||||
'test.css')
|
||||
|
||||
os.makedirs(less_dir)
|
||||
with open(less_filename, 'w') as less_file:
|
||||
less_file.write(self.LESS_CONTENT)
|
||||
|
||||
generator.generate_output()
|
||||
|
||||
# we have the file ?
|
||||
self.assertTrue(os.path.exists(less_output))
|
||||
|
||||
# was it compiled ?
|
||||
self.assertIsNotNone(re.search(r'^\s+color:\s*#4D926F;$',
|
||||
open(less_output).read(), re.MULTILINE | re.IGNORECASE))
|
||||
|
|
|
|||
|
|
@ -61,3 +61,25 @@ class RstReaderTest(unittest.TestCase):
|
|||
self.assertEqual(content, expected)
|
||||
except ImportError:
|
||||
return unittest.skip('need the typogrify distribution')
|
||||
|
||||
class MdReaderTest(unittest.TestCase):
|
||||
|
||||
def test_article_with_md_extention(self):
|
||||
# test to ensure the md extension is being processed by the correct reader
|
||||
reader = readers.MarkdownReader({})
|
||||
content, metadata = reader.read(_filename('article_with_md_extension.md'))
|
||||
expected = "<h1>Test Markdown File Header</h1>\n"\
|
||||
"<h2>Used for pelican test</h2>\n"\
|
||||
"<p>The quick brown fox jumped over the lazy dog's back.</p>"
|
||||
|
||||
self.assertEqual(content, expected)
|
||||
|
||||
def test_article_with_mkd_extension(self):
|
||||
# test to ensure the mkd extension is being processed by the correct reader
|
||||
reader = readers.MarkdownReader({})
|
||||
content, metadata = reader.read(_filename('article_with_mkd_extension.mkd'))
|
||||
expected = "<h1>Test Markdown File Header</h1>\n"\
|
||||
"<h2>Used for pelican test</h2>\n"\
|
||||
"<p>This is another markdown test file. Uses the mkd extension.</p>"
|
||||
|
||||
self.assertEqual(content, expected)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue