diff options
Diffstat (limited to 'tests/test_tokenize.py')
| -rw-r--r-- | tests/test_tokenize.py | 282 |
1 files changed, 143 insertions, 139 deletions
diff --git a/tests/test_tokenize.py b/tests/test_tokenize.py index 4234043..a2cc388 100644 --- a/tests/test_tokenize.py +++ b/tests/test_tokenize.py @@ -10,145 +10,149 @@ from sqlparse import sql, tokens as T from sqlparse.compat import StringIO -class TestTokenize(object): - def test_simple(self): - s = 'select * from foo;' - stream = lexer.tokenize(s) - assert isinstance(stream, types.GeneratorType) - tokens = list(stream) - assert len(tokens) == 8 - assert len(tokens[0]) == 2 - assert tokens[0] == (T.Keyword.DML, 'select') - assert tokens[-1] == (T.Punctuation, ';') - - def test_backticks(self): - s = '`foo`.`bar`' - tokens = list(lexer.tokenize(s)) - assert len(tokens) == 3 - assert tokens[0] == (T.Name, '`foo`') - - def test_linebreaks(self): # issue1 - s = 'foo\nbar\n' - tokens = lexer.tokenize(s) - assert ''.join(str(x[1]) for x in tokens) == s - s = 'foo\rbar\r' - tokens = lexer.tokenize(s) - assert ''.join(str(x[1]) for x in tokens) == s - s = 'foo\r\nbar\r\n' - tokens = lexer.tokenize(s) - assert ''.join(str(x[1]) for x in tokens) == s - s = 'foo\r\nbar\n' - tokens = lexer.tokenize(s) - assert ''.join(str(x[1]) for x in tokens) == s - - def test_inline_keywords(self): # issue 7 - s = "create created_foo" - tokens = list(lexer.tokenize(s)) - assert len(tokens) == 3 - assert tokens[0][0] == T.Keyword.DDL - assert tokens[2][0] == T.Name - assert tokens[2][1] == 'created_foo' - s = "enddate" - tokens = list(lexer.tokenize(s)) - assert len(tokens) == 1 - assert tokens[0][0] == T.Name - s = "join_col" - tokens = list(lexer.tokenize(s)) - assert len(tokens) == 1 - assert tokens[0][0] == T.Name - s = "left join_col" - tokens = list(lexer.tokenize(s)) - assert len(tokens) == 3 - assert tokens[2][0] == T.Name - assert tokens[2][1] == 'join_col' - - def test_negative_numbers(self): - s = "values(-1)" - tokens = list(lexer.tokenize(s)) - assert len(tokens) == 4 - assert tokens[2][0] == T.Number.Integer - assert tokens[2][1] == '-1' - - -class TestToken(object): - def test_str(self): - token = sql.Token(None, 'FoO') - assert str(token) == 'FoO' - - def test_repr(self): - token = sql.Token(T.Keyword, 'foo') - tst = "<Keyword 'foo' at 0x" - assert repr(token)[:len(tst)] == tst - token = sql.Token(T.Keyword, '1234567890') - tst = "<Keyword '123456...' at 0x" - assert repr(token)[:len(tst)] == tst - - def test_flatten(self): - token = sql.Token(T.Keyword, 'foo') - gen = token.flatten() - assert isinstance(gen, types.GeneratorType) - lgen = list(gen) - assert lgen == [token] - - -class TestTokenList(object): - def test_repr(self): - p = sqlparse.parse('foo, bar, baz')[0] - tst = "<IdentifierList 'foo, b...' at 0x" - assert repr(p.tokens[0])[:len(tst)] == tst - - def test_token_first(self): - p = sqlparse.parse(' select foo')[0] - first = p.token_first() - assert first.value == 'select' - assert p.token_first(skip_ws=False).value == ' ' - assert sql.TokenList([]).token_first() is None - - def test_token_matching(self): - t1 = sql.Token(T.Keyword, 'foo') - t2 = sql.Token(T.Punctuation, ',') - x = sql.TokenList([t1, t2]) - assert x.token_matching( - [lambda t: t.ttype is T.Keyword], 0) == t1 - assert x.token_matching( - [lambda t: t.ttype is T.Punctuation], 0) == t2 - assert x.token_matching( - [lambda t: t.ttype is T.Keyword], 1) is None - - -class TestStream(object): - def test_simple(self): - stream = StringIO("SELECT 1; SELECT 2;") - - tokens = lexer.tokenize(stream) - assert len(list(tokens)) == 9 - - stream.seek(0) - tokens = list(lexer.tokenize(stream)) - assert len(tokens) == 9 - - stream.seek(0) - tokens = list(lexer.tokenize(stream)) - assert len(tokens) == 9 - - def test_error(self): - stream = StringIO("FOOBAR{") - - tokens = list(lexer.tokenize(stream)) - assert len(tokens) == 2 - assert tokens[1][0] == T.Error - - -@pytest.mark.parametrize('expr', ['JOIN', - 'LEFT JOIN', - 'LEFT OUTER JOIN', - 'FULL OUTER JOIN', - 'NATURAL JOIN', - 'CROSS JOIN', - 'STRAIGHT JOIN', - 'INNER JOIN', - 'LEFT INNER JOIN', - ]) +def test_tokenize_simple(): + s = 'select * from foo;' + stream = lexer.tokenize(s) + assert isinstance(stream, types.GeneratorType) + tokens = list(stream) + assert len(tokens) == 8 + assert len(tokens[0]) == 2 + assert tokens[0] == (T.Keyword.DML, 'select') + assert tokens[-1] == (T.Punctuation, ';') + + +def test_tokenize_backticks(): + s = '`foo`.`bar`' + tokens = list(lexer.tokenize(s)) + assert len(tokens) == 3 + assert tokens[0] == (T.Name, '`foo`') + + +def test_tokenize_linebreaks(): + # issue1 + s = 'foo\nbar\n' + tokens = lexer.tokenize(s) + assert ''.join(str(x[1]) for x in tokens) == s + s = 'foo\rbar\r' + tokens = lexer.tokenize(s) + assert ''.join(str(x[1]) for x in tokens) == s + s = 'foo\r\nbar\r\n' + tokens = lexer.tokenize(s) + assert ''.join(str(x[1]) for x in tokens) == s + s = 'foo\r\nbar\n' + tokens = lexer.tokenize(s) + assert ''.join(str(x[1]) for x in tokens) == s + + +def test_tokenize_inline_keywords(): + # issue 7 + s = "create created_foo" + tokens = list(lexer.tokenize(s)) + assert len(tokens) == 3 + assert tokens[0][0] == T.Keyword.DDL + assert tokens[2][0] == T.Name + assert tokens[2][1] == 'created_foo' + s = "enddate" + tokens = list(lexer.tokenize(s)) + assert len(tokens) == 1 + assert tokens[0][0] == T.Name + s = "join_col" + tokens = list(lexer.tokenize(s)) + assert len(tokens) == 1 + assert tokens[0][0] == T.Name + s = "left join_col" + tokens = list(lexer.tokenize(s)) + assert len(tokens) == 3 + assert tokens[2][0] == T.Name + assert tokens[2][1] == 'join_col' + + +def test_tokenize_negative_numbers(): + s = "values(-1)" + tokens = list(lexer.tokenize(s)) + assert len(tokens) == 4 + assert tokens[2][0] == T.Number.Integer + assert tokens[2][1] == '-1' + + +def test_token_str(): + token = sql.Token(None, 'FoO') + assert str(token) == 'FoO' + + +def test_token_repr(): + token = sql.Token(T.Keyword, 'foo') + tst = "<Keyword 'foo' at 0x" + assert repr(token)[:len(tst)] == tst + token = sql.Token(T.Keyword, '1234567890') + tst = "<Keyword '123456...' at 0x" + assert repr(token)[:len(tst)] == tst + + +def test_token_flatten(): + token = sql.Token(T.Keyword, 'foo') + gen = token.flatten() + assert isinstance(gen, types.GeneratorType) + lgen = list(gen) + assert lgen == [token] + + +def test_tokenlist_repr(): + p = sqlparse.parse('foo, bar, baz')[0] + tst = "<IdentifierList 'foo, b...' at 0x" + assert repr(p.tokens[0])[:len(tst)] == tst + + +def test_tokenlist_first(): + p = sqlparse.parse(' select foo')[0] + first = p.token_first() + assert first.value == 'select' + assert p.token_first(skip_ws=False).value == ' ' + assert sql.TokenList([]).token_first() is None + + +def test_tokenlist_token_matching(): + t1 = sql.Token(T.Keyword, 'foo') + t2 = sql.Token(T.Punctuation, ',') + x = sql.TokenList([t1, t2]) + assert x.token_matching([lambda t: t.ttype is T.Keyword], 0) == t1 + assert x.token_matching([lambda t: t.ttype is T.Punctuation], 0) == t2 + assert x.token_matching([lambda t: t.ttype is T.Keyword], 1) is None + + +def test_stream_simple(): + stream = StringIO("SELECT 1; SELECT 2;") + + tokens = lexer.tokenize(stream) + assert len(list(tokens)) == 9 + + stream.seek(0) + tokens = list(lexer.tokenize(stream)) + assert len(tokens) == 9 + + stream.seek(0) + tokens = list(lexer.tokenize(stream)) + assert len(tokens) == 9 + + +def test_stream_error(): + stream = StringIO("FOOBAR{") + + tokens = list(lexer.tokenize(stream)) + assert len(tokens) == 2 + assert tokens[1][0] == T.Error + + +@pytest.mark.parametrize('expr', [ + 'JOIN', + 'LEFT JOIN', + 'LEFT OUTER JOIN', + 'FULL OUTER JOIN', + 'NATURAL JOIN', + 'CROSS JOIN', + 'STRAIGHT JOIN', + 'INNER JOIN', + 'LEFT INNER JOIN']) def test_parse_join(expr): p = sqlparse.parse('{0} foo'.format(expr))[0] assert len(p.tokens) == 3 |
