|
567 | 567 |
|
568 | 568 | from test import support |
569 | 569 | from tokenize import (tokenize, _tokenize, untokenize, NUMBER, NAME, OP, |
570 | | - STRING, ENDMARKER, tok_name, detect_encoding, |
| 570 | + STRING, ENDMARKER, ENCODING, tok_name, detect_encoding, |
571 | 571 | open as tokenize_open) |
572 | 572 | from io import BytesIO |
573 | 573 | from unittest import TestCase |
574 | 574 | import os, sys, glob |
| 575 | +import token |
575 | 576 |
|
576 | 577 | def dump_tokens(s): |
577 | 578 | """Print out the tokens in s in a table format. |
@@ -922,6 +923,78 @@ def mock_readline(): |
922 | 923 |
|
923 | 924 | self.assertTrue(encoding_used, encoding) |
924 | 925 |
|
| 926 | + def assertExactTypeEqual(self, opstr, *optypes): |
| 927 | + tokens = list(tokenize(BytesIO(opstr.encode('utf-8')).readline)) |
| 928 | + num_optypes = len(optypes) |
| 929 | + self.assertEqual(len(tokens), 2 + num_optypes) |
| 930 | + self.assertEqual(token.tok_name[tokens[0].exact_type], |
| 931 | + token.tok_name[ENCODING]) |
| 932 | + for i in range(num_optypes): |
| 933 | + self.assertEqual(token.tok_name[tokens[i + 1].exact_type], |
| 934 | + token.tok_name[optypes[i]]) |
| 935 | + self.assertEqual(token.tok_name[tokens[1 + num_optypes].exact_type], |
| 936 | + token.tok_name[token.ENDMARKER]) |
| 937 | + |
| 938 | + def test_exact_type(self): |
| 939 | + self.assertExactTypeEqual('()', token.LPAR, token.RPAR) |
| 940 | + self.assertExactTypeEqual('[]', token.LSQB, token.RSQB) |
| 941 | + self.assertExactTypeEqual(':', token.COLON) |
| 942 | + self.assertExactTypeEqual(',', token.COMMA) |
| 943 | + self.assertExactTypeEqual(';', token.SEMI) |
| 944 | + self.assertExactTypeEqual('+', token.PLUS) |
| 945 | + self.assertExactTypeEqual('-', token.MINUS) |
| 946 | + self.assertExactTypeEqual('*', token.STAR) |
| 947 | + self.assertExactTypeEqual('/', token.SLASH) |
| 948 | + self.assertExactTypeEqual('|', token.VBAR) |
| 949 | + self.assertExactTypeEqual('&', token.AMPER) |
| 950 | + self.assertExactTypeEqual('<', token.LESS) |
| 951 | + self.assertExactTypeEqual('>', token.GREATER) |
| 952 | + self.assertExactTypeEqual('=', token.EQUAL) |
| 953 | + self.assertExactTypeEqual('.', token.DOT) |
| 954 | + self.assertExactTypeEqual('%', token.PERCENT) |
| 955 | + self.assertExactTypeEqual('{}', token.LBRACE, token.RBRACE) |
| 956 | + self.assertExactTypeEqual('==', token.EQEQUAL) |
| 957 | + self.assertExactTypeEqual('!=', token.NOTEQUAL) |
| 958 | + self.assertExactTypeEqual('<=', token.LESSEQUAL) |
| 959 | + self.assertExactTypeEqual('>=', token.GREATEREQUAL) |
| 960 | + self.assertExactTypeEqual('~', token.TILDE) |
| 961 | + self.assertExactTypeEqual('^', token.CIRCUMFLEX) |
| 962 | + self.assertExactTypeEqual('<<', token.LEFTSHIFT) |
| 963 | + self.assertExactTypeEqual('>>', token.RIGHTSHIFT) |
| 964 | + self.assertExactTypeEqual('**', token.DOUBLESTAR) |
| 965 | + self.assertExactTypeEqual('+=', token.PLUSEQUAL) |
| 966 | + self.assertExactTypeEqual('-=', token.MINEQUAL) |
| 967 | + self.assertExactTypeEqual('*=', token.STAREQUAL) |
| 968 | + self.assertExactTypeEqual('/=', token.SLASHEQUAL) |
| 969 | + self.assertExactTypeEqual('%=', token.PERCENTEQUAL) |
| 970 | + self.assertExactTypeEqual('&=', token.AMPEREQUAL) |
| 971 | + self.assertExactTypeEqual('|=', token.VBAREQUAL) |
| 972 | + self.assertExactTypeEqual('^=', token.CIRCUMFLEXEQUAL) |
| 973 | + self.assertExactTypeEqual('^=', token.CIRCUMFLEXEQUAL) |
| 974 | + self.assertExactTypeEqual('<<=', token.LEFTSHIFTEQUAL) |
| 975 | + self.assertExactTypeEqual('>>=', token.RIGHTSHIFTEQUAL) |
| 976 | + self.assertExactTypeEqual('**=', token.DOUBLESTAREQUAL) |
| 977 | + self.assertExactTypeEqual('//', token.DOUBLESLASH) |
| 978 | + self.assertExactTypeEqual('//=', token.DOUBLESLASHEQUAL) |
| 979 | + self.assertExactTypeEqual('@', token.AT) |
| 980 | + |
| 981 | + self.assertExactTypeEqual('a**2+b**2==c**2', |
| 982 | + NAME, token.DOUBLESTAR, NUMBER, |
| 983 | + token.PLUS, |
| 984 | + NAME, token.DOUBLESTAR, NUMBER, |
| 985 | + token.EQEQUAL, |
| 986 | + NAME, token.DOUBLESTAR, NUMBER) |
| 987 | + self.assertExactTypeEqual('{1, 2, 3}', |
| 988 | + token.LBRACE, |
| 989 | + token.NUMBER, token.COMMA, |
| 990 | + token.NUMBER, token.COMMA, |
| 991 | + token.NUMBER, |
| 992 | + token.RBRACE) |
| 993 | + self.assertExactTypeEqual('^(x & 0x1)', |
| 994 | + token.CIRCUMFLEX, |
| 995 | + token.LPAR, |
| 996 | + token.NAME, token.AMPER, token.NUMBER, |
| 997 | + token.RPAR) |
925 | 998 |
|
926 | 999 | __test__ = {"doctests" : doctests, 'decistmt': decistmt} |
927 | 1000 |
|
|
0 commit comments