Mercurial > wikked
changeset 51:2733871775cd
More unit tests.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Thu, 31 Jan 2013 12:28:10 -0800 |
parents | 350f7f084028 |
children | 8167b9b6925a |
files | tests/__init__.py tests/mock.py tests/test_db.py tests/test_page.py |
diffstat | 4 files changed, 109 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/tests/__init__.py Thu Jan 31 12:27:35 2013 -0800 +++ b/tests/__init__.py Thu Jan 31 12:28:10 2013 -0800 @@ -8,6 +8,7 @@ class WikkedTest(unittest.TestCase): def setUp(self): + # Directory you can use for temporary files. self.root = os.path.join( os.path.dirname(os.path.dirname(__file__)), 'test_data')
--- a/tests/mock.py Thu Jan 31 12:27:35 2013 -0800 +++ b/tests/mock.py Thu Jan 31 12:28:10 2013 -0800 @@ -19,6 +19,7 @@ self.config_text = "" self.special_filenames = [] + self.use_db = False self.logger_factory = lambda: logging.getLogger('wikked.tests') self.page_factory = lambda wiki, url: MockPage(wiki, url) @@ -44,6 +45,7 @@ def __init__(self, content=None, logger=None): Database.__init__(self, logger) self.content = content + self.conn = None self._open_count = 0 def initDb(self): @@ -51,12 +53,15 @@ def open(self): self._open_count += 1 + self.conn = 'MOCK_CONNECTION' def close(self): self._open_count -= 1 if self._open_count < 0: raise Exception( "The database was closed more times than it was open.") + elif self._open_count == 0: + self.conn = None def reset(self, pages): pass @@ -93,26 +98,36 @@ def getPageInfos(self, subdir=None): node = self._getNode(subdir) + if node is None: + raise PageNotFoundError() for n in self._getChildren(node): yield self._getPageInfo(n) def getPageInfo(self, path): node = self._getNode(path) + if node is None: + raise PageNotFoundError() return self._getPageInfo(node) def getPage(self, url): path = self._getPath(url, True) node = self._getNode(path) + if node is None: + raise PageNotFoundError() return self._getPageInfo(node, True) def setPage(self, path, content): - pass + raise NotImplementedError() def pageExists(self, url): - return False + try: + self._getPath(url, True) + return True + except PageNotFoundError: + return False def getPhysicalNamespacePath(self, url): - return None + raise NotImplementedError() def _getPageInfo(self, node, with_content=False): path_split = os.path.splitext(node['path']) @@ -129,6 +144,8 @@ node = self.structure if path: for n in path.split('/'): + if n not in node: + return None node = node[n] else: path = ''
--- a/tests/test_db.py Thu Jan 31 12:27:35 2013 -0800 +++ b/tests/test_db.py Thu Jan 31 12:28:10 2013 -0800 @@ -31,7 +31,12 @@ db_factory=self._dbFactory, fs_factory=self._fsFactory ) + + # Open the DB before we do anything so that it will be closed + # only on `tearDown` (memory DBs are discarded when the + # connection is closed. wiki.db.open() + wiki.start() return wiki
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_page.py Thu Jan 31 12:28:10 2013 -0800 @@ -0,0 +1,83 @@ +from tests import WikkedTest +from mock import MockFileSystem +from wikked.page import Page + + +class PageTest(WikkedTest): + def testSimplePage(self): + self.wiki = self._getWikiFromStructure({ + 'foo.txt': 'A test page.' + }) + page = Page(self.wiki, 'foo') + self.assertEqual('foo', page.url) + self.assertEqual('A test page.', page.raw_text) + self.assertEqual('A test page.', page.formatted_text) + self.assertEqual('foo', page.title) + self.assertEqual('A test page.', page.text) + self.assertEqual({}, page.local_meta) + self.assertEqual([], page.local_links) + self.assertEqual([], page.local_includes) + + def testPageMeta(self): + self.wiki = self._getWikiFromStructure({ + 'foo.txt': "A page with simple meta.\n{{bar: baz}}\n{{is_test: }}" + }) + page = Page(self.wiki, 'foo') + self.assertEqual('foo', page.url) + self.assertEqual("A page with simple meta.\n{{bar: baz}}\n{{is_test: }}", page.raw_text) + self.assertEqual('A page with simple meta.\n\n', page.formatted_text) + self.assertEqual('foo', page.title) + self.assertEqual('A page with simple meta.\n\n', page.text) + self.assertEqual({'bar': 'baz', 'is_test': True}, page.local_meta) + self.assertEqual([], page.local_links) + self.assertEqual([], page.local_includes) + + def testPageTitleMeta(self): + self.wiki = self._getWikiFromStructure({ + 'test_title.txt': "A page with a custom title.\n{{title: TEST-TITLE}}" + }) + page = Page(self.wiki, 'test_title') + self.assertEqual('test_title', page.url) + self.assertEqual("A page with a custom title.\n{{title: TEST-TITLE}}", page.raw_text) + self.assertEqual('A page with a custom title.\n', page.formatted_text) + self.assertEqual('TEST-TITLE', page.title) + self.assertEqual('A page with a custom title.\n', page.text) + self.assertEqual({'title': 'TEST-TITLE'}, page.local_meta) + self.assertEqual([], page.local_links) + self.assertEqual([], page.local_includes) + + def testPageOutLinks(self): + self.wiki = self._getWikiFromStructure({ + 'test_links.txt': "Follow a link to the [[Sandbox]]. Or to [[this page|Other Sandbox]].", + 'sandbox.txt': "This is just a placeholder." + }) + self.assertTrue(self.wiki.pageExists('sandbox', from_db=False)) + page = Page(self.wiki, 'test_links') + self.assertEqual('test_links', page.url) + self.assertEqual("Follow a link to the [[Sandbox]]. Or to [[this page|Other Sandbox]].", page.raw_text) + self.assertEqual("Follow a link to the <a class=\"wiki-link\" data-wiki-url=\"sandbox\">Sandbox</a>. Or to <a class=\"wiki-link missing\" data-wiki-url=\"other-sandbox\">this page</a>.", page.formatted_text) + self.assertEqual(set(['sandbox', 'other-sandbox']), set(page.local_links)) + + def _getWikiFromStructure(self, structure): + wiki = self.getWiki(use_db=False, fs_factory=lambda cfg: MockFileSystem(structure)) + wiki.start() + return wiki + + def testPageRelativeOutLinks(self): + self.wiki = self._getWikiFromStructure({ + 'first.txt': "Go to [[First Sibling]].", + 'first-sibling.txt': "Go back to [[First]], or to [[sub_dir/Second]].", + 'sub_dir': { + 'second.txt': "Go back to [[../First]], or to [[Second Sibling]].", + 'second-sibling.txt': "Go back to [[Second]]." + } + }) + first = Page(self.wiki, 'first') + self.assertEqual(['first-sibling'], first.local_links) + first2 = Page(self.wiki, 'first-sibling') + self.assertEqual(['first', 'sub_dir/second'], first2.local_links) + second = Page(self.wiki, 'sub_dir/second') + self.assertEqual(['first', 'sub_dir/second-sibling'], second.local_links) + second2 = Page(self.wiki, 'sub_dir/second-sibling') + self.assertEqual(['sub_dir/second'], second2.local_links) +