mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 15:41:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			97 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
	
		
			2.7 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_iterators(self):
 | 
						|
        # Make sure str objects have an __iter__ method
 | 
						|
        it = "abc".__iter__()
 | 
						|
        self.assertEqual(next(it), "a")
 | 
						|
        self.assertEqual(next(it), "b")
 | 
						|
        self.assertEqual(next(it), "c")
 | 
						|
        self.assertRaises(StopIteration, next, it)
 | 
						|
 | 
						|
    def test_conversion(self):
 | 
						|
        # Make sure __str__() behaves properly
 | 
						|
        class Foo0:
 | 
						|
            def __unicode__(self):
 | 
						|
                return "foo"
 | 
						|
 | 
						|
        class Foo1:
 | 
						|
            def __str__(self):
 | 
						|
                return "foo"
 | 
						|
 | 
						|
        class Foo2(object):
 | 
						|
            def __str__(self):
 | 
						|
                return "foo"
 | 
						|
 | 
						|
        class Foo3(object):
 | 
						|
            def __str__(self):
 | 
						|
                return "foo"
 | 
						|
 | 
						|
        class Foo4(str):
 | 
						|
            def __str__(self):
 | 
						|
                return "foo"
 | 
						|
 | 
						|
        class Foo5(str):
 | 
						|
            def __str__(self):
 | 
						|
                return "foo"
 | 
						|
 | 
						|
        class Foo6(str):
 | 
						|
            def __str__(self):
 | 
						|
                return "foos"
 | 
						|
 | 
						|
            def __unicode__(self):
 | 
						|
                return "foou"
 | 
						|
 | 
						|
        class Foo7(str):
 | 
						|
            def __str__(self):
 | 
						|
                return "foos"
 | 
						|
            def __unicode__(self):
 | 
						|
                return "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(str(Foo9("foo")), "not unicode")
 | 
						|
 | 
						|
def test_main():
 | 
						|
    test_support.run_unittest(StrTest)
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    test_main()
 |