def testEditPageSource(self): from zim.gui.widgets import MessageDialog from zim.newfs import LocalFile from zim.gui.applications import ApplicationManager oldtext = self.page.dump('plain') # trick page into caching content signals = tests.SignalLogger(self.page) def edit_page(cmd): file = LocalFile(cmd[-1]) self.assertEqual(file, self.page.source_file) file.write('New text\n') manager = ApplicationManager() entry = manager.create('text/plain', 'test', 'test') manager.set_default_application('text/plain', entry) with tests.ApplicationContext(edit_page): with tests.DialogContext(MessageDialog): self.uiactions.edit_page_source() newtext = self.page.dump('plain') self.assertEqual(signals['storage-changed'], [(True, )]) # boolean for external change self.assertNotEqual(oldtext, newtext)
def runTest(self): notebook = self.setUpNotebook() page = notebook.get_page(Path('Page1')) tree = WikiParser().parse('test 123\n') signals = tests.SignalLogger(notebook) op = notebook.store_page_async(page, tree) thread = op._thread while thread.is_alive(): tests.gtk_process_events() tests.gtk_process_events() self.assertFalse(op.error_event.is_set()) text = page.dump('wiki') self.assertEqual(text[-1], 'test 123\n') self.assertEqual(signals['stored-page'], [(page,)]) # post handler happened as well
def runTest(self): # Test in 3 parts: # 1. Index existing files structure # 2. Check and update after new files appear # 3. Check and update after files disappear self.root = self.setUpFolder(mock=tests.MOCK_DEFAULT_REAL) db = sqlite3.connect(':memory:') db.row_factory = sqlite3.Row indexer = FilesIndexer(db, self.root) def cb_filter_func(name, o, a): #~ print '>>', name if name in ('start-update', 'finish-update'): self.assertFalse(a) return () else: row, = a self.assertIsInstance(row, sqlite3.Row) return row['path'] signals = tests.SignalLogger(indexer, cb_filter_func) def check_and_update_all(): checker = FilesIndexChecker(indexer.db, indexer.folder) checker.queue_check() for out_of_date in checker.check_iter(): if out_of_date: for i in indexer.update_iter(): pass indexer.db.commit() # 1. Index existing files structure self.create_files(self.FILES) check_and_update_all() files = set(f for f in self.FILES if not is_dir(f)) self.assertEqual(set(signals['file-row-inserted']), files) self.assertEqual(set(signals['file-row-changed']), files) self.assertEqual(signals['file-row-deleted'], []) self.assertFilesDBConsistent(db) self.assertFilesDBEquals(db, self.FILES) # 2. Check and update after new files appear signals.clear() self.create_files(self.FILES_UPDATE + self.FILES_CHANGE) check_and_update_all() files = set(f for f in self.FILES_UPDATE if not is_dir(f)) update = files | set(self.FILES_CHANGE) self.assertEqual(set(signals['file-row-inserted']), files) self.assertEqual(set(signals['file-row-changed']), update) self.assertEqual(signals['file-row-deleted'], []) self.assertFilesDBConsistent(db) self.assertFilesDBEquals(db, self.FILES + self.FILES_UPDATE) # 3. Check and update after files disappear signals.clear() self.remove_files(self.FILES_UPDATE) check_and_update_all() files = set(f for f in self.FILES_UPDATE if not is_dir(f)) self.assertEqual(signals['file-row-inserted'], []) self.assertEqual(signals['file-row-changed'], []) self.assertEqual(set(signals['file-row-deleted']), files) self.assertFilesDBConsistent(db) self.assertFilesDBEquals(db, self.FILES)
def runTest(self): # Test in 4 parts: # 1. insert files # 2. update files # 3. add some placeholders # 4. delete files self.root = self.setUpFolder() layout = FilesLayout(self.root) db = sqlite3.connect(':memory:') db.row_factory = sqlite3.Row file_indexer = tests.MockObject() indexer = PagesIndexer(db, layout, file_indexer) def cb_filter_func(name, o, a): if name == 'page-changed': row, content = a elif name == 'page-row-changed': row, oldrow = a else: row, = a self.assertIsInstance(row, sqlite3.Row) return row['name'] signals = tests.SignalLogger(indexer, cb_filter_func) # 1. insert files for i, path in enumerate(self.FILES): file = self.root.file(path) file.write('test 123') row = {'id': i, 'path': path} indexer.on_file_row_inserted(file_indexer, row) self.assertPagesDBConsistent(db) self.assertPagesDBEquals(db, self.PAGES) self.assertEqual(set(signals['page-row-inserted']), set(self.PAGES)) self.assertEqual(set(signals['page-row-changed']), set(self.NAMESPACES)) self.assertEqual(signals['page-row-deleted'], []) self.assertEqual(signals['page-changed'], []) # 2. update files signals.clear() for i, path in enumerate(self.FILES): row = {'id': i, 'path': path} indexer.on_file_row_changed(file_indexer, row) self.assertPagesDBConsistent(db) self.assertPagesDBEquals(db, self.PAGES) self.assertEqual(signals['page-row-inserted'], []) self.assertEqual(set(signals['page-row-changed']), set(self.CONTENT)) self.assertEqual(signals['page-row-deleted'], []) self.assertEqual(set(signals['page-changed']), set(self.CONTENT)) # 3. add some placeholders for pagename in self.PLACEHOLDERS: indexer.insert_link_placeholder(Path(pagename)) self.assertPagesDBConsistent(db) self.assertPagesDBEquals(db, self.PAGES + self.PLACEHOLDERS_ALL) for pagename in self.PLACEHOLDERS: indexer.delete_link_placeholder(Path(pagename)) self.assertPagesDBConsistent(db) self.assertPagesDBEquals(db, self.PAGES) # 4. delete files signals.clear() for i, path in enumerate(self.FILES): file = self.root.file(path) file.remove() row = {'id': i, 'path': path} indexer.on_file_row_deleted(file_indexer, row) self.assertPagesDBConsistent(db) self.assertPagesDBEquals(db, []) self.assertEqual(signals['page-row-inserted'], []) self.assertEqual(set(signals['page-row-changed']), set(['foo'])) # "foo" has source that is deleted before children self.assertEqual(set(signals['page-row-deleted']), set(self.PAGES)) self.assertEqual(signals['page-changed'], ['foo'])