|
1 | 1 | # Test methods with long descriptive names can omit docstrings |
2 | 2 | # pylint: disable=missing-docstring |
| 3 | +from AnyQt.QtCore import QMimeData, QUrl, QPoint, Qt |
| 4 | +from AnyQt.QtGui import QDragEnterEvent, QDropEvent |
| 5 | + |
3 | 6 | from Orange.data import Table |
4 | 7 | from Orange.classification import LogisticRegressionLearner |
5 | | -from Orange.widgets.data.owpythonscript import OWPythonScript |
| 8 | +from Orange.tests import named_file |
| 9 | +from Orange.widgets.data.owpythonscript import OWPythonScript, read_file_content |
6 | 10 | from Orange.widgets.tests.base import WidgetTest |
7 | 11 | from Orange.widgets.widget import OWWidget |
8 | 12 |
|
@@ -134,3 +138,75 @@ def test_store_current_script(self): |
134 | 138 | self.widget = self.create_widget(OWPythonScript, stored_settings=settings) |
135 | 139 | script = self.widget.text.toPlainText() |
136 | 140 | self.assertEqual("42", script) |
| 141 | + |
| 142 | + def test_read_file_content(self): |
| 143 | + with named_file("Content", suffix=".42") as fn: |
| 144 | + # valid file opens |
| 145 | + content = read_file_content(fn) |
| 146 | + self.assertEqual("Content", content) |
| 147 | + # invalid utf-8 file does not |
| 148 | + with open(fn, "wb") as f: |
| 149 | + f.write(b"\xc3\x28") |
| 150 | + content = read_file_content(fn) |
| 151 | + self.assertIsNone(content) |
| 152 | + |
| 153 | + def test_script_insert_mime_text(self): |
| 154 | + current = self.widget.text.toPlainText() |
| 155 | + insert = "test\n" |
| 156 | + cursor = self.widget.text.cursor() |
| 157 | + cursor.setPos(0, 0) |
| 158 | + mime = QMimeData() |
| 159 | + mime.setText(insert) |
| 160 | + self.widget.text.insertFromMimeData(mime) |
| 161 | + self.assertEqual(insert + current, self.widget.text.toPlainText()) |
| 162 | + |
| 163 | + def test_script_insert_mime_file(self): |
| 164 | + with named_file("test", suffix=".42") as fn: |
| 165 | + previous = self.widget.text.toPlainText() |
| 166 | + mime = QMimeData() |
| 167 | + url = QUrl.fromLocalFile(fn) |
| 168 | + mime.setUrls([url]) |
| 169 | + self.widget.text.insertFromMimeData(mime) |
| 170 | + self.assertEqual("test", self.widget.text.toPlainText()) |
| 171 | + self.widget.text.undo() |
| 172 | + self.assertEqual(previous, self.widget.text.toPlainText()) |
| 173 | + |
| 174 | + def test_dragEnterEvent_accepts_text(self): |
| 175 | + with named_file("Content", suffix=".42") as fn: |
| 176 | + event = self._drag_enter_event(QUrl.fromLocalFile(fn)) |
| 177 | + self.widget.dragEnterEvent(event) |
| 178 | + self.assertTrue(event.isAccepted()) |
| 179 | + |
| 180 | + def test_dragEnterEvent_rejects_binary(self): |
| 181 | + with named_file("", suffix=".42") as fn: |
| 182 | + with open(fn, "wb") as f: |
| 183 | + f.write(b"\xc3\x28") |
| 184 | + event = self._drag_enter_event(QUrl.fromLocalFile(fn)) |
| 185 | + self.widget.dragEnterEvent(event) |
| 186 | + self.assertFalse(event.isAccepted()) |
| 187 | + |
| 188 | + def _drag_enter_event(self, url): |
| 189 | + # make sure data does not get garbage collected before it used |
| 190 | + self.event_data = data = QMimeData() |
| 191 | + data.setUrls([QUrl(url)]) |
| 192 | + return QDragEnterEvent( |
| 193 | + QPoint(0, 0), Qt.MoveAction, data, |
| 194 | + Qt.NoButton, Qt.NoModifier) |
| 195 | + |
| 196 | + def test_dropEvent_replaces_file(self): |
| 197 | + with named_file("test", suffix=".42") as fn: |
| 198 | + previous = self.widget.text.toPlainText() |
| 199 | + event = self._drop_event(QUrl.fromLocalFile(fn)) |
| 200 | + self.widget.dropEvent(event) |
| 201 | + self.assertEqual("test", self.widget.text.toPlainText()) |
| 202 | + self.widget.text.undo() |
| 203 | + self.assertEqual(previous, self.widget.text.toPlainText()) |
| 204 | + |
| 205 | + def _drop_event(self, url): |
| 206 | + # make sure data does not get garbage collected before it used |
| 207 | + self.event_data = data = QMimeData() |
| 208 | + data.setUrls([QUrl(url)]) |
| 209 | + |
| 210 | + return QDropEvent( |
| 211 | + QPoint(0, 0), Qt.MoveAction, data, |
| 212 | + Qt.NoButton, Qt.NoModifier, QDropEvent.Drop) |
0 commit comments