Skip to content

Commit 310bbb5

Browse files
committed
Unit tests for Splitter
1 parent abead75 commit 310bbb5

3 files changed

Lines changed: 86 additions & 2 deletions

File tree

src/s2e2/splitter.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,13 @@ def __init__(self, type_by_value):
3636
3737
:param type_by_value:
3838
External function to get token's type by its value.
39+
40+
:raises:
41+
:class:`~TypeError` if the external function is empty.
3942
"""
43+
if not type_by_value:
44+
raise TypeError('External function to get token type by its value is None')
45+
4046
self.__inside_quotes = False
4147
self.__current_token = ''
4248
self.__tokens = []
@@ -52,6 +58,9 @@ def split_into_tokens(self, expression):
5258
5359
:returns:
5460
List of all found tokens (as :class:`~s2e2.TokenType`).
61+
62+
:raises:
63+
:class:`~s2e2.ExpressionError` if expression contains unknown symbol.
5564
"""
5665
for symbol in expression:
5766
self.__process_symbol(symbol)
@@ -65,6 +74,9 @@ def __process_symbol(self, symbol):
6574
6675
:param symbol:
6776
Symbol of the expression.
77+
78+
:raises:
79+
:class:`~s2e2.ExpressionError` if symbol is unknown.
6880
"""
6981
if symbol in (COMMA, LEFT_BRACKET, RIGHT_BRACKET):
7082
self.__process_special_symbol(symbol)
@@ -82,7 +94,7 @@ def __process_special_symbol(self, symbol):
8294
Special symbol of the expression.
8395
8496
:raises:
85-
:class:`~s2e2.ExpressionError` if expression contains unknown symbol.
97+
:class:`~s2e2.ExpressionError` if symbol is unknown.
8698
"""
8799
if self.__inside_quotes:
88100
self.__add_symbol_to_token(symbol)

test/functions/test_function_now.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
from s2e2.functions.function_now import FunctionNow
33

44
import datetime
5-
import pytest
65

76

87
class TestFunctionNow:

test/test_splitter.py

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
from s2e2.error import ExpressionError
2+
from s2e2.splitter import Splitter
3+
from s2e2.token_type import TokenType
4+
from s2e2.token import Token
5+
6+
import pytest
7+
8+
9+
class TestSplitter:
10+
11+
def setup(self):
12+
self.splitter = Splitter(lambda x: TokenType.ATOM)
13+
14+
15+
def teardown(self):
16+
self.splitter = None
17+
18+
19+
def test_positive_new_splitter(self):
20+
pass
21+
22+
23+
def test_positive_split_by_comma(self):
24+
expression = 'A, B'
25+
expected_tokens = [Token(TokenType.ATOM, 'A'),
26+
Token(TokenType.COMMA, ','),
27+
Token(TokenType.ATOM, 'B')]
28+
29+
actual_tokens = self.splitter.split_into_tokens(expression)
30+
31+
assert actual_tokens == expected_tokens
32+
33+
34+
def test_positive_split_by_brackets(self):
35+
expression = '(A, B)'
36+
expected_tokens = [Token(TokenType.LEFT_BRACKET, '('),
37+
Token(TokenType.ATOM, 'A'),
38+
Token(TokenType.COMMA, ','),
39+
Token(TokenType.ATOM, 'B'),
40+
Token(TokenType.RIGHT_BRACKET, ')')]
41+
42+
actual_tokens = self.splitter.split_into_tokens(expression)
43+
44+
assert actual_tokens == expected_tokens
45+
46+
47+
48+
def test_positive_quoted_atom(self):
49+
expression = 'A, "B C"'
50+
expected_tokens = [Token(TokenType.ATOM, 'A'),
51+
Token(TokenType.COMMA, ','),
52+
Token(TokenType.ATOM, 'B C')]
53+
54+
actual_tokens = self.splitter.split_into_tokens(expression)
55+
56+
assert actual_tokens == expected_tokens
57+
58+
59+
def test_positive_quoted_untrimmed_atom(self):
60+
expression = 'A, " B "'
61+
expected_tokens = [Token(TokenType.ATOM, 'A'),
62+
Token(TokenType.COMMA, ','),
63+
Token(TokenType.ATOM, ' B ')]
64+
65+
actual_tokens = self.splitter.split_into_tokens(expression)
66+
67+
assert actual_tokens == expected_tokens
68+
69+
70+
def test_negative_first_argument_wrong_type(self):
71+
with pytest.raises(TypeError) as ex:
72+
splitter = Splitter(None)
73+
assert 'is None' in str(ex.value)

0 commit comments

Comments
 (0)