def test_previewCheck23(self): """If the document is modified externally, then build on save will be automatically enabled. Calling scheduledocumentprocessing will not trigger a rebuild. """ self._doBasicSphinxConfig() core.config()['Sphinx']['BuildOnSave'] = False core.config().flush() self.codeText = """**** head **** """ self.masterText = """.. toctree:: code.rst""" codeDoc = self.createFile('code.rst', self.testText) masterDoc = self.createFile('index.rst', self.testText) self._assertHtmlReady(lambda: core.workspace().setCurrentDocument(codeDoc), timeout=10000) # Modify this file externally. with open("code.rst", 'a') as f: f.write(".. mytag::") self._assertHtmlReady(lambda: core.workspace().setCurrentDocument(masterDoc), timeout=10000) core.workspace().setCurrentDocument(codeDoc) # Modify this file internally, then wait for the typing timer to expire. qp = core.workspace().currentDocument().qutepart self.assertEmits(lambda: qp.appendPlainText('xxx'), self._dock()._typingTimer.timeout, timeoutMs=1000) # The typing timer invokes _scheduleDocumentProcessing. Make sure # it completes by waiting until all events are processed. base._processPendingEvents() # Make sure the file wasn't saved. self.assertTrue(qp.document().isModified())
def test_logWindowSplitter3a(self): """Feature 1,2,3. A combination of the above test cases. """ document1 = self.createFile('file1.rst', '.. file1::') document2 = self.createFile('file2.rst', '') document3 = self.createFile('file3.rst', '.. file3::') self._assertHtmlReady(lambda: None) self._assertHtmlReady( lambda: core.workspace().setCurrentDocument(document1)) base._processPendingEvents() # Change splitter setting of document 1. newSplitterSize = [125, 124] self._widget().splitter.setSizes(newSplitterSize) self._widget().splitter.splitterMoved.emit(newSplitterSize[0], 1) # Assert log window and preview window are visible and are of almost # equal size. self.assertNotIn(0, self._widget().splitter.sizes()) self.assertAlmostEqual(self._widget().splitter.sizes()[0], self._widget().splitter.sizes()[1], delta=10) # Switch to an error-free document, assert log window hidden. self._assertHtmlReady( lambda: core.workspace().setCurrentDocument(document2)) self.assertFalse(self._widget().splitter.sizes()[1]) # Switch to file3 which will cause build error, check splitter size. self._assertHtmlReady( lambda: core.workspace().setCurrentDocument(document3)) self.assertNotIn(0, self._widget().splitter.sizes()) self.assertAlmostEqual(self._widget().splitter.sizes()[0], self._widget().splitter.sizes()[1], delta=10)
def test_tab_completes(self): self.qpart.text = 'aaaaa\naaaaaXXXXX\n' base._processPendingEvents(self.app) self.qpart.cursorPosition = (2, 0) QTest.keyClicks(self.qpart, "aaa") QTest.keyClick(self.qpart, Qt.Key_Tab) self.assertEqual(self.qpart.text, 'aaaaa\naaaaaXXXXX\naaaaa') QTest.keyClick(self.qpart, Qt.Key_Tab) self.assertEqual(self.qpart.text, 'aaaaa\naaaaaXXXXX\naaaaaXXXXX')
def test_down_selects_second(self): self.qpart.text = 'aaaa\nbbbb\ncccX\ndddd\ncccY' base._processPendingEvents(self.app) QTest.keyClicks(self.qpart, "ccc") QTest.keyClick(self.qpart, Qt.Key_Down) QTest.keyClick(self.qpart, Qt.Key_Down) QTest.keyClick(self.qpart, Qt.Key_Enter) QTest.keyClick(self.qpart, Qt.Key_Enter) self.assertEqual(self.qpart.text, 'cccY\naaaa\nbbbb\ncccX\ndddd\ncccY')
def test_manual(self): self._window.show() self.qpart.text = 'aaaaa\naaaaaXXXXX\n' base._processPendingEvents(self.app) self.qpart.cursorPosition = (2, 0) QTest.keyClicks(self.qpart, "a") QTest.keyPress(self.qpart, Qt.Key_Space, Qt.ControlModifier, 100) QTest.keyClicks(self.qpart, "a") QTest.keyClick(self.qpart, Qt.Key_Tab) self.assertEqual(self.qpart.text, 'aaaaa\naaaaaXXXXX\naaaaa')
def test_too_long_list(self): self._window.show() self.qpart.text = '\n'.join(['asdf' + str(i) \ for i in range(100)]) + '\n' base._processPendingEvents(self.app) self.qpart.cursorPosition = (100, 0) QTest.keyClicks(self.qpart, "asdf") self.assertIsNotNone(self.qpart._completer._widget) self.qpart.text = '\n'.join(['asdf' + str(i) \ for i in range(1000)]) + '\n' base._processPendingEvents(self.app) self.qpart.cursorPosition = (1000, 0) QTest.keyClicks(self.qpart, "asdf") self.assertIsNone(self.qpart._completer._widget) QTest.keyPress(self.qpart, Qt.Key_Space, Qt.ControlModifier, 100) self.assertIsNotNone(self.qpart._completer._widget)
def test_logWindowSplitter3(self): """Feature 3. Error free document will not affect other documents' splitter size. """ document1 = self.createFile('file1.rst', '.. file1::') document2 = self.createFile('file2.rst', '') document3 = self.createFile('file3.rst', '.. file3::') self._assertHtmlReady(lambda: None) self._assertHtmlReady( lambda: core.workspace().setCurrentDocument(document1)) base._processPendingEvents() defaultSplitterSize = self._widget().splitter.sizes() self.assertTrue(defaultSplitterSize[1]) # Switch to document 2. Log window is hidden now. self._assertHtmlReady( lambda: core.workspace().setCurrentDocument(document2)) self.assertFalse(self._widget().splitter.sizes()[1]) # Switch to document 3. Log window should be restore to original size. self._assertHtmlReady( lambda: core.workspace().setCurrentDocument(document3)) self.assertTrue(self._widget().splitter.sizes()[0]) self.assertEqual(self._widget().splitter.sizes(), defaultSplitterSize)
def test_logWindowSplitter4(self): """User actively hide log window, Enki should be able to remember this. """ document1 = self.createFile('file1.rst', '.. file1::') document2 = self.createFile('file2.rst', '') document3 = self.createFile('file3.rst', '.. file3::') self._assertHtmlReady( lambda: core.workspace().setCurrentDocument(document1)) base._processPendingEvents() # User manually change error state splitter size such that log window # is hidden. self._widget().splitter.setSizes([1, 0]) self._widget().splitter.splitterMoved.emit(1, 1) # Switch to document 2. Log window is hidden now. self._assertHtmlReady( lambda: core.workspace().setCurrentDocument(document2)) base._processPendingEvents() self.assertFalse(self._widget().splitter.sizes()[1]) # Switch to document 3. Log window should keep hidden. self._assertHtmlReady( lambda: core.workspace().setCurrentDocument(document3)) base._processPendingEvents() self.assertFalse(self._widget().splitter.sizes()[1])
def setUp(self): super(Completion, self).setUp() self.qpart.text = 'completableWord\n' self.qpart.cursorPosition = (1, 0) base._processPendingEvents(self.app)
def _wait_highlighting_finished(self): base._processPendingEvents(self.app)