def test_other_html_renderer(self): def hello_renderer(body, pages): return pages.get('hello').body.upper() for renderer in (str.upper, 'string.upper', hello_renderer): pages = FlatPages(Flask(__name__)) pages.app.config['FLATPAGES_HTML_RENDERER'] = renderer hello = pages.get('hello') self.assertEquals(hello.body, 'Hello, *世界*!\n') # Upper-case, markdown not interpreted self.assertEquals(hello.html, 'HELLO, *世界*!\n')
def test_yaml_meta(self): pages = FlatPages(Flask(__name__)) foo = pages.get('foo') self.assertEquals( foo.meta, { 'title': 'Foo > bar', 'created': datetime.date(2010, 12, 11), 'versions': [3.14, 42] }) self.assertEquals(foo['title'], 'Foo > bar') self.assertEquals(foo['created'], datetime.date(2010, 12, 11)) self.assertEquals(foo['versions'], [3.14, 42]) self.assertRaises(KeyError, lambda: foo['nonexistent'])
def temp_pages(app=None): """This context manager gives a FlatPages object configured in a temporary directory with a copy of the test pages. Using a temporary copy allows us to safely write and remove stuff without worrying about undoing our changes. """ with temp_directory() as temp: source = os.path.join(os.path.dirname(__file__), 'pages') # Remove the destination dir as copytree wants it not to exist. # Doing so kind of defeats the purpose of tempfile as it introduces # a race condition, but should be good enough for our purpose. os.rmdir(temp) shutil.copytree(source, temp) app = app or Flask(__name__) app.config['FLATPAGES_ROOT'] = temp yield FlatPages(app)
def test_get(self): pages = FlatPages(Flask(__name__)) self.assertEquals(pages.get('foo/bar').path, 'foo/bar') self.assertEquals(pages.get('nonexistent'), None) self.assertEquals(pages.get('nonexistent', 42), 42)
def test_iter(self): pages = FlatPages(Flask(__name__)) self.assertEquals( set(page.path for page in pages), set(['foo', 'foo/bar', 'foo/lorem/ipsum', 'headerid', 'hello']))
def test_other_extension(self): app = Flask(__name__) app.config['FLATPAGES_EXTENSION'] = '.txt' pages = FlatPages(app) self.assertEquals(set(page.path for page in pages), set(['not_a_page', 'foo/42/not_a_page']))
def test_markdown_extensions(self): pages = FlatPages(Flask(__name__)) hello = pages.get('headerid') self.assertEquals( hello.html, '<h1>Page Header</h1>\n<h2>Paragraph Header</h2>\n<p>Text</p>') pages.app.config['FLATPAGES_MARKDOWN_EXTENSIONS'] = [] pages.reload() pages._file_cache = {} hello = pages.get('headerid') self.assertEquals( hello.html, '<h1>Page Header</h1>\n<h2>Paragraph Header</h2>\n<p>Text</p>') pages.app.config['FLATPAGES_MARKDOWN_EXTENSIONS'] = [ 'codehilite', 'headerid' ] pages.reload() pages._file_cache = {} hello = pages.get('headerid') self.assertEquals( hello.html, '<h1 id="page-header">Page Header</h1>\n' '<h2 id="paragraph-header">Paragraph Header</h2>\n' '<p>Text</p>')
def test_other_encoding(self): app = Flask(__name__) app.config['FLATPAGES_ENCODING'] = 'shift_jis' app.config['FLATPAGES_ROOT'] = 'pages_shift_jis' pages = FlatPages(app) self._unicode(pages)
def test_unicode(self): pages = FlatPages(Flask(__name__)) self._unicode(pages)
def test_markdown(self): pages = FlatPages(Flask(__name__)) foo = pages.get('foo') self.assertEquals(foo.body, 'Foo *bar*\n') self.assertEquals(foo.html, '<p>Foo <em>bar</em></p>')
def test_consistency(self): pages = FlatPages(Flask(__name__)) for page in pages: assert pages.get(page.path) is page
def test_get_or_404(self): pages = FlatPages(Flask(__name__)) self.assertEquals(pages.get_or_404('foo/bar').path, 'foo/bar') self.assertRaises(NotFound, pages.get_or_404, 'nonexistent')