@@ -225,6 +225,43 @@ def test_select_property_and_grid(self):
225
225
# Valid row/col and valid selector but the intersection is empty
226
226
self .assert_select_traces ([], selector = {"type" : "markers" }, row = 3 , col = 1 )
227
227
228
+ def test_select_with_function (self ):
229
+ def _check_trace_key (k , v ):
230
+ def f (t ):
231
+ try :
232
+ return t [k ] == v
233
+ except LookupError :
234
+ return False
235
+
236
+ return f
237
+
238
+ # (1, 1)
239
+ self .assert_select_traces (
240
+ [0 ], selector = _check_trace_key ("mode" , "markers" ), row = 1 , col = 1
241
+ )
242
+ self .assert_select_traces (
243
+ [1 ], selector = _check_trace_key ("type" , "bar" ), row = 1 , col = 1
244
+ )
245
+
246
+ # (2, 1)
247
+ self .assert_select_traces (
248
+ [2 , 9 ], selector = _check_trace_key ("mode" , "lines" ), row = 2 , col = 1
249
+ )
250
+
251
+ # (1, 2)
252
+ self .assert_select_traces (
253
+ [4 ], selector = _check_trace_key ("marker.color" , "green" ), row = 1 , col = 2
254
+ )
255
+
256
+ # Valid row/col and valid selector but the intersection is empty
257
+ self .assert_select_traces (
258
+ [], selector = _check_trace_key ("type" , "markers" ), row = 3 , col = 1
259
+ )
260
+
261
+ def test_select_traces_type_error (self ):
262
+ with self .assertRaises (TypeError ):
263
+ self .assert_select_traces ([0 ], selector = 123 , row = 1 , col = 1 )
264
+
228
265
def test_for_each_trace_lowercase_names (self ):
229
266
# Names are all uppercase to start
230
267
original_names = [t .name for t in self .fig .data ]
0 commit comments