1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
"""
Adapted from a code editor component created
for Enki editor as replacement for QScintilla.
Copyright (C) 2020 Andrei Kopats
Originally licensed under the terms of GNU Lesser General Public License
as published by the Free Software Foundation, version 2.1 of the license.
This is compatible with Orange3's GPL-3.0 license.
""" # pylint: disable=duplicate-code
import unittest
from AnyQt.QtCore import Qt
from AnyQt.QtTest import QTest
from Orange.widgets.data.utils.pythoneditor.tests.base import EditorTest
class Test(EditorTest):
def test_1(self):
# Indent with Tab
self.qpart.indentUseTabs = True
self.qpart.text = 'ab\ncd'
QTest.keyClick(self.qpart, Qt.Key_Down)
QTest.keyClick(self.qpart, Qt.Key_Tab)
self.assertEqual(self.qpart.text, 'ab\n\tcd')
self.qpart.indentUseTabs = False
QTest.keyClick(self.qpart, Qt.Key_Backspace)
QTest.keyClick(self.qpart, Qt.Key_Tab)
self.assertEqual(self.qpart.text, 'ab\n cd')
def test_2(self):
# Unindent Tab
self.qpart.indentUseTabs = True
self.qpart.text = 'ab\n\t\tcd'
self.qpart.cursorPosition = (1, 2)
self.qpart.decreaseIndentAction.trigger()
self.assertEqual(self.qpart.text, 'ab\n\tcd')
self.qpart.decreaseIndentAction.trigger()
self.assertEqual(self.qpart.text, 'ab\ncd')
def test_3(self):
# Unindent Spaces
self.qpart.indentUseTabs = False
self.qpart.text = 'ab\n cd'
self.qpart.cursorPosition = (1, 6)
self.qpart.decreaseIndentAction.trigger()
self.assertEqual(self.qpart.text, 'ab\n cd')
self.qpart.decreaseIndentAction.trigger()
self.assertEqual(self.qpart.text, 'ab\ncd')
def test_4(self):
# (Un)indent multiline with Tab
self.qpart.indentUseTabs = False
self.qpart.text = ' ab\n cd'
self.qpart.selectedPosition = ((0, 2), (1, 3))
QTest.keyClick(self.qpart, Qt.Key_Tab)
self.assertEqual(self.qpart.text, ' ab\n cd')
self.qpart.decreaseIndentAction.trigger()
self.assertEqual(self.qpart.text, ' ab\n cd')
def test_4b(self):
# Indent multiline including line with zero selection
self.qpart.indentUseTabs = True
self.qpart.text = 'ab\ncd\nef'
self.qpart.position = (0, 0)
QTest.keyClick(self.qpart, Qt.Key_Down, Qt.ShiftModifier)
QTest.keyClick(self.qpart, Qt.Key_Tab)
self.assertEqual(self.qpart.text, '\tab\ncd\nef')
@unittest.skip # Fantom crashes happen when running multiple tests. TODO find why
def test_5(self):
# (Un)indent multiline with Space
self.qpart.indentUseTabs = False
self.qpart.text = ' ab\n cd'
self.qpart.selectedPosition = ((0, 2), (1, 3))
QTest.keyClick(self.qpart, Qt.Key_Space, Qt.ShiftModifier | Qt.ControlModifier)
self.assertEqual(self.qpart.text, ' ab\n cd')
QTest.keyClick(self.qpart, Qt.Key_Backspace, Qt.ShiftModifier | Qt.ControlModifier)
self.assertEqual(self.qpart.text, ' ab\n cd')
def test_6(self):
# (Unindent Tab/Space mix
self.qpart.indentUseTabs = False
self.qpart.text = ' \t \tab'
self.qpart.cursorPosition = ((0, 8))
self.qpart.decreaseIndentAction.trigger()
self.assertEqual(self.qpart.text, ' \t ab')
self.qpart.decreaseIndentAction.trigger()
self.assertEqual(self.qpart.text, ' \tab')
self.qpart.decreaseIndentAction.trigger()
self.assertEqual(self.qpart.text, ' ab')
self.qpart.decreaseIndentAction.trigger()
self.assertEqual(self.qpart.text, 'ab')
self.qpart.decreaseIndentAction.trigger()
self.assertEqual(self.qpart.text, 'ab')
def test_7(self):
"""Smartly indent python"""
QTest.keyClicks(self.qpart, "def main():")
QTest.keyClick(self.qpart, Qt.Key_Enter)
self.assertEqual(self.qpart.cursorPosition, (1, 4))
QTest.keyClicks(self.qpart, "return 7")
QTest.keyClick(self.qpart, Qt.Key_Enter)
self.assertEqual(self.qpart.cursorPosition, (2, 0))
if __name__ == '__main__':
unittest.main()
|