diff --git a/tests/test_webassets.py b/tests/test_webassets.py index e47e7f81..52a7fa17 100644 --- a/tests/test_webassets.py +++ b/tests/test_webassets.py @@ -11,48 +11,47 @@ from pelican.settings import read_settings from .support import unittest, skipIfNoExecutable, module_exists CUR_DIR = os.path.dirname(__file__) +THEME_DIR = os.path.join(CUR_DIR, 'themes', 'assets') +CSS_REF = open(os.path.join(THEME_DIR, 'static', 'css', + 'style.min.css')).read() +CSS_HASH = hashlib.md5(CSS_REF).hexdigest()[0:8] @unittest.skipUnless(module_exists('webassets'), "webassets isn't installed") @skipIfNoExecutable(['scss', '-v']) @skipIfNoExecutable(['cssmin', '--version']) class TestWebAssets(unittest.TestCase): + """Base class for testing webassets.""" - def setUp(self): - """Run pelican with two settings (absolute and relative urls).""" - - self.theme_dir = os.path.join(CUR_DIR, 'themes', 'assets') - + def setUp(self, override=None): self.temp_path = mkdtemp() - self.settings = read_settings(override={ + settings = { 'PATH': os.path.join(CUR_DIR, 'content', 'TestCategory'), 'OUTPUT_PATH': self.temp_path, 'PLUGINS': ['pelican.plugins.assets', ], - 'THEME': self.theme_dir, - }) + 'THEME': THEME_DIR, + } + if override: + settings.update(override) + + self.settings = read_settings(override=settings) pelican = Pelican(settings=self.settings) pelican.run() - # run Pelican a second time with absolute urls - self.temp_path2 = mkdtemp() - self.settings2 = read_settings(override={ - 'PATH': os.path.join(CUR_DIR, 'content', 'TestCategory'), - 'OUTPUT_PATH': self.temp_path2, - 'PLUGINS': ['pelican.plugins.assets', ], - 'THEME': self.theme_dir, - 'RELATIVE_URLS': False, - 'SITEURL': 'http://localhost' - }) - pelican2 = Pelican(settings=self.settings2) - pelican2.run() - - self.css_ref = open(os.path.join(self.theme_dir, 'static', 'css', - 'style.min.css')).read() - self.version = hashlib.md5(self.css_ref).hexdigest()[0:8] - def tearDown(self): rmtree(self.temp_path) - rmtree(self.temp_path2) + + def check_link_tag(self, css_file, html_file): + """Check the presence of `css_file` in `html_file`.""" + + link_tag = ''.\ + format(css_file=css_file) + html = open(html_file).read() + self.assertRegexpMatches(html, link_tag) + + +class TestWebAssetsRelativeURLS(TestWebAssets): + """Test pelican with relative urls.""" def test_jinja2_ext(self): """Test that the Jinja2 extension was correctly added.""" @@ -64,39 +63,39 @@ class TestWebAssets(unittest.TestCase): """Compare the compiled css with the reference.""" gen_file = os.path.join(self.temp_path, 'theme', 'gen', - 'style.{0}.min.css'.format(self.version)) - + 'style.{0}.min.css'.format(CSS_HASH)) self.assertTrue(os.path.isfile(gen_file)) + css_new = open(gen_file).read() - self.assertEqual(css_new, self.css_ref) - - def check_link_tag(self, css_file, html_file): - """Check the presence of `css_file` in `html_file`.""" - - link_tag = ''.\ - format(css_file=css_file) - html = open(html_file).read() - self.assertRegexpMatches(html, link_tag) + self.assertEqual(css_new, CSS_REF) def test_template(self): - """Look in the output index.html file for the link tag.""" + """Look in the output files for the link tag.""" - css_file = './theme/gen/style.{0}.min.css'.format(self.version) + css_file = './theme/gen/style.{0}.min.css'.format(CSS_HASH) html_files = ['index.html', 'archives.html', 'this-is-an-article-with-category.html'] for f in html_files: self.check_link_tag(css_file, os.path.join(self.temp_path, f)) self.check_link_tag( - '.././theme/gen/style.{0}.min.css'.format(self.version), + '.././theme/gen/style.{0}.min.css'.format(CSS_HASH), os.path.join(self.temp_path, 'category/misc.html')) + +class TestWebAssetsAbsoluteURLS(TestWebAssets): + """Test pelican with absolute urls.""" + + def setUp(self): + TestWebAssets.setUp(self, override={'RELATIVE_URLS': False, + 'SITEURL': 'http://localhost'}) + def test_absolute_url(self): - """Look in the output index.html file for the link tag with abs url.""" + """Look in the output files for the link tag with absolute url.""" css_file = 'http://localhost/theme/gen/style.{0}.min.css'.\ - format(self.version) + format(CSS_HASH) html_files = ['index.html', 'archives.html', 'this-is-an-article-with-category.html'] for f in html_files: - self.check_link_tag(css_file, os.path.join(self.temp_path2, f)) + self.check_link_tag(css_file, os.path.join(self.temp_path, f))