@@ -400,16 +400,14 @@ def test_weakref(self):
400400 # self.assertTrue(c.val() is obj)
401401 self .assertIsNone (c .val ())
402402
403- # This test will make the Python environment unusable.
404- # Should perhaps forbid making the frame immutable.
405- # class TestStackCapture(unittest.TestCase):
406- # def test_stack_capture(self):
407- # import sys
408- # x = {}
409- # x["frame"] = sys._getframe()
410- # freeze(x)
411- # self.assertTrue(isimmutable(x))
412- # self.assertTrue(isimmutable(x["frame"]))
403+ class TestStackCapture (unittest .TestCase ):
404+ def test_stack_capture (self ):
405+ import sys
406+ x = {}
407+ x ["frame" ] = sys ._getframe ()
408+ freeze (x )
409+ self .assertTrue (isimmutable (x ))
410+ self .assertTrue (isimmutable (x ["frame" ]))
413411
414412global_test_dict = 0
415413class TestGlobalDictMutation (unittest .TestCase ):
@@ -426,5 +424,39 @@ def test_global_dict_mutation(self):
426424 self .assertRaises (NotWriteableError , f1 )
427425
428426
427+ class TestSubclass (unittest .TestCase ):
428+ def test_subclass (self ):
429+ class C :
430+ def __init__ (self , val ):
431+ self .val = val
432+
433+ def a (self ):
434+ return self .val
435+
436+ def b (self , val ):
437+ self .val = val
438+
439+ c_obj = C (1 )
440+ freeze (c_obj )
441+ self .assertTrue (isimmutable (c_obj ))
442+ self .assertTrue (isimmutable (C ))
443+ class D (C ):
444+ def __init__ (self , val ):
445+ super ().__init__ (val )
446+ self .val2 = val * 2
447+
448+ def b (self ):
449+ return self .val2
450+
451+ def c (self , val ):
452+ self .val = val
453+
454+ d_obj = D (1 )
455+ self .assertEqual (d_obj .a (), 1 )
456+ self .assertEqual (d_obj .b (), 2 )
457+ self .assertTrue (isinstance (d_obj , C ))
458+ self .assertTrue (issubclass (D , C ))
459+
460+
429461if __name__ == '__main__' :
430462 unittest .main ()
0 commit comments