@@ -50,6 +50,13 @@ def check_tokenize(self, s, expected):
50
50
self .assertEqual (result ,
51
51
[" ENCODING 'utf-8' (0, 0) (0, 0)" ] +
52
52
expected .rstrip ().splitlines ())
53
+
54
+ def test_invalid_readline (self ):
55
+ def gen ():
56
+ yield "sdfosdg"
57
+ yield "sdfosdg"
58
+ with self .assertRaises (TypeError ):
59
+ list (tokenize (gen ().__next__ ))
53
60
54
61
def test_implicit_newline (self ):
55
62
# Make sure that the tokenizer puts in an implicit NEWLINE
@@ -1154,7 +1161,8 @@ class TestTokenizerAdheresToPep0263(TestCase):
1154
1161
1155
1162
def _testFile (self , filename ):
1156
1163
path = os .path .join (os .path .dirname (__file__ ), filename )
1157
- TestRoundtrip .check_roundtrip (self , open (path , 'rb' ))
1164
+ with open (path , 'rb' ) as f :
1165
+ TestRoundtrip .check_roundtrip (self , f )
1158
1166
1159
1167
def test_utf8_coding_cookie_and_no_utf8_bom (self ):
1160
1168
f = 'tokenize_tests-utf8-coding-cookie-and-no-utf8-bom-sig.txt'
@@ -1827,9 +1835,10 @@ class CTokenizeTest(TestCase):
1827
1835
def check_tokenize (self , s , expected ):
1828
1836
# Format the tokens in s in a table format.
1829
1837
# The ENDMARKER and final NEWLINE are omitted.
1838
+ f = BytesIO (s .encode ())
1830
1839
with self .subTest (source = s ):
1831
1840
result = stringify_tokens_from_source (
1832
- _generate_tokens_from_c_tokenizer (s ), s
1841
+ _generate_tokens_from_c_tokenizer (f . readline ), s
1833
1842
)
1834
1843
self .assertEqual (result , expected .rstrip ().splitlines ())
1835
1844
@@ -2668,43 +2677,44 @@ def test_unicode(self):
2668
2677
2669
2678
def test_invalid_syntax (self ):
2670
2679
def get_tokens (string ):
2671
- return list (_generate_tokens_from_c_tokenizer (string ))
2672
-
2673
- self .assertRaises (SyntaxError , get_tokens , "(1+2]" )
2674
- self .assertRaises (SyntaxError , get_tokens , "(1+2}" )
2675
- self .assertRaises (SyntaxError , get_tokens , "{1+2]" )
2676
-
2677
- self .assertRaises (SyntaxError , get_tokens , "1_" )
2678
- self .assertRaises (SyntaxError , get_tokens , "1.2_" )
2679
- self .assertRaises (SyntaxError , get_tokens , "1e2_" )
2680
- self .assertRaises (SyntaxError , get_tokens , "1e+" )
2681
-
2682
- self .assertRaises (SyntaxError , get_tokens , "\xa0 " )
2683
- self .assertRaises (SyntaxError , get_tokens , "€" )
2684
-
2685
- self .assertRaises (SyntaxError , get_tokens , "0b12" )
2686
- self .assertRaises (SyntaxError , get_tokens , "0b1_2" )
2687
- self .assertRaises (SyntaxError , get_tokens , "0b2" )
2688
- self .assertRaises (SyntaxError , get_tokens , "0b1_" )
2689
- self .assertRaises (SyntaxError , get_tokens , "0b" )
2690
- self .assertRaises (SyntaxError , get_tokens , "0o18" )
2691
- self .assertRaises (SyntaxError , get_tokens , "0o1_8" )
2692
- self .assertRaises (SyntaxError , get_tokens , "0o8" )
2693
- self .assertRaises (SyntaxError , get_tokens , "0o1_" )
2694
- self .assertRaises (SyntaxError , get_tokens , "0o" )
2695
- self .assertRaises (SyntaxError , get_tokens , "0x1_" )
2696
- self .assertRaises (SyntaxError , get_tokens , "0x" )
2697
- self .assertRaises (SyntaxError , get_tokens , "1_" )
2698
- self .assertRaises (SyntaxError , get_tokens , "012" )
2699
- self .assertRaises (SyntaxError , get_tokens , "1.2_" )
2700
- self .assertRaises (SyntaxError , get_tokens , "1e2_" )
2701
- self .assertRaises (SyntaxError , get_tokens , "1e+" )
2702
-
2703
- self .assertRaises (SyntaxError , get_tokens , "'sdfsdf" )
2704
- self .assertRaises (SyntaxError , get_tokens , "'''sdfsdf''" )
2705
-
2706
- self .assertRaises (SyntaxError , get_tokens , "(" * 1000 + "a" + ")" * 1000 )
2707
- self .assertRaises (SyntaxError , get_tokens , "]" )
2680
+ the_string = BytesIO (string .encode ())
2681
+ return list (_generate_tokens_from_c_tokenizer (the_string .readline ))
2682
+
2683
+ for case in [
2684
+ "(1+2]" ,
2685
+ "(1+2}" ,
2686
+ "{1+2]" ,
2687
+ "1_" ,
2688
+ "1.2_" ,
2689
+ "1e2_" ,
2690
+ "1e+" ,
2691
+
2692
+ "\xa0 " ,
2693
+ "€" ,
2694
+ "0b12" ,
2695
+ "0b1_2" ,
2696
+ "0b2" ,
2697
+ "0b1_" ,
2698
+ "0b" ,
2699
+ "0o18" ,
2700
+ "0o1_8" ,
2701
+ "0o8" ,
2702
+ "0o1_" ,
2703
+ "0o" ,
2704
+ "0x1_" ,
2705
+ "0x" ,
2706
+ "1_" ,
2707
+ "012" ,
2708
+ "1.2_" ,
2709
+ "1e2_" ,
2710
+ "1e+" ,
2711
+ "'sdfsdf" ,
2712
+ "'''sdfsdf''" ,
2713
+ "(" * 1000 + "a" + ")" * 1000 ,
2714
+ "]" ,
2715
+ ]:
2716
+ with self .subTest (case = case ):
2717
+ self .assertRaises (SyntaxError , get_tokens , case )
2708
2718
2709
2719
def test_max_indent (self ):
2710
2720
MAXINDENT = 100
@@ -2715,20 +2725,24 @@ def generate_source(indents):
2715
2725
return source
2716
2726
2717
2727
valid = generate_source (MAXINDENT - 1 )
2718
- tokens = list (_generate_tokens_from_c_tokenizer (valid ))
2728
+ the_input = BytesIO (valid .encode ())
2729
+ tokens = list (_generate_tokens_from_c_tokenizer (the_input .readline ))
2719
2730
self .assertEqual (tokens [- 2 ].type , DEDENT )
2720
2731
self .assertEqual (tokens [- 1 ].type , ENDMARKER )
2721
2732
compile (valid , "<string>" , "exec" )
2722
2733
2723
2734
invalid = generate_source (MAXINDENT )
2724
- self .assertRaises (SyntaxError , lambda : list (_generate_tokens_from_c_tokenizer (invalid )))
2735
+ the_input = BytesIO (invalid .encode ())
2736
+ self .assertRaises (SyntaxError , lambda : list (_generate_tokens_from_c_tokenizer (the_input .readline )))
2725
2737
self .assertRaises (
2726
2738
IndentationError , compile , invalid , "<string>" , "exec"
2727
2739
)
2728
2740
2729
2741
def test_continuation_lines_indentation (self ):
2730
2742
def get_tokens (string ):
2731
- return [(kind , string ) for (kind , string , * _ ) in _generate_tokens_from_c_tokenizer (string )]
2743
+ the_string = BytesIO (string .encode ())
2744
+ return [(kind , string ) for (kind , string , * _ )
2745
+ in _generate_tokens_from_c_tokenizer (the_string .readline )]
2732
2746
2733
2747
code = dedent ("""
2734
2748
def fib(n):
0 commit comments