mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	 c3647ac93e
			
		
	
	
		c3647ac93e
		
	
	
	
	
		
			
			conversion using the proper magic slot (e.g., __int__()). Also move conversion code out of PyNumber_*() functions in the C API into the nb_* function. Applied patch #1109424. Thanks Walter Doewald.
		
			
				
	
	
		
			89 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import unittest
 | |
| from test import test_support, string_tests
 | |
| 
 | |
| 
 | |
| class StrTest(
 | |
|     string_tests.CommonTest,
 | |
|     string_tests.MixinStrUnicodeUserStringTest,
 | |
|     string_tests.MixinStrUserStringTest,
 | |
|     string_tests.MixinStrUnicodeTest,
 | |
|     ):
 | |
| 
 | |
|     type2test = str
 | |
| 
 | |
|     # We don't need to propagate to str
 | |
|     def fixtype(self, obj):
 | |
|         return obj
 | |
| 
 | |
|     def test_formatting(self):
 | |
|         string_tests.MixinStrUnicodeUserStringTest.test_formatting(self)
 | |
|         self.assertRaises(OverflowError, '%c'.__mod__, 0x1234)
 | |
| 
 | |
|     def test_conversion(self):
 | |
|         # Make sure __str__() behaves properly
 | |
|         class Foo0:
 | |
|             def __unicode__(self):
 | |
|                 return u"foo"
 | |
| 
 | |
|         class Foo1:
 | |
|             def __str__(self):
 | |
|                 return "foo"
 | |
| 
 | |
|         class Foo2(object):
 | |
|             def __str__(self):
 | |
|                 return "foo"
 | |
| 
 | |
|         class Foo3(object):
 | |
|             def __str__(self):
 | |
|                 return u"foo"
 | |
| 
 | |
|         class Foo4(unicode):
 | |
|             def __str__(self):
 | |
|                 return u"foo"
 | |
| 
 | |
|         class Foo5(str):
 | |
|             def __str__(self):
 | |
|                 return u"foo"
 | |
| 
 | |
|         class Foo6(str):
 | |
|             def __str__(self):
 | |
|                 return "foos"
 | |
| 
 | |
|             def __unicode__(self):
 | |
|                 return u"foou"
 | |
| 
 | |
|         class Foo7(unicode):
 | |
|             def __str__(self):
 | |
|                 return "foos"
 | |
|             def __unicode__(self):
 | |
|                 return u"foou"
 | |
| 
 | |
|         class Foo8(str):
 | |
|             def __new__(cls, content=""):
 | |
|                 return str.__new__(cls, 2*content)
 | |
|             def __str__(self):
 | |
|                 return self
 | |
| 
 | |
|         class Foo9(str):
 | |
|             def __str__(self):
 | |
|                 return "string"
 | |
|             def __unicode__(self):
 | |
|                 return "not unicode"
 | |
| 
 | |
|         self.assert_(str(Foo0()).startswith("<")) # this is different from __unicode__
 | |
|         self.assertEqual(str(Foo1()), "foo")
 | |
|         self.assertEqual(str(Foo2()), "foo")
 | |
|         self.assertEqual(str(Foo3()), "foo")
 | |
|         self.assertEqual(str(Foo4("bar")), "foo")
 | |
|         self.assertEqual(str(Foo5("bar")), "foo")
 | |
|         self.assertEqual(str(Foo6("bar")), "foos")
 | |
|         self.assertEqual(str(Foo7("bar")), "foos")
 | |
|         self.assertEqual(str(Foo8("foo")), "foofoo")
 | |
|         self.assertEqual(str(Foo9("foo")), "string")
 | |
|         self.assertEqual(unicode(Foo9("foo")), u"not unicode")
 | |
| 
 | |
| def test_main():
 | |
|     test_support.run_unittest(StrTest)
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     test_main()
 |