Example #1
0
    def runTest(self):
        if os.name == 'posix':
            # There is an upper limit to lenght of a socket name for AF_UNIX
            # (107 characters ?). On OS X the path to TMPDIR already consumes
            # 50 chars, and we use "zim-$USER" -- so can still give errors for
            # user names > 20 chars. But basename should be limitted.
            from zim.main.ipc import SERVER_ADDRESS
            self.assertLessEqual(
                len(os.path.basename(SERVER_ADDRESS)), 25,
                "name too long: %s" % os.path.basename(SERVER_ADDRESS))

        inbox = [None]

        def handler(*args):
            inbox[0] = args

        zim.main.ipc.start_listening(handler)
        self.addCleanup(zim.main.ipc._close_listener)

        self.assertRaises(AssertionError, zim.main.ipc.dispatch, 'test', '123')
        # raises due to sanity check same process

        zim.main.ipc.set_in_main_process(False)  # overrule sanity check
        t = threading.Thread(target=zim.main.ipc.dispatch,
                             args=('test', '123'))
        t.start()
        while t.is_alive():
            tests.gtk_process_events()
        tests.gtk_process_events()
        self.assertEqual(inbox[0], ('test', '123'))
Example #2
0
    def runTest(self):
        notebook = self.setUpNotebook(content=tests.FULL_NOTEBOOK)
        notebook.index.flush()
        self.assertFalse(notebook.index.is_uptodate)

        notebook.index.start_background_check(notebook)
        while notebook.index.background_check.running:
            tests.gtk_process_events()
        self.assertTrue(notebook.index.is_uptodate)
        self.assertTrue(notebook.pages.n_all_pages() > 10)

        notebook.index.stop_background_check()
Example #3
0
	def runTest(self):
		counter = tests.Counter()

		callback = DelayedCallback(500, lambda o: counter())
		for i in range(3):
			callback('foo')

		for i in range(10):
			time.sleep(1)
			tests.gtk_process_events()
			if callback.timer_id is None:
				break

		self.assertEqual(counter.count, 1)
Example #4
0
    def runTest(self):
        counter = tests.Counter()

        callback = DelayedCallback(500, lambda o: counter())
        for i in range(3):
            callback('foo')

        for i in range(10):
            time.sleep(1)
            tests.gtk_process_events()
            if callback.timer_id is None:
                break

        self.assertEqual(counter.count, 1)
    def runTest(self):
        cb = tests.CallBackLogger()

        callback = DelayedCallback(500, lambda o: cb())
        for i in range(3):
            callback('foo')

        for i in range(10):
            time.sleep(1)
            tests.gtk_process_events()
            if callback.timer_id is None:
                break

        self.assertTrue(cb.hasBeenCalled)
Example #6
0
	def runTest(self):
		inbox = [None]
		def handler(*args):
			inbox[0] = args

		zim.main.ipc.start_listening(handler)
		self.addCleanup(zim.main.ipc._close_listener)

		self.assertRaises(AssertionError, zim.main.ipc.dispatch, '--manual')

		zim.main.ipc.set_in_main_process(False) # overrule sanity check
		zim.main.ipc.dispatch('test', '123')

		tests.gtk_process_events()
		self.assertEqual(inbox[0], ('test', '123'))
Example #7
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 #8
0
	def testTreeView(self):
		ui = MockUI()
		ui.notebook = self.notebook
		ui.page = Path('foobar')
		self.assertTrue(self.notebook.get_page(ui.page).exists())

		self.notebook.index.flush() # we want to index ourselves
		treestore = self.storeclass(self.notebook.index, self.tags)
		treeview = self.viewclass(ui, treestore)

		# Process signals on by one
		self.assertEqual(self.notebook.pages.n_all_pages(), 0) # assert we start blank
		for p in self.notebook.index.update_iter():
			tests.gtk_process_events()
		tests.gtk_process_events()

		# Try some TreeView methods
		path = Path('foobar')
		treepath = treeview.get_model().find(path)
		self.assertEqual(treeview.set_current_page(path), treepath)
		col = treeview.get_column(0)
		treeview.row_activated(treepath, col)

		#~ treeview.emit('popup-menu')
		treeview.emit('insert-link', path)
		treeview.emit('copy')

		# Check signals for page change
		page = self.notebook.get_page(Path('Foo'))

		page.parse('wiki', 'Fooo @tag1 @tag2\n')
		self.notebook.store_page(page)
		tests.gtk_process_events()

		page.parse('wiki', 'Fooo @foo @bar @tag2\n')
		self.notebook.store_page(page)
		tests.gtk_process_events()

		# Check if all the signals go OK in delete
		for page in reversed(list(self.notebook.pages.walk())): # delete bottom up
			self.notebook.delete_page(page)
			tests.gtk_process_events()
Example #9
0
    def testAttachFileDialog(self):
        '''Test AttachFileDialog'''
        tmp_dir = self.create_tmp_dir('testAttachFileDialog')
        file = File((tmp_dir, 'file_to_be_attached'))
        file.write('Test 1 2 3\n')
        newfile = File(
            (tmp_dir, 'attachments', 'Test', 'foo', 'file_to_be_attached'))
        self.assertTrue(file.exists())
        self.assertFalse(newfile.exists())

        mainwindow = tests.MockObject()
        mainwindow.pageview = tests.MockObject()
        mainwindow.ui = self.ui

        dialog = zim.gui.AttachFileDialog(mainwindow,
                                          self.ui.notebook,
                                          path=Path('Test:foo'))
        dialog.set_file(file)
        tests.gtk_process_events()
        dialog.assert_response_ok()

        self.assertTrue(file.exists())  # No move or delete happened
        self.assertTrue(newfile.exists())
        self.assertTrue(newfile.compare(file))
Example #10
0
File: tags.py Project: gdw2/zim
	def runTest(self):
		'''Test TaggedPageTreeStore index interface'''
		# This is one big test instead of seperate sub tests because in the
		# subclass we generate a file based notebook in setUp, and we do not
		# want to do that many times.
		# Hooking up the treeview as well just to see if we get any errors
		# From the order the signals are generated.

		ui = MockUI()
		ui.notebook = self.notebook
		ui.page = Path('Test:foo')
		self.assertTrue(self.notebook.get_page(ui.page).exists())

		treestore = self.storeclass(self.index)
		self.assertEqual(treestore.get_flags(), 0)
		self.assertEqual(treestore.get_n_columns(), 8)
		treeview = self.viewclass(ui, treestore)
		model = treeview.get_model()
		if isinstance(model, gtk.TreeModelFilter):
			model = model.get_model() # look inside filtered model
		self.assertEqual(model, treestore)

		self.assertEqual(treestore.get_flags(), 0)
		self.assertEqual(treestore.get_n_columns(), 8)

		self.index.update(callback=tests.gtk_process_events)
		tests.gtk_process_events()

		#~ treeview = PageTreeView(None) # just run hidden to check errors
		#~ treeview.set_model(treestore)

		n = treestore.on_iter_n_children(None)
		self.assertTrue(n > 0)
		n = treestore.iter_n_children(None)
		self.assertTrue(n > 0)

		for i in range(treestore.get_n_columns()):
			self.assertTrue(not treestore.get_column_type(i) is None)

		# Quick check for basic methods
		iter = treestore.on_get_iter((0,))
		self.assertTrue(isinstance(iter, (PageTreeIter, PageTreeTagIter)))
		if self.storeclass is TaggedPageTreeStore:
			self.assertTrue(isinstance(iter, PageTreeIter))
			self.assertTrue(isinstance(iter.indexpath, IndexPath))
			self.assertFalse(iter.indexpath.isroot)
		else:
			self.assertTrue(isinstance(iter, PageTreeTagIter))
			self.assertTrue(isinstance(iter.indextag, IndexTag))
		basename = treestore.on_get_value(iter, 0)
		self.assertTrue(len(basename) > 0)
		self.assertEqual(iter.treepath, (0,))
		self.assertEqual(treestore.on_get_path(iter), (0,))
		if self.storeclass is TaggedPageTreeStore:
			self.assertEqual(treestore.get_treepath(iter.indexpath), (0,))
			self.assertEqual(treestore.get_treepath(Path(iter.indexpath.name)), (0,))
		else:
			self.assertEqual(treestore.get_treepath(iter.indextag), (0,))

		iter2 = treestore.on_iter_children(None)
		if self.storeclass is TaggedPageTreeStore:
			self.assertEqual(iter2.indexpath, iter.indexpath)
		else:
			self.assertEqual(iter2.indextag, iter.indextag)

		self.assertTrue(treestore.on_get_iter((20,20,20,20,20)) is None)
		self.assertTrue(treestore.get_treepath(Path('nonexisting')) is None)
		self.assertRaises(ValueError, treestore.get_treepath, Path(':'))

		# Now walk through the whole tree testing the API
		nitems = 0
		path = (0,)
		prevpath = None
		while path:
			#~ print 'PATH', path
			assert path != prevpath, 'Prevent infinite loop'
			nitems += 1
			prevpath = path

			iter = treestore.get_iter(path)
			self.assertEqual(treestore.get_path(iter), tuple(path))

			if isinstance(treestore.on_get_iter(path), PageTreeIter):
				self._check_indexpath_iter(treestore, iter, path)
			else:
				self._check_indextag_iter(treestore, iter, path)

			# Determine how to continue
			if treestore.iter_has_child(iter):
				path = path + (0,)
			else:
				path = path[:-1] + (path[-1]+1,) # increase last member
				while path:
					try:
						treestore.get_iter(path)
					except ValueError:
						path = path[:-1]
						if len(path):
							path = path[:-1] + (path[-1]+1,) # increase last member
					else:
						break

		self.assertTrue(nitems > 10) # double check sanity of loop

		# Check if all the signals go OK
		treestore.disconnect_index()
		del treestore
		self.index.flush()
		treestore = self.storeclass(self.index)
		treeview = TagsPageTreeView(ui, treestore)
		self.index.update(callback=tests.gtk_process_events)

		# Try some TreeView methods
		path = Path('Test:foo')
		self.assertTrue(treeview.select_page(path))
		self.assertEqual(treeview.get_selected_path(), path)
		treepath = treeview.get_model().get_treepath(path)
		self.assertTrue(not treepath is None)
		col = treeview.get_column(0)
		treeview.row_activated(treepath, col)

		#~ treeview.emit('popup-menu')
		treeview.emit('insert-link', path)
		treeview.emit('copy')

		# Check if all the signals go OK in delete
		for page in reversed(list(self.notebook.walk())): # delete bottom up
			self.notebook.delete_page(page)
			tests.gtk_process_events()
Example #11
0
    def runTest(self):
        plugin = VersionControlPlugin()

        dir = get_tmp_dir('versioncontrol_TestMainWindowExtension')
        notebook = self.setUpNotebook(mock=tests.MOCK_ALWAYS_REAL,
                                      content=('Test', ),
                                      folder=LocalFolder(dir.path))
        mainwindow = setUpMainWindow(notebook)
        plugin.extend(notebook)
        plugin.extend(mainwindow)

        notebook_ext = find_extension(notebook, NotebookExtension)
        window_ext = find_extension(mainwindow,
                                    VersionControlMainWindowExtension)

        op = ongoing_operation(notebook)
        assert op is None  # check no opperation ongoing

        ## init & save version
        self.assertIsNone(notebook_ext.vcs)

        def init(dialog):
            self.assertIsInstance(dialog, VersionControlInitDialog)
            choice = dialog.combobox.get_active_text()
            self.assertTrue(choice and not choice.isspace())
            dialog.answer_yes()

        with tests.DialogContext(init, SaveVersionDialog):
            window_ext.save_version()

        self.assertIsNotNone(notebook_ext.vcs)

        self.assertFalse(notebook_ext.vcs.is_modified())

        ## save version again
        page = notebook.get_page(Path('Foo'))
        page.parse('wiki', 'foo!')
        notebook.store_page(page)

        self.assertTrue(notebook_ext.vcs.is_modified())

        with tests.DialogContext(SaveVersionDialog):
            window_ext.save_version()

        self.assertFalse(notebook_ext.vcs.is_modified())

        ## show versions
        with tests.DialogContext(VersionsDialog):
            window_ext.show_versions()

        ## auto-save
        plugin.preferences['autosave'] = True

        page = notebook.get_page(Path('Fooooo'))
        page.parse('wiki', 'foo!')
        notebook.store_page(page)

        self.assertTrue(notebook_ext.vcs.is_modified())
        mainwindow.emit('close')
        self.assertFalse(notebook_ext.vcs.is_modified())

        tests.gtk_process_events()
        assert ongoing_operation(notebook) is None
Example #12
0
    def runTest(self):
        tmp_dir = Dir(self.create_tmp_dir())

        for name in ('test1.txt', 'test2.txt', 'test3.txt'):
            tmp_dir.file(name).write('test 123')

        tmp_dir.subdir('folder1').touch()

        # Single file
        file = tmp_dir.file('test1.txt')
        self.assertTrue(file.exists())

        dialog = FileDialog(None, 'Test')
        self.assertIsNone(dialog.get_file())

        dialog.set_file(file)
        tests.gtk_process_events()
        dialog.set_file(file)
        tests.gtk_process_events()
        dialog.set_file(file)
        tests.gtk_process_events()

        myfile = dialog.get_file()
        self.assertIsInstance(myfile, File)
        self.assertEqual(myfile.uri, file.uri)

        dialog.assert_response_ok()
        self.assertIsInstance(dialog.result, File)
        self.assertEqual(dialog.result.uri, file.uri)

        # Multiple files
        file1 = tmp_dir.file('test1.txt')
        file2 = tmp_dir.file('test2.txt')
        self.assertTrue(file1.exists())
        self.assertTrue(file2.exists())

        dialog = FileDialog(None, 'Test', multiple=True)
        assert dialog.filechooser.select_uri(file1.uri)
        assert dialog.filechooser.select_uri(file2.uri)
        tests.gtk_process_events()

        self.assertRaises(AssertionError, dialog.get_file)

        files = dialog.get_files()
        self.assertTrue(all(isinstance(f, File) for f in files))
        #~ self.assertEqual([f.uri for f in files], [file1.uri, file2.uri]) -- TODO

        ## FIXME, fails for unclear reason on windows under msys
        #dialog.assert_response_ok()
        #self.assertIsInstance(dialog.result, list)

        # Select folder
        folder = tmp_dir.subdir('folder1')
        self.assertTrue(folder.exists())

        dialog = FileDialog(None,
                            'Test',
                            action=Gtk.FileChooserAction.SELECT_FOLDER)
        assert dialog.filechooser.select_uri(folder.uri)
        tests.gtk_process_events()
        assert dialog.filechooser.select_uri(folder.uri)
        tests.gtk_process_events()
        assert dialog.filechooser.select_uri(folder.uri)
        tests.gtk_process_events()

        myfolder = dialog.get_dir()
        self.assertIsInstance(myfolder, Dir)
        self.assertEqual(myfolder.uri, folder.uri)

        dialog.assert_response_ok()
        self.assertIsInstance(dialog.result, Dir)
Example #13
0
    def runTest(self):
        '''Test TaggedPageTreeStore index interface'''
        # This is one big test instead of seperate sub tests because in the
        # subclass we generate a file based notebook in setUp, and we do not
        # want to do that many times.
        # Hooking up the treeview as well just to see if we get any errors
        # From the order the signals are generated.

        ui = MockUI()
        ui.notebook = self.notebook
        ui.page = Path('Test:foo')
        self.assertTrue(self.notebook.get_page(ui.page).exists())

        treestore = self.storeclass(self.index)
        self.assertEqual(treestore.get_flags(), 0)
        self.assertEqual(treestore.get_n_columns(), 8)
        treeview = self.viewclass(ui, treestore)
        model = treeview.get_model()
        if isinstance(model, gtk.TreeModelFilter):
            model = model.get_model()  # look inside filtered model
        self.assertEqual(model, treestore)

        self.assertEqual(treestore.get_flags(), 0)
        self.assertEqual(treestore.get_n_columns(), 8)

        self.index.update(callback=tests.gtk_process_events)
        tests.gtk_process_events()

        #~ treeview = PageTreeView(None) # just run hidden to check errors
        #~ treeview.set_model(treestore)

        n = treestore.on_iter_n_children(None)
        self.assertTrue(n > 0)
        n = treestore.iter_n_children(None)
        self.assertTrue(n > 0)

        for i in range(treestore.get_n_columns()):
            self.assertTrue(not treestore.get_column_type(i) is None)

        # Quick check for basic methods
        iter = treestore.on_get_iter((0, ))
        self.assertTrue(isinstance(iter, (PageTreeIter, PageTreeTagIter)))
        if self.storeclass is TaggedPageTreeStore:
            self.assertTrue(isinstance(iter, PageTreeIter))
            self.assertTrue(isinstance(iter.indexpath, IndexPath))
            self.assertFalse(iter.indexpath.isroot)
        else:
            self.assertTrue(isinstance(iter, PageTreeTagIter))
            self.assertTrue(isinstance(iter.indextag, IndexTag))
        basename = treestore.on_get_value(iter, 0)
        self.assertTrue(len(basename) > 0)
        self.assertEqual(iter.treepath, (0, ))
        self.assertEqual(treestore.on_get_path(iter), (0, ))
        if self.storeclass is TaggedPageTreeStore:
            self.assertEqual(treestore.get_treepath(iter.indexpath), (0, ))
            self.assertEqual(treestore.get_treepath(Path(iter.indexpath.name)),
                             (0, ))
        else:
            self.assertEqual(treestore.get_treepath(iter.indextag), (0, ))

        iter2 = treestore.on_iter_children(None)
        if self.storeclass is TaggedPageTreeStore:
            self.assertEqual(iter2.indexpath, iter.indexpath)
        else:
            self.assertEqual(iter2.indextag, iter.indextag)

        self.assertTrue(treestore.on_get_iter((20, 20, 20, 20, 20)) is None)
        self.assertTrue(treestore.get_treepath(Path('nonexisting')) is None)
        self.assertRaises(ValueError, treestore.get_treepath, Path(':'))

        # Now walk through the whole tree testing the API
        nitems = 0
        path = (0, )
        prevpath = None
        while path:
            #~ print 'PATH', path
            assert path != prevpath, 'Prevent infinite loop'
            nitems += 1
            prevpath = path

            iter = treestore.get_iter(path)
            self.assertEqual(treestore.get_path(iter), tuple(path))

            if isinstance(treestore.on_get_iter(path), PageTreeIter):
                self._check_indexpath_iter(treestore, iter, path)
            else:
                self._check_indextag_iter(treestore, iter, path)

            # Determine how to continue
            if treestore.iter_has_child(iter):
                path = path + (0, )
            else:
                path = path[:-1] + (path[-1] + 1, )  # increase last member
                while path:
                    try:
                        treestore.get_iter(path)
                    except ValueError:
                        path = path[:-1]
                        if len(path):
                            path = path[:-1] + (path[-1] + 1,
                                                )  # increase last member
                    else:
                        break

        self.assertTrue(nitems > 10)  # double check sanity of loop

        # Check if all the signals go OK
        treestore.disconnect_index()
        del treestore
        self.index.flush()
        treestore = self.storeclass(self.index)
        treeview = TagsPageTreeView(ui, treestore)
        self.index.update(callback=tests.gtk_process_events)

        # Try some TreeView methods
        path = Path('Test:foo')
        self.assertTrue(treeview.set_current_page(path))
        # TODO assert something
        treepath = treeview.get_model().get_treepath(path)
        self.assertTrue(not treepath is None)
        col = treeview.get_column(0)
        treeview.row_activated(treepath, col)

        #~ treeview.emit('popup-menu')
        treeview.emit('insert-link', path)
        treeview.emit('copy')

        # Check if all the signals go OK in delete
        for page in reversed(list(self.notebook.walk())):  # delete bottom up
            self.notebook.delete_page(page)
            tests.gtk_process_events()
Example #14
0
	def runTest(self):
		'''Test PageTreeStore index interface'''
		# This is one big test instead of seperate sub tests because in the
		# subclass we generate a file based notebook in setUp, and we do not
		# want to do that many times.
		# Hooking up the treeview as well just to see if we get any errors
		# From the order the signals are generated.

		ui = MockUI()
		ui.notebook = self.notebook
		ui.page = Path('Test:foo')
		self.assertTrue(self.notebook.get_page(ui.page).exists())

		treeview = PageTreeView(ui)
		treestore = PageTreeStore(self.index)
		self.assertEqual(treestore.get_flags(), 0)
		self.assertEqual(treestore.get_n_columns(), 7)
		treeview.set_model(treestore)

		self.index.update(callback=tests.gtk_process_events)
		tests.gtk_process_events()

		treeview = PageTreeView(ui) # just run hidden to check errors
		treeview.set_model(treestore)

		n = treestore.on_iter_n_children(None)
		self.assertTrue(n > 0)
		n = treestore.iter_n_children(None)
		self.assertTrue(n > 0)

		for i in range(treestore.get_n_columns()):
			self.assertTrue(not treestore.get_column_type(i) is None)

		# Quick check for basic methods
		iter = treestore.on_get_iter((0,))
		self.assertTrue(isinstance(iter, PageTreeIter))
		self.assertFalse(iter.indexpath.isroot)
		basename = treestore.on_get_value(iter, 0)
		self.assertTrue(len(basename) > 0)
		self.assertEqual(iter.treepath, (0,))
		self.assertEqual(treestore.on_get_path(iter), (0,))
		self.assertEqual(treestore.get_treepath(iter.indexpath), (0,))
		self.assertEqual(treestore.get_treepath(Path(iter.indexpath.name)), (0,))

		iter2 = treestore.on_iter_children(None)
		self.assertEqual(iter2.indexpath, iter.indexpath)

		self.assertTrue(treestore.on_get_iter((20,20,20,20,20)) is None)
		self.assertTrue(treestore.get_treepath(Path('nonexisting')) is None)
		self.assertRaises(ValueError, treestore.get_treepath, Path(':'))

		# Now walk through the whole notebook testing the API
		# with nested pages and stuff
		npages = 0
		path = []
		for page in self.notebook.walk():
			#~ print '>>', page
			npages += 1
			names = page.name.split(':')
			if len(names) > len(path):
				path.append(0) # always increment by one
			elif len(names) < len(path):
				while len(names) < len(path):
					path.pop()
				path[-1] += 1
			else:
				path[-1] += 1
			#~ print '>>', page, path
			iter = treestore.get_iter(tuple(path))
			indexpath = treestore.get_indexpath(iter)
			#~ print '>>>', indexpath
			self.assertEqual(indexpath, page)
			self.assertEqual(treestore.get_value(iter, NAME_COL), page.basename)
			self.assertEqual(treestore.get_value(iter, PATH_COL), page)
			if page.hascontent or page.haschildren:
				self.assertEqual(treestore.get_value(iter, EMPTY_COL), False)
				self.assertEqual(treestore.get_value(iter, STYLE_COL), pango.STYLE_NORMAL)
				self.assertEqual(treestore.get_value(iter, FGCOLOR_COL), treestore.NORMAL_COLOR)
			else:
				self.assertEqual(treestore.get_value(iter, EMPTY_COL), True)
				self.assertEqual(treestore.get_value(iter, STYLE_COL), pango.STYLE_ITALIC)
				self.assertEqual(treestore.get_value(iter, FGCOLOR_COL), treestore.EMPTY_COLOR)
			self.assertEqual(treestore.get_path(iter), tuple(path))
			if indexpath.haschildren:
				self.assertTrue(treestore.iter_has_child(iter))
				child = treestore.iter_children(iter)
				self.assertTrue(not child is None)
				child = treestore.iter_nth_child(iter, 0)
				self.assertTrue(not child is None)
				parent = treestore.iter_parent(child)
				self.assertEqual(
					treestore.get_indexpath(parent), page)
				childpath = treestore.get_path(child)
				self.assertEqual(
					childpath, tuple(path) + (0,))
				n = treestore.iter_n_children(iter)
				for i in range(1, n):
					child = treestore.iter_next(child)
					childpath = treestore.get_path(child)
					self.assertEqual(
						childpath, tuple(path) + (i,))
				child = treestore.iter_next(child)
				self.assertTrue(child is None)

			else:
				self.assertTrue(not treestore.iter_has_child(iter))
				child = treestore.iter_children(iter)
				self.assertTrue(child is None)
				child = treestore.iter_nth_child(iter, 0)
				self.assertTrue(child is None)

		self.assertTrue(npages > 10) # double check sanity of walk() method

		# Check if all the signals go OK
		treestore.disconnect_index()
		del treestore
		self.index.flush()
		treestore = PageTreeStore(self.index)
		treeview = PageTreeView(ui, treestore)
		self.index.update(callback=tests.gtk_process_events)

		# Try some TreeView methods
		path = Path('Test:foo')
		self.assertTrue(treeview.select_page(path))
		self.assertEqual(treeview.get_selected_path(), path)
		treepath = treeview.get_model().get_treepath(path)
		self.assertTrue(not treepath is None)
		col = treeview.get_column(0)
		treeview.row_activated(treepath, col)

		#~ treeview.emit('popup-menu')
		treeview.emit('insert-link', path)
		treeview.emit('copy')

		# Check if all the signals go OK in delete
		for page in reversed(list(self.notebook.walk())): # delete bottom up
			self.notebook.delete_page(page)
			tests.gtk_process_events()
Example #15
0
    def runTest(self):
        '''Test PageTreeStore index interface'''
        # This is one big test instead of seperate sub tests because in the
        # subclass we generate a file based notebook in setUp, and we do not
        # want to do that many times.
        # Hooking up the treeview as well just to see if we get any errors
        # From the order the signals are generated.

        ui = MockUI()
        ui.notebook = self.notebook
        ui.page = Path('Test:foo')
        self.assertTrue(self.notebook.get_page(ui.page).exists())

        treeview = PageTreeView(ui)
        treestore = PageTreeStore(self.index)
        self.assertEqual(treestore.get_flags(), 0)
        self.assertEqual(treestore.get_n_columns(), 8)
        treeview.set_model(treestore)

        self.index.update(callback=tests.gtk_process_events)
        tests.gtk_process_events()

        treeview = PageTreeView(ui)  # just run hidden to check errors
        treeview.set_model(treestore)

        n = treestore.on_iter_n_children(None)
        self.assertTrue(n > 0)
        n = treestore.iter_n_children(None)
        self.assertTrue(n > 0)

        for i in range(treestore.get_n_columns()):
            self.assertTrue(not treestore.get_column_type(i) is None)

        # Quick check for basic methods
        iter = treestore.on_get_iter((0, ))
        self.assertTrue(isinstance(iter, PageTreeIter))
        self.assertFalse(iter.indexpath.isroot)
        basename = treestore.on_get_value(iter, 0)
        self.assertTrue(len(basename) > 0)
        self.assertEqual(iter.treepath, (0, ))
        self.assertEqual(treestore.on_get_path(iter), (0, ))
        self.assertEqual(treestore.get_treepath(iter.indexpath), (0, ))
        self.assertEqual(treestore.get_treepath(Path(iter.indexpath.name)),
                         (0, ))

        iter2 = treestore.on_iter_children(None)
        self.assertEqual(iter2.indexpath, iter.indexpath)

        self.assertTrue(treestore.on_get_iter((20, 20, 20, 20, 20)) is None)
        self.assertTrue(treestore.get_treepath(Path('nonexisting')) is None)
        self.assertRaises(ValueError, treestore.get_treepath, Path(':'))

        # Now walk through the whole notebook testing the API
        # with nested pages and stuff
        npages = 0
        path = []
        for page in self.notebook.walk():
            #~ print '>>', page
            npages += 1
            names = page.name.split(':')
            if len(names) > len(path):
                path.append(0)  # always increment by one
            elif len(names) < len(path):
                while len(names) < len(path):
                    path.pop()
                path[-1] += 1
            else:
                path[-1] += 1
            #~ print '>>', page, path
            iter = treestore.get_iter(tuple(path))
            indexpath = treestore.get_indexpath(iter)
            #~ print '>>>', indexpath
            self.assertEqual(indexpath, page)
            self.assertEqual(treestore.get_value(iter, NAME_COL),
                             page.basename)
            self.assertEqual(treestore.get_value(iter, PATH_COL), page)
            if page.hascontent or page.haschildren:
                self.assertEqual(treestore.get_value(iter, EMPTY_COL), False)
                self.assertEqual(treestore.get_value(iter, STYLE_COL),
                                 pango.STYLE_NORMAL)
                self.assertEqual(treestore.get_value(iter, FGCOLOR_COL),
                                 treestore.NORMAL_COLOR)
            else:
                self.assertEqual(treestore.get_value(iter, EMPTY_COL), True)
                self.assertEqual(treestore.get_value(iter, STYLE_COL),
                                 pango.STYLE_ITALIC)
                self.assertEqual(treestore.get_value(iter, FGCOLOR_COL),
                                 treestore.EMPTY_COLOR)
            self.assertEqual(treestore.get_path(iter), tuple(path))
            if indexpath.haschildren:
                self.assertTrue(treestore.iter_has_child(iter))
                child = treestore.iter_children(iter)
                self.assertTrue(not child is None)
                child = treestore.iter_nth_child(iter, 0)
                self.assertTrue(not child is None)
                parent = treestore.iter_parent(child)
                self.assertEqual(treestore.get_indexpath(parent), page)
                childpath = treestore.get_path(child)
                self.assertEqual(childpath, tuple(path) + (0, ))
                n = treestore.iter_n_children(iter)
                for i in range(1, n):
                    child = treestore.iter_next(child)
                    childpath = treestore.get_path(child)
                    self.assertEqual(childpath, tuple(path) + (i, ))
                child = treestore.iter_next(child)
                self.assertTrue(child is None)

            else:
                self.assertTrue(not treestore.iter_has_child(iter))
                child = treestore.iter_children(iter)
                self.assertTrue(child is None)
                child = treestore.iter_nth_child(iter, 0)
                self.assertTrue(child is None)

        self.assertTrue(npages > 10)  # double check sanity of walk() method

        # Check if all the signals go OK
        treestore.disconnect_index()
        del treestore
        self.index.flush()
        treestore = PageTreeStore(self.index)
        treeview = PageTreeView(ui, treestore)
        self.index.update(callback=tests.gtk_process_events)

        # Try some TreeView methods
        path = Path('Test:foo')
        self.assertTrue(treeview.select_page(path))
        self.assertEqual(treeview.get_selected_path(), path)
        treepath = treeview.get_model().get_treepath(path)
        self.assertTrue(not treepath is None)
        col = treeview.get_column(0)
        treeview.row_activated(treepath, col)

        #~ treeview.emit('popup-menu')
        treeview.emit('insert-link', path)
        treeview.emit('copy')

        # Check if all the signals go OK in delete
        for page in reversed(list(self.notebook.walk())):  # delete bottom up
            self.notebook.delete_page(page)
            tests.gtk_process_events()