]> granicus.if.org Git - python/commitdiff
#16152: merge with 3.2.
authorEzio Melotti <ezio.melotti@gmail.com>
Sat, 3 Nov 2012 15:46:51 +0000 (17:46 +0200)
committerEzio Melotti <ezio.melotti@gmail.com>
Sat, 3 Nov 2012 15:46:51 +0000 (17:46 +0200)
1  2 
Lib/test/test_tokenize.py
Lib/tokenize.py
Misc/ACKS
Misc/NEWS

index 213e9b46ce3a300c7c0ce859700e9b59067a7117,f9652ce7b27c0842369ea72516f80f13a8e6e2e6..b4a58f0db26de4c0d1bf7082ce65c90b29d0decb
@@@ -1036,79 -941,7 +1036,83 @@@ class TestTokenize(TestCase)
  
          self.assertTrue(encoding_used, encoding)
  
 +    def assertExactTypeEqual(self, opstr, *optypes):
 +        tokens = list(tokenize(BytesIO(opstr.encode('utf-8')).readline))
 +        num_optypes = len(optypes)
 +        self.assertEqual(len(tokens), 2 + num_optypes)
 +        self.assertEqual(token.tok_name[tokens[0].exact_type],
 +                         token.tok_name[ENCODING])
 +        for i in range(num_optypes):
 +            self.assertEqual(token.tok_name[tokens[i + 1].exact_type],
 +                             token.tok_name[optypes[i]])
 +        self.assertEqual(token.tok_name[tokens[1 + num_optypes].exact_type],
 +                         token.tok_name[token.ENDMARKER])
 +
 +    def test_exact_type(self):
 +        self.assertExactTypeEqual('()', token.LPAR, token.RPAR)
 +        self.assertExactTypeEqual('[]', token.LSQB, token.RSQB)
 +        self.assertExactTypeEqual(':', token.COLON)
 +        self.assertExactTypeEqual(',', token.COMMA)
 +        self.assertExactTypeEqual(';', token.SEMI)
 +        self.assertExactTypeEqual('+', token.PLUS)
 +        self.assertExactTypeEqual('-', token.MINUS)
 +        self.assertExactTypeEqual('*', token.STAR)
 +        self.assertExactTypeEqual('/', token.SLASH)
 +        self.assertExactTypeEqual('|', token.VBAR)
 +        self.assertExactTypeEqual('&', token.AMPER)
 +        self.assertExactTypeEqual('<', token.LESS)
 +        self.assertExactTypeEqual('>', token.GREATER)
 +        self.assertExactTypeEqual('=', token.EQUAL)
 +        self.assertExactTypeEqual('.', token.DOT)
 +        self.assertExactTypeEqual('%', token.PERCENT)
 +        self.assertExactTypeEqual('{}', token.LBRACE, token.RBRACE)
 +        self.assertExactTypeEqual('==', token.EQEQUAL)
 +        self.assertExactTypeEqual('!=', token.NOTEQUAL)
 +        self.assertExactTypeEqual('<=', token.LESSEQUAL)
 +        self.assertExactTypeEqual('>=', token.GREATEREQUAL)
 +        self.assertExactTypeEqual('~', token.TILDE)
 +        self.assertExactTypeEqual('^', token.CIRCUMFLEX)
 +        self.assertExactTypeEqual('<<', token.LEFTSHIFT)
 +        self.assertExactTypeEqual('>>', token.RIGHTSHIFT)
 +        self.assertExactTypeEqual('**', token.DOUBLESTAR)
 +        self.assertExactTypeEqual('+=', token.PLUSEQUAL)
 +        self.assertExactTypeEqual('-=', token.MINEQUAL)
 +        self.assertExactTypeEqual('*=', token.STAREQUAL)
 +        self.assertExactTypeEqual('/=', token.SLASHEQUAL)
 +        self.assertExactTypeEqual('%=', token.PERCENTEQUAL)
 +        self.assertExactTypeEqual('&=', token.AMPEREQUAL)
 +        self.assertExactTypeEqual('|=', token.VBAREQUAL)
 +        self.assertExactTypeEqual('^=', token.CIRCUMFLEXEQUAL)
 +        self.assertExactTypeEqual('^=', token.CIRCUMFLEXEQUAL)
 +        self.assertExactTypeEqual('<<=', token.LEFTSHIFTEQUAL)
 +        self.assertExactTypeEqual('>>=', token.RIGHTSHIFTEQUAL)
 +        self.assertExactTypeEqual('**=', token.DOUBLESTAREQUAL)
 +        self.assertExactTypeEqual('//', token.DOUBLESLASH)
 +        self.assertExactTypeEqual('//=', token.DOUBLESLASHEQUAL)
 +        self.assertExactTypeEqual('@', token.AT)
 +
 +        self.assertExactTypeEqual('a**2+b**2==c**2',
 +                                  NAME, token.DOUBLESTAR, NUMBER,
 +                                  token.PLUS,
 +                                  NAME, token.DOUBLESTAR, NUMBER,
 +                                  token.EQEQUAL,
 +                                  NAME, token.DOUBLESTAR, NUMBER)
 +        self.assertExactTypeEqual('{1, 2, 3}',
 +                                  token.LBRACE,
 +                                  token.NUMBER, token.COMMA,
 +                                  token.NUMBER, token.COMMA,
 +                                  token.NUMBER,
 +                                  token.RBRACE)
 +        self.assertExactTypeEqual('^(x & 0x1)',
 +                                  token.CIRCUMFLEX,
 +                                  token.LPAR,
 +                                  token.NAME, token.AMPER, token.NUMBER,
 +                                  token.RPAR)
 +
++    def test_pathological_trailing_whitespace(self):
++        # See http://bugs.python.org/issue16152
++        self.assertExactTypeEqual('@          ', token.AT)
  __test__ = {"doctests" : doctests, 'decistmt': decistmt}
  
  def test_main():
diff --cc Lib/tokenize.py
index d669412db3eb0c7eb89c316acec89d4acb541380,29c9e29b30f20f59956730e2ce931803d8778048..cbf91ef222c25fd684bce9b786ecc4f97132c07d
@@@ -158,11 -104,11 +158,11 @@@ PlainToken = group(Number, Funny, Strin
  Token = Ignore + PlainToken
  
  # First (or only) line of ' or " string.
 -ContStr = group(r"[bB]?[rR]?'[^\n'\\]*(?:\\.[^\n'\\]*)*" +
 +ContStr = group(StringPrefix + r"'[^\n'\\]*(?:\\.[^\n'\\]*)*" +
                  group("'", r'\\\r?\n'),
 -                r'[bB]?[rR]?"[^\n"\\]*(?:\\.[^\n"\\]*)*' +
 +                StringPrefix + r'"[^\n"\\]*(?:\\.[^\n"\\]*)*' +
                  group('"', r'\\\r?\n'))
- PseudoExtras = group(r'\\\r?\n', Comment, Triple)
+ PseudoExtras = group(r'\\\r?\n|\Z', Comment, Triple)
  PseudoToken = Whitespace + group(PseudoExtras, Number, Funny, ContStr, Name)
  
  def _compile(expr):
diff --cc Misc/ACKS
index d80ead042e18ad781d82c9726c4328afb27360b4,1095733839314e1f03bb10ed0b0d5e4001bfcfc1..ee1ce675c6a6920fecac136b63cae06ca4acda10
+++ b/Misc/ACKS
@@@ -75,12 -70,12 +75,13 @@@ Cesar Eduardo Barro
  Des Barry
  Ulf Bartelt
  Don Bashford
 +Pior Bastida
  Nick Bastin
+ Ned Batchelder
  Jeff Bauer
 -Mike Bayer
  Michael R Bax
  Anthony Baxter
 +Mike Bayer
  Samuel L. Bayer
  Donald Beaudry
  David Beazley
diff --cc Misc/NEWS
Simple merge