Skip to content

Commit aa1a5ca

Browse files
committed
Add tests for converting to strict unicode
1 parent 34f5119 commit aa1a5ca

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

Lib/test/test_code.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,53 @@ def test_code_equal_with_instrumentation(self):
525525
self.assertNotEqual(code1, code2)
526526
sys.settrace(None)
527527

528+
@cpython_only
529+
def test_names_strict_string(self):
530+
class StrSubclass(str): pass
531+
532+
def f():
533+
return name1 + name2
534+
535+
code1 = f.__code__
536+
code2 = code1.replace(co_names=tuple(
537+
StrSubclass(name) for name in code1.co_names
538+
))
539+
self.assertEqual(code1.co_names, ('name1' ,'name2'))
540+
self.assertEqual(code2.co_names, ('name1' ,'name2'))
541+
for name in code2.co_names:
542+
with self.subTest(name=name):
543+
self.assertIs(type(name), str)
544+
545+
@cpython_only
546+
def test_varnames_strict_string(self):
547+
class StrSubclass(str): pass
548+
549+
def f():
550+
name1 = name2 = call()
551+
return name1 + name2
552+
553+
code1 = f.__code__
554+
code2 = code1.replace(co_varnames=tuple(
555+
StrSubclass(name) for name in code1.co_varnames
556+
))
557+
self.assertEqual(code1.co_varnames, ('name1' ,'name2'))
558+
self.assertEqual(code2.co_varnames, ('name1' ,'name2'))
559+
for name in code2.co_varnames:
560+
with self.subTest(name=name):
561+
self.assertIs(type(name), str)
562+
563+
@cpython_only
564+
def test_names_nonstring(self):
565+
def f():
566+
var1, var2 = name1, name2
567+
return var1 + var2
568+
569+
code = f.__code__
570+
571+
with self.assertRaises(TypeError):
572+
code.replace(co_names=(1, 2))
573+
with self.assertRaises(TypeError):
574+
code.replace(co_varnames=(1, 2))
528575

529576
def isinterned(s):
530577
return s is sys.intern(('_' + s + '_')[1:-1])

0 commit comments

Comments
 (0)