|
| 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