@@ -67,6 +67,25 @@ def test_list_builtin_with_filter(filter, expected):
67
67
assert {* backends } == {* expected }
68
68
69
69
70
+ def test_list_gui_frameworks ():
71
+ frameworks = backend_registry .list_gui_frameworks ()
72
+ assert not has_duplicates (frameworks )
73
+ # Compare using sets as order is not important
74
+ assert {* frameworks } == {
75
+ "gtk3" , "gtk4" , "osx" , "qt" , "qt5" , "qt6" , "tk" , "wx" ,
76
+ }
77
+
78
+
79
+ @pytest .mark .parametrize ("backend, is_valid" , [
80
+ ("agg" , True ),
81
+ ("QtAgg" , True ),
82
+ ("module://anything" , True ),
83
+ ("made-up-name" , False ),
84
+ ])
85
+ def test_is_valid_backend (backend , is_valid ):
86
+ assert backend_registry .is_valid_backend (backend ) == is_valid
87
+
88
+
70
89
def test_deprecated_rcsetup_attributes ():
71
90
match = "was deprecated in Matplotlib 3.9"
72
91
with pytest .warns (mpl .MatplotlibDeprecationWarning , match = match ):
@@ -119,3 +138,23 @@ def test_load_entry_points_only_if_needed(clear_backend_registry, backend):
119
138
assert not backend_registry ._loaded_entry_points
120
139
backend_registry .list_all () # Force load of entry points
121
140
assert backend_registry ._loaded_entry_points
141
+
142
+
143
+ @pytest .mark .parametrize (
144
+ 'gui_or_backend, expected_backend, expected_gui' ,
145
+ [
146
+ ('agg' , 'agg' , None ),
147
+ ('qt' , 'qtagg' , 'qt' ),
148
+ ('TkCairo' , 'tkcairo' , 'tk' ),
149
+ ]
150
+ )
151
+ def test_resolve_gui_or_backend (gui_or_backend , expected_backend , expected_gui ):
152
+ backend , gui = backend_registry .resolve_gui_or_backend (gui_or_backend )
153
+ assert backend == expected_backend
154
+ assert gui == expected_gui
155
+
156
+
157
+ def test_resolve_gui_or_backend_invalid ():
158
+ match = "is not a recognised GUI loop or backend name"
159
+ with pytest .raises (RuntimeError , match = match ):
160
+ backend_registry .resolve_gui_or_backend ('no-such-name' )
0 commit comments