@@ -28,7 +28,7 @@ def testBaseClass(self, qapp):
2828 '''Assure that SlicerModel contains pure virtuals'''
2929 model = SlicerModel ()
3030 with pytest .raises (NotImplementedError ):
31- model .setParams ()
31+ model .setParams ({} )
3232 with pytest .raises (NotImplementedError ):
3333 model .setModelFromParams ()
3434
@@ -64,3 +64,48 @@ def testSetParamsFromModel(self, model):
6464 # Check the new model. The update should be automatic
6565 assert model .model ().rowCount () == 3
6666 assert model .model ().columnCount () == 2
67+
68+ def testSetParamsFromModel_restores_update_model_on_exception (self , qapp ):
69+ """update_model should be restored even if setParams raises."""
70+ class FailingModel (SlicerModel ):
71+ params = {"a" : 1 }
72+
73+ def __init__ (self ):
74+ SlicerModel .__init__ (self )
75+
76+ def getParams (self ):
77+ return self .params
78+
79+ def setParams (self , par ):
80+ raise RuntimeError ("boom" )
81+
82+ model = FailingModel ()
83+ model .setModelFromParams ()
84+
85+ with pytest .raises (RuntimeError ):
86+ model .setParamsFromModel ()
87+
88+ assert model .update_model is True
89+
90+ def testSetParamsFromModelItem_restores_update_model_on_exception (self , qapp ):
91+ """update_model should be restored for single-item updates too."""
92+ class FailingModel (SlicerModel ):
93+ params = {"a" : 1 }
94+
95+ def __init__ (self ):
96+ SlicerModel .__init__ (self )
97+
98+ def getParams (self ):
99+ return self .params
100+
101+ def setParams (self , par ):
102+ raise RuntimeError ("boom" )
103+
104+ model = FailingModel ()
105+ model .setModelFromParams ()
106+ item = model .model ().item (0 , 1 )
107+
108+ with pytest .raises (RuntimeError ):
109+ model .setParamsFromModelItem (item )
110+
111+ assert model .update_model is True
0 commit comments