1
- from AnyQt .QtCore import QItemSelection , QItemSelectionModel
2
- from typing import Set
3
-
4
1
import os
2
+ from typing import Set
5
3
import unittest
4
+ from unittest .mock import Mock
5
+
6
6
import numpy as np
7
7
from numpy .testing import assert_array_equal
8
8
9
+ from AnyQt .QtCore import QItemSelection , QItemSelectionModel
10
+
9
11
from Orange .data import (
10
12
Table ,
11
13
StringVariable ,
@@ -106,7 +108,7 @@ def test_selection(self):
106
108
d = self .image_data
107
109
str_var .attributes ["origin" ] = d .domain ["Image" ].attributes ["origin" ]
108
110
new_data = Table (
109
- Domain ([], metas = (str_var ,) + d .domain .metas [1 : ]),
111
+ Domain ([], metas = (str_var ,) + d .domain .metas [: - 1 ]),
110
112
np .empty ((len (d ), 0 )),
111
113
metas = d .metas ,
112
114
)
@@ -132,44 +134,98 @@ def test_selection_schema(self):
132
134
assert_array_equal (self .image_data [2 :3 ].metas , output .metas )
133
135
134
136
def test_settings_schema (self ):
135
- data = Table ("zoo" )
136
- data = data .transform (
137
- Domain ([], metas = data .domain .metas + data .domain .attributes )
138
- )
137
+ domain = Domain ([], None , [StringVariable (n ) for n in "abc" ])
138
+ data = Table .from_list (domain , [list ("abc" )] * 3 )
139
139
self .send_signal (self .widget .Inputs .data , data )
140
140
141
- simulate .combobox_activate_item (self .widget .controls .image_attr , "toothed " )
142
- simulate .combobox_activate_item (self .widget .controls .title_attr , "toothed " )
141
+ simulate .combobox_activate_item (self .widget .controls .image_attr , "b " )
142
+ simulate .combobox_activate_item (self .widget .controls .title_attr , "c " )
143
143
144
144
settings = self .widget .settingsHandler .pack_data (self .widget )
145
145
widget = self .create_widget (OWImageViewer , stored_settings = settings )
146
146
self .send_signal (widget .Inputs .data , data , widget = widget )
147
147
148
- self .assertEqual (data .domain ["toothed " ], self .widget .image_attr )
149
- self .assertEqual (data .domain ["toothed " ], self .widget .title_attr )
148
+ self .assertEqual (data .domain ["b " ], self .widget .image_attr )
149
+ self .assertEqual (data .domain ["c " ], self .widget .title_attr )
150
150
151
151
def test_set_attributes (self ):
152
152
data = self .image_data
153
153
# by default - image attribute is one with type image
154
154
self .send_signal (self .widget .Inputs .data , data )
155
155
self .assertEqual (data .domain ["Image" ], self .widget .image_attr )
156
- self .assertEqual (data .domain ["b" ], self .widget .title_attr )
156
+ self .assertEqual (data .domain ["Image" ], self .widget .title_attr )
157
+ self .__select_images ({"afternoon-4175917_640.jpg" , "atomium-4179270_640.jpg" })
158
+ self .assertIsNotNone (self .get_output (self .widget .Outputs .selected_data ))
159
+ self .assertIsNotNone (self .get_output (self .widget .Outputs .data ))
157
160
158
- # none of attributes have type image select first non-continuous from meta
161
+ # no suitable attributes
159
162
data = data .transform (
160
163
Domain (data .domain .attributes , metas = data .domain .metas [:2 ])
161
164
)
162
165
self .send_signal (self .widget .Inputs .data , data )
163
- self .assertEqual (data .domain ["c" ], self .widget .image_attr )
164
- self .assertEqual (data .domain ["b" ], self .widget .title_attr )
166
+ self .assertEqual (None , self .widget .image_attr )
167
+ self .assertEqual (None , self .widget .title_attr )
168
+ self .assertTrue (self .widget .Error .no_image_attr .is_shown ())
169
+ self .assertIsNone (self .get_output (self .widget .Outputs .selected_data ))
170
+ self .assertIsNone (self .get_output (self .widget .Outputs .data ))
165
171
166
- # no suitable attributes - image_attr is None
167
- data = data .transform (
168
- Domain (data .domain .attributes , metas = data .domain .metas [:1 ])
169
- )
170
- self .send_signal (self .widget .Inputs .data , data )
171
- self .assertIsNone (self .widget .image_attr )
172
- self .assertEqual (data .domain ["b" ], self .widget .title_attr )
172
+ self .send_signal (self .widget .Inputs .data , None )
173
+ self .assertFalse (self .widget .Error .no_image_attr .is_shown ())
174
+
175
+ def test_default_attr_priority (self ):
176
+ w = self .widget
177
+ w .data = Mock ()
178
+ w .data .domain .class_var = None
179
+
180
+ attrs = [
181
+ DiscreteVariable ("a" , values = ["a" , "b" , "c" ]),
182
+ ContinuousVariable ("b" )
183
+ ]
184
+ class_var = DiscreteVariable ("c" , values = ["a" , "b" , "c" ])
185
+ metas = [
186
+ ContinuousVariable ("d" ),
187
+ DiscreteVariable ("e" , values = ["a" , "b" , "c" ])
188
+ ] + [StringVariable (f"s{ i } " ) for i in range (4 )]
189
+ * _ , s0 , s1 , s2 , s3 = metas
190
+ s1 .attributes = s2 .attributes = {"type" : "image" }
191
+
192
+ domain = Domain (attrs , class_var , metas )
193
+ w .image_model .set_domain (domain )
194
+ w .title_model .set_domain (domain )
195
+ w ._propose_image_and_title_attr ()
196
+ self .assertIs (s1 , w .image_attr )
197
+ self .assertIs (s0 , w .title_attr )
198
+
199
+ w .data .domain .class_var = class_var
200
+ w .image_attr = w .title_attr = None
201
+ w ._propose_image_and_title_attr ()
202
+ self .assertIs (s1 , w .image_attr )
203
+ self .assertIs (class_var , w .title_attr )
204
+
205
+ w .data .domain .class_var = None
206
+ domain = Domain (attrs , class_var , metas [3 :])
207
+ w .image_model .set_domain (domain )
208
+ w .title_model .set_domain (domain )
209
+ w .image_attr = w .title_attr = None
210
+ w ._propose_image_and_title_attr ()
211
+ self .assertIs (s1 , w .image_attr )
212
+ self .assertIs (s3 , w .title_attr )
213
+
214
+ domain = Domain (attrs , class_var , metas [3 :- 1 ])
215
+ w .image_model .set_domain (domain )
216
+ w .title_model .set_domain (domain )
217
+ w .image_attr = w .title_attr = None
218
+ w ._propose_image_and_title_attr ()
219
+ self .assertIs (s1 , w .image_attr )
220
+ self .assertIs (s2 , w .title_attr )
221
+
222
+ domain = Domain (attrs , class_var , metas [3 :4 ])
223
+ w .image_model .set_domain (domain )
224
+ w .title_model .set_domain (domain )
225
+ w .image_attr = w .title_attr = None
226
+ w ._propose_image_and_title_attr ()
227
+ self .assertIs (s1 , w .image_attr )
228
+ self .assertIs (s1 , w .title_attr )
173
229
174
230
175
231
if __name__ == "__main__" :
0 commit comments