Skip to content

Commit d0b36bc

Browse files
committed
OWPythonScript: dropping scripts tests
1 parent dde1107 commit d0b36bc

File tree

2 files changed

+80
-5
lines changed

2 files changed

+80
-5
lines changed

Orange/widgets/data/owpythonscript.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,7 @@ def to_local_file(url):
4040
return OSX_NSURL_toLocalFile(url) or url.toLocalFile()
4141

4242

43-
def read_file_content(url, limit=None):
44-
filename = to_local_file(url)
43+
def read_file_content(filename, limit=None):
4544
try:
4645
with open(filename, encoding="utf-8", errors='strict') as f:
4746
text = f.read(limit)
@@ -164,7 +163,7 @@ def insertFromMimeData(self, source):
164163
super().insertFromMimeData(source)
165164

166165
def pasteFile(self, url):
167-
new = read_file_content(url)
166+
new = read_file_content(to_local_file(url))
168167
if new:
169168
# inserting text like this allows undo
170169
cursor = QTextCursor(self.document())
@@ -747,7 +746,7 @@ def dragEnterEvent(self, event):
747746
urls = event.mimeData().urls()
748747
if urls:
749748
# try reading the file as text
750-
c = read_file_content(urls[0], limit=1000)
749+
c = read_file_content(to_local_file(urls[0]), limit=1000)
751750
if c is not None:
752751
event.acceptProposedAction()
753752

Orange/widgets/data/tests/test_owpythonscript.py

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
# Test methods with long descriptive names can omit docstrings
22
# pylint: disable=missing-docstring
3+
from AnyQt.QtCore import QMimeData, QUrl, QPoint, Qt
4+
from AnyQt.QtGui import QDragEnterEvent, QDropEvent
5+
36
from Orange.data import Table
47
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
610
from Orange.widgets.tests.base import WidgetTest
711
from Orange.widgets.widget import OWWidget
812

@@ -134,3 +138,75 @@ def test_store_current_script(self):
134138
self.widget = self.create_widget(OWPythonScript, stored_settings=settings)
135139
script = self.widget.text.toPlainText()
136140
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

Comments
 (0)