def new_page_from_text(text, format='wiki'): from zim.notebook import Path, Page from zim.newfs.mock import MockFile, MockFolder file = MockFile('/mock/test/page.txt') folder = MockFile('/mock/test/page/') page = Page(Path('Test'), False, file, folder) page.set_parsetree(new_parsetree_from_text(text, format)) return page
def new_page(): from zim.notebook import Path, Page from zim.newfs.mock import MockFile, MockFolder file = MockFile('/mock/test/page.txt') folder = MockFile('/mock/test/page/') page = Page(Path('roundtrip'), False, file, folder) page.set_parsetree(new_parsetree()) return page
def testPageSource(self): from zim.newfs.mock import MockFile, MockFolder file = MockFile('/mock/test/page.txt') folder = MockFile('/mock/test/page/') page = Page(Path('Foo'), False, file, folder) self.assertFalse(page.readonly) self.assertFalse(page.hascontent) self.assertIsNone(page.ctime) self.assertIsNone(page.mtime) self.assertIsNone(page.get_parsetree()) page1 = Page(Path('Foo'), False, file, folder) self.assertTrue(page.isequal(page1)) tree = ParseTree().fromstring('''\ <zim-tree> <link href='foo:bar'>foo:bar</link> <link href='bar'>bar</link> <tag name='baz'>@baz</tag> </zim-tree> ''') page.set_parsetree(tree) page._store() self.assertTrue(file.exists()) self.assertTrue(page.hascontent) self.assertIsInstance(page.ctime, float) self.assertIsInstance(page.mtime, float) lines = file.readlines() self.assertEqual(lines[0], 'Content-Type: text/x-zim-wiki\n') self.assertEqual(lines[1][:11], 'Wiki-Format') self.assertEqual(lines[2][:13], 'Creation-Date') self.assertEqual(page.get_parsetree(), tree) self.assertTrue(page.isequal(page1)) self.assertTrue(page1.hascontent) self.assertIsInstance(page1.ctime, float) self.assertIsInstance(page1.mtime, float) self.assertIsNotNone(page1.get_parsetree()) file.write('foo 123') page.set_parsetree(tree) self.assertRaises(zim.newfs.FileChangedError, page._store) ### Custom header should be preserved file.writelines(lines[0:3] + ['X-Custom-Header: MyTest'] + lines[3:]) page = Page(Path('Foo'), False, file, folder) tree = page.get_parsetree() page.set_parsetree(tree) page._store() lines = file.readlines() self.assertEqual(lines[0], 'Content-Type: text/x-zim-wiki\n') self.assertEqual(lines[3], 'X-Custom-Header: MyTest\n')
def testShouldAutochangeHeading(self): from zim.newfs.mock import MockFile, MockFolder file = MockFile('/mock/test/page.txt') folder = MockFile('/mock/test/page/') page = Page(Path('Foo'), False, file, folder) tree = ParseTree().fromstring('<zim-tree></zim-tree>') tree.set_heading("Foo") page.set_parsetree(tree) self.assertTrue(page.heading_matches_pagename()) tree.set_heading("Bar") page.set_parsetree(tree) self.assertFalse(page.heading_matches_pagename())
def testExistingFile(self): from zim.newfs.mock import MockFile file = ConfigFile(MockFile('/<mock>/foo.conf')) self.assertEqual(file.basename, 'foo.conf') other = ConfigFile(file.file) self.assertTrue(other == file) self.assertEqual(file.read(), '') self.assertEqual(file.readlines(), []) self.assertRaises(FileNotFoundError, file.read, fail=True) self.assertRaises(FileNotFoundError, file.readlines, fail=True) file.touch() self.assertEqual(file.read(), '') self.assertEqual(file.readlines(), []) self.assertEqual(file.read(fail=True), '') self.assertEqual(file.readlines(fail=True), []) file.write('foo!\n') self.assertEqual(file.read(), 'foo!\n') self.assertEqual(file.readlines(), ['foo!\n']) file.remove() self.assertEqual(file.read(), '') self.assertEqual(file.readlines(), []) self.assertRaises(FileNotFoundError, file.read, fail=True) self.assertRaises(FileNotFoundError, file.readlines, fail=True)
def createIndexPage(notebook, path, section=None): # TODO make more flexible - use pages iter itself instead of section of notebook if section is None: section = Path(':') title = notebook.name else: title = section.name builder = ParseTreeBuilder() def add_namespace(path): pagelist = notebook.pages.list_pages(path) builder.start(BULLETLIST) for page in pagelist: builder.start(LISTITEM) builder.append(LINK, { 'type': 'page', 'href': page.name }, page.basename) builder.end(LISTITEM) if page.haschildren: add_namespace(page) # recurs builder.end(BULLETLIST) builder.start(FORMATTEDTEXT) builder.append(HEADING, {'level': 1}, 'Index of %s\n' % title) add_namespace(section) builder.end(FORMATTEDTEXT) tree = builder.get_parsetree() #~ print "!!!", tree.tostring() indexpage = Page(path, False, MockFile('/index'), None) indexpage.set_parsetree(tree) return indexpage
def testRenamePageDialogWithHeadingChanges(self): '''Test RenamePageDialog's heading auto-change option depending on whether we have a changed heading or not. ''' from zim.newfs.mock import MockFile, MockFolder file = MockFile('/mock/test/page.txt') folder = MockFile('/mock/test/page/') page = Page(Path("Test:foo:bar"), False, file, folder) tree = ParseTree().fromstring('<zim-tree></zim-tree>') tree.set_heading("bar") page.set_parsetree(tree) self.ui.page = page self.ui.notebook.get_page = lambda path: self.ui.page dialog = zim.gui.RenamePageDialog(self.ui, path=Path("Test:foo:bar")) self.assertTrue(dialog.form['head']) tree.set_heading("different") dialog = zim.gui.RenamePageDialog(self.ui, path=Path("Test:foo:bar")) self.assertFalse(dialog.form['head'])
def testPageSource(self): from zim.newfs.mock import MockFile, MockFolder file = MockFile('/mock/test/page.txt') folder = MockFile('/mock/test/page/') page = Page(Path('Foo'), False, file, folder) self.assertFalse(page.readonly) self.assertFalse(page.hascontent) self.assertIsNone(page.ctime) self.assertIsNone(page.mtime) self.assertIsNone(page.get_parsetree()) page1 = Page(Path('Foo'), False, file, folder) self.assertTrue(page.isequal(page1)) tree = ParseTree().fromstring('''\ <zim-tree> <link href='foo:bar'>foo:bar</link> <link href='bar'>bar</link> <tag name='baz'>@baz</tag> </zim-tree> ''') page.set_parsetree(tree) page._store() self.assertTrue(file.exists()) self.assertTrue(page.hascontent) self.assertIsInstance(page.ctime, float) self.assertIsInstance(page.mtime, float) self.assertEqual(page.get_parsetree(), tree) self.assertTrue(page.isequal(page1)) self.assertTrue(page1.hascontent) self.assertIsInstance(page1.ctime, float) self.assertIsInstance(page1.mtime, float) self.assertIsNotNone(page1.get_parsetree()) file.write('foo 123') page.set_parsetree(tree) self.assertRaises(zim.newfs.FileChangedError, page._store)
def generator(self, name): from zim.newfs.mock import MockFile, MockFolder file = MockFile('/mock/test/page.txt') folder = MockFile('/mock/test/page/') return Page(Path(name), False, file, folder)
def mock_file(lines): file = MockFile('/<mock>/test') file.writelines(lines) return file