@@ -698,6 +698,36 @@ def testAssertIn(self):
698698 self .assertRaises (self .failureException , self .assertNotIn , 'cow' ,
699699 animals )
700700
701+ def testAssertDictContainsSubset (self ):
702+ with warnings .catch_warnings ():
703+ warnings .simplefilter ("ignore" , DeprecationWarning )
704+
705+ self .assertDictContainsSubset ({}, {})
706+ self .assertDictContainsSubset ({}, {'a' : 1 })
707+ self .assertDictContainsSubset ({'a' : 1 }, {'a' : 1 })
708+ self .assertDictContainsSubset ({'a' : 1 }, {'a' : 1 , 'b' : 2 })
709+ self .assertDictContainsSubset ({'a' : 1 , 'b' : 2 }, {'a' : 1 , 'b' : 2 })
710+
711+ with self .assertRaises (self .failureException ):
712+ self .assertDictContainsSubset ({1 : "one" }, {})
713+
714+ with self .assertRaises (self .failureException ):
715+ self .assertDictContainsSubset ({'a' : 2 }, {'a' : 1 })
716+
717+ with self .assertRaises (self .failureException ):
718+ self .assertDictContainsSubset ({'c' : 1 }, {'a' : 1 })
719+
720+ with self .assertRaises (self .failureException ):
721+ self .assertDictContainsSubset ({'a' : 1 , 'c' : 1 }, {'a' : 1 })
722+
723+ with self .assertRaises (self .failureException ):
724+ self .assertDictContainsSubset ({'a' : 1 , 'c' : 1 }, {'a' : 1 })
725+
726+ one = '' .join (chr (i ) for i in range (255 ))
727+ # this used to cause a UnicodeDecodeError constructing the failure msg
728+ with self .assertRaises (self .failureException ):
729+ self .assertDictContainsSubset ({'foo' : one }, {'foo' : '\uFFFD ' })
730+
701731 def testAssertEqual (self ):
702732 equal_pairs = [
703733 ((), ()),
@@ -1760,18 +1790,45 @@ def testAssertNoLogsYieldsNone(self):
17601790 pass
17611791 self .assertIsNone (value )
17621792
1763- def testDeprecatedFailMethods (self ):
1764- """Test that the deprecated fail* methods get removed in 3.11"""
1793+ def testDeprecatedMethodNames (self ):
1794+ """
1795+ Test that the deprecated methods raise a DeprecationWarning. See #9424.
1796+ """
1797+ old = (
1798+ (self .failIfEqual , (3 , 5 )),
1799+ (self .assertNotEquals , (3 , 5 )),
1800+ (self .failUnlessEqual , (3 , 3 )),
1801+ (self .assertEquals , (3 , 3 )),
1802+ (self .failUnlessAlmostEqual , (2.0 , 2.0 )),
1803+ (self .assertAlmostEquals , (2.0 , 2.0 )),
1804+ (self .failIfAlmostEqual , (3.0 , 5.0 )),
1805+ (self .assertNotAlmostEquals , (3.0 , 5.0 )),
1806+ (self .failUnless , (True ,)),
1807+ (self .assert_ , (True ,)),
1808+ (self .failUnlessRaises , (TypeError , lambda _ : 3.14 + 'spam' )),
1809+ (self .failIf , (False ,)),
1810+ (self .assertDictContainsSubset , (dict (a = 1 , b = 2 ), dict (a = 1 , b = 2 , c = 3 ))),
1811+ (self .assertRaisesRegexp , (KeyError , 'foo' , lambda : {}['foo' ])),
1812+ (self .assertRegexpMatches , ('bar' , 'bar' )),
1813+ )
1814+ for meth , args in old :
1815+ with self .assertWarns (DeprecationWarning ):
1816+ meth (* args )
1817+
1818+ # disable this test for now. When the version where the fail* methods will
1819+ # be removed is decided, re-enable it and update the version
1820+ def _testDeprecatedFailMethods (self ):
1821+ """Test that the deprecated fail* methods get removed in 3.x"""
1822+ if sys .version_info [:2 ] < (3 , 3 ):
1823+ return
17651824 deprecated_names = [
17661825 'failIfEqual' , 'failUnlessEqual' , 'failUnlessAlmostEqual' ,
17671826 'failIfAlmostEqual' , 'failUnless' , 'failUnlessRaises' , 'failIf' ,
1768- 'assertNotEquals' , 'assertEquals' , 'assertAlmostEquals' ,
1769- 'assertNotAlmostEquals' , 'assert_' , 'assertDictContainsSubset' ,
1770- 'assertRaisesRegexp' , 'assertRegexpMatches'
1827+ 'assertDictContainsSubset' ,
17711828 ]
17721829 for deprecated_name in deprecated_names :
17731830 with self .assertRaises (AttributeError ):
1774- getattr (self , deprecated_name )
1831+ getattr (self , deprecated_name ) # remove these in 3.x
17751832
17761833 def testDeepcopy (self ):
17771834 # Issue: 5660
0 commit comments