@@ -23,13 +23,28 @@ check_system_error(int failed, const char *message)
2323 return 0 ;
2424}
2525
26+ static int
27+ check_line_view (const _PyTok_SourceText * source , Py_ssize_t lineno ,
28+ const char * expected )
29+ {
30+ Py_ssize_t len ;
31+ const char * line = _PyTok_SourceLineView (source , lineno , & len );
32+ return check (len == (Py_ssize_t )strlen (expected ) &&
33+ memcmp (line , expected , len ) == 0 ,
34+ "wrong source line view" );
35+ }
36+
2637static PyObject *
2738test_tokenizer_source (PyObject * Py_UNUSED (module ),
2839 PyObject * Py_UNUSED (args ))
2940{
3041 _PyTok_SourceText source ;
3142 _PyTok_SourceInit (& source );
3243
44+ if (check_line_view (& source , 1 , "" ) < 0 ) {
45+ goto error ;
46+ }
47+
3348 if (check_system_error (
3449 _PyTok_SourceAppendLine (& source , "" , 0 , 0 ) < 0 ,
3550 "accepted empty source line" ) < 0 ||
@@ -51,6 +66,14 @@ test_tokenizer_source(PyObject *Py_UNUSED(module),
5166 goto error ;
5267 }
5368
69+ if (check_line_view (& source , PY_SSIZE_T_MIN , "alpha" ) < 0 ||
70+ check_line_view (& source , 1 , "alpha" ) < 0 ||
71+ check_line_view (& source , 2 , "\xce\xb2" ) < 0 ||
72+ check_line_view (& source , 3 , "" ) < 0 ||
73+ check_line_view (& source , PY_SSIZE_T_MAX , "" ) < 0 ) {
74+ goto error ;
75+ }
76+
5477 if (check (source .len == 9 &&
5578 memcmp (source .bytes , "alpha\n\xce\xb2\n" , 10 ) == 0 ,
5679 "wrong source contents" ) < 0 ) {
@@ -64,6 +87,10 @@ test_tokenizer_source(PyObject *Py_UNUSED(module),
6487 "appended after unterminated source line" ) < 0 ) {
6588 goto error ;
6689 }
90+ if (check_line_view (& source , 1 , "tail" ) < 0 ||
91+ check_line_view (& source , PY_SSIZE_T_MAX , "tail" ) < 0 ) {
92+ goto error ;
93+ }
6794
6895 _PyTok_SourceClear (& source );
6996 Py_RETURN_NONE ;
0 commit comments