Example #1
0
    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)
Example #2
0
	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
Example #3
0
    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)
Example #4
0
    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'])