def test_generate_output(self): settings = _DEFAULT_CONFIG.copy() settings['STATIC_PATHS'] = ['static'] settings['TEMPLATE_PAGES'] = { 'template/source.html': 'generated/file.html' } generator = TemplatePagesGenerator({'foo': 'bar'}, settings, self.temp_content, '', self.temp_output, None) # create a dummy template file template_dir = os.path.join(self.temp_content, 'template') template_filename = os.path.join(template_dir, 'source.html') os.makedirs(template_dir) with open(template_filename, 'w') as template_file: template_file.write(self.TEMPLATE_CONTENT) writer = Writer(self.temp_output, settings=settings) generator.generate_output(writer) output_filename = os.path.join( self.temp_output, 'generated', 'file.html') # output file has been generated self.assertTrue(os.path.exists(output_filename)) # output content is correct with open(output_filename, 'r') as output_file: self.assertEquals(output_file.read(), 'foo: bar')
def test_generate_context(self): settings = _DEFAULT_CONFIG.copy() settings['ARTICLE_DIR'] = 'content' settings['DEFAULT_CATEGORY'] = 'Default' generator = ArticlesGenerator(settings.copy(), settings, CUR_DIR, _DEFAULT_CONFIG['THEME'], None, _DEFAULT_CONFIG['MARKUP']) generator.generate_context() for article in generator.articles: relfilepath = os.path.relpath(article.filename, CUR_DIR) if relfilepath == os.path.join("TestCategory", "article_with_category.rst"): self.assertEquals(article.category.name, 'yeah') elif relfilepath == os.path.join("TestCategory", "article_without_category.rst"): self.assertEquals(article.category.name, 'TestCategory') elif relfilepath == "article_without_category.rst": self.assertEquals(article.category.name, 'Default') categories = [cat.name for cat, _ in generator.categories] # assert that the categories are ordered as expected self.assertEquals( categories, ['Default', 'TestCategory', 'Yeah', 'test', 'yeah'])
def test_do_not_use_folder_as_category(self): settings = _DEFAULT_CONFIG.copy() settings['ARTICLE_DIR'] = 'content' settings['DEFAULT_CATEGORY'] = 'Default' settings['DEFAULT_DATE'] = (1970, 1, 1) settings['USE_FOLDER_AS_CATEGORY'] = False settings['filenames'] = {} generator = ArticlesGenerator(settings.copy(), settings, CUR_DIR, _DEFAULT_CONFIG['THEME'], None, _DEFAULT_CONFIG['MARKUP']) generator.generate_context() # test for name # categories are grouped by slug; if two categories have the same slug # but different names they will be grouped together, the first one in # terms of process order will define the name for that category categories = [cat.name for cat, _ in generator.categories] categories_alternatives = ( sorted(['Default', 'Yeah', 'test', '指導書']), sorted(['Default', 'yeah', 'test', '指導書']), ) self.assertTrue(sorted(categories) in categories_alternatives) # test for slug categories = [cat.slug for cat, _ in generator.categories] categories_expected = ['default', 'yeah', 'test', 'zhi-dao-shu'] self.assertEqual(sorted(categories), sorted(categories_expected))
def test_less_compiler(self): settings = _DEFAULT_CONFIG.copy() settings['STATIC_PATHS'] = ['static'] settings['LESS_GENERATOR'] = True generator = LessCSSGenerator(None, settings, self.temp_content, _DEFAULT_CONFIG['THEME'], self.temp_output, None) # create a dummy less file less_dir = os.path.join(self.temp_content, 'static', 'css') less_filename = os.path.join(less_dir, 'test.less') less_output = os.path.join(self.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))
def test_generate_output(self): settings = _DEFAULT_CONFIG.copy() settings["STATIC_PATHS"] = ["static"] settings["TEMPLATE_PAGES"] = {"template/source.html": "generated/file.html"} generator = TemplatePagesGenerator({"foo": "bar"}, settings, self.temp_content, "", self.temp_output, None) # create a dummy template file template_dir = os.path.join(self.temp_content, "template") template_filename = os.path.join(template_dir, "source.html") os.makedirs(template_dir) with open(template_filename, "w") as template_file: template_file.write(self.TEMPLATE_CONTENT) writer = Writer(self.temp_output, settings=settings) generator.generate_output(writer) output_filename = os.path.join(self.temp_output, "generated", "file.html") # output file has been generated self.assertTrue(os.path.exists(output_filename)) # output content is correct with open(output_filename, "r") as output_file: self.assertEquals(output_file.read(), "foo: bar")
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))
def test_generate_context(self): settings = _DEFAULT_CONFIG.copy() settings['PAGE_DIR'] = 'TestPages' settings['DEFAULT_DATE'] = (1970, 01, 01) generator = PagesGenerator(settings.copy(), settings, CUR_DIR, _DEFAULT_CONFIG['THEME'], None, _DEFAULT_CONFIG['MARKUP']) generator.generate_context() pages = self.distill_pages(generator.pages) hidden_pages = self.distill_pages(generator.hidden_pages) pages_expected = [ [u'This is a test page', 'published', 'page'], [u'This is a markdown test page', 'published', 'page'], [u'This is a test page with a preset template', 'published', 'custom'] ] hidden_pages_expected = [ [u'This is a test hidden page', 'hidden', 'page'], [u'This is a markdown test hidden page', 'hidden', 'page'], [u'This is a test hidden page with a custom template', 'hidden', 'custom'] ] self.assertItemsEqual(pages_expected,pages) self.assertItemsEqual(hidden_pages_expected,hidden_pages)
def get_generator(self, *posts): settings = _DEFAULT_CONFIG.copy() settings['ARTICLE_DIR'] = 'content' settings['DEFAULT_CATEGORY'] = 'Default' generator = ArticlesGenerator(settings.copy(), settings, TESTS_DIR, _DEFAULT_CONFIG['THEME'], None, _DEFAULT_CONFIG['MARKUP']) return generator
def test_metadata_url_format(self): # Arbitrary metadata should be passed through url_format() 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}' self.assertEqual(page.save_as, 'test-dir/foo-bar')
def test_metadata_url_format(self): """Arbitrary metadata should be passed through url_format() """ 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}" self.assertEqual(page.save_as, "test-dir/foo-bar")
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
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
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_do_not_use_folder_as_category(self): settings = _DEFAULT_CONFIG.copy() settings["ARTICLE_DIR"] = "content" settings["DEFAULT_CATEGORY"] = "Default" settings["USE_FOLDER_AS_CATEGORY"] = False generator = ArticlesGenerator( settings.copy(), settings, CUR_DIR, _DEFAULT_CONFIG["THEME"], None, _DEFAULT_CONFIG["MARKUP"] ) generator.generate_context() categories = [cat.name for cat, _ in generator.categories] self.assertEquals(categories, ["Default", "Yeah", "test", "yeah"])
def test_do_not_use_folder_as_category(self): settings = _DEFAULT_CONFIG.copy() settings['ARTICLE_DIR'] = 'content' settings['DEFAULT_CATEGORY'] = 'Default' settings['USE_FOLDER_AS_CATEGORY'] = False generator = ArticlesGenerator(settings.copy(), settings, CUR_DIR, _DEFAULT_CONFIG['THEME'], None, _DEFAULT_CONFIG['MARKUP']) generator.generate_context() categories = [cat.name for cat, _ in generator.categories] self.assertEquals(categories, ['Default', 'Yeah', 'test', 'yeah'])
def test_summary_max_length(self): # 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() page_kwargs['settings'] = settings del page_kwargs['metadata']['summary'] settings['SUMMARY_MAX_LENGTH'] = None page = Page(**page_kwargs) self.assertEqual(page.summary, TEST_CONTENT) settings['SUMMARY_MAX_LENGTH'] = 10 page = Page(**page_kwargs) self.assertEqual(page.summary, truncate_html_words(TEST_CONTENT, 10))
def test_summary_max_length(self): """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() page_kwargs['settings'] = settings del page_kwargs['metadata']['summary'] settings['SUMMARY_MAX_LENGTH'] = None page = Page(**page_kwargs) self.assertEqual(page.summary, TEST_CONTENT) settings['SUMMARY_MAX_LENGTH'] = 10 page = Page(**page_kwargs) self.assertEqual(page.summary, truncate_html_words(TEST_CONTENT, 10))
def get_populated_generator(self): """ We only need to pull all the test articles once, but read from it for each test. """ if self.generator is None: settings = _DEFAULT_CONFIG.copy() settings['ARTICLE_DIR'] = 'content' settings['DEFAULT_CATEGORY'] = 'Default' self.generator = ArticlesGenerator(settings.copy(), settings, CUR_DIR, _DEFAULT_CONFIG['THEME'], None, _DEFAULT_CONFIG['MARKUP']) self.generator.generate_context() return self.generator
def get_populated_generator(self): """ We only need to pull all the test articles once, but read from it for each test. """ if self.generator is None: settings = _DEFAULT_CONFIG.copy() settings["ARTICLE_DIR"] = "content" settings["DEFAULT_CATEGORY"] = "Default" self.generator = ArticlesGenerator( settings.copy(), settings, CUR_DIR, _DEFAULT_CONFIG["THEME"], None, _DEFAULT_CONFIG["MARKUP"] ) self.generator.generate_context() return self.generator
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_generate_context(self): settings = _DEFAULT_CONFIG.copy() settings["PAGE_DIR"] = "TestPages" generator = PagesGenerator( settings.copy(), settings, CUR_DIR, _DEFAULT_CONFIG["THEME"], None, _DEFAULT_CONFIG["MARKUP"] ) generator.generate_context() pages = self.distill_pages(generator.pages) hidden_pages = self.distill_pages(generator.hidden_pages) pages_expected = [ [u"This is a test page", "published", "page"], [u"This is a markdown test page", "published", "page"], [u"This is a test page with a preset template", "published", "custom"], ] hidden_pages_expected = [ [u"This is a test hidden page", "hidden", "page"], [u"This is a markdown test hidden page", "hidden", "page"], [u"This is a test hidden page with a custom template", "hidden", "custom"], ] self.assertItemsEqual(pages_expected, pages) self.assertItemsEqual(hidden_pages_expected, hidden_pages)
def get_settings(): settings = _DEFAULT_CONFIG.copy() settings['DIRECT_TEMPLATES'] = ['archives'] settings['filenames'] = {} return settings