Ejemplo n.º 1
0
 def test_substr_at_the_begin(self):
     assert TextScanner("").substr(0) == ""
     assert TextScanner("a").substr(1) == "a"
     assert TextScanner("ab").substr(1) == "a", \
         "do not return the char at the index itself"
     assert TextScanner("ab").substr(2) == "ab"
     assert TextScanner("ab").substr(3) == "ab"
Ejemplo n.º 2
0
 def test_substr_from_consumed_string(self):
     s = TextScanner("abcdef")
     s.consume(2)
     assert s.substr(2) == ""
     assert s.substr(3) == "c"
     assert s.substr(4) == "cd"
     assert s.substr(10) == "cdef"
Ejemplo n.º 3
0
 def test_substr_index_error(self):
     with pytest.raises(IndexError):
         TextScanner("").substr(-1)
     s = TextScanner("abcd")
     s.consume(2)
     with pytest.raises(IndexError):
         s.substr(1)
Ejemplo n.º 4
0
 def test_can_not_consume_zero_chars(self):
     s = TextScanner("w")
     pytest.raises(ValueError, s.consume, 0)
Ejemplo n.º 5
0
 def test_not_find_next(self):
     assert TextScanner("").find(';') == -1
     assert TextScanner("word").find(';') == -1
     assert TextScanner("\\;").find(';', escape=True) == -1
Ejemplo n.º 6
0
 def test_peeking_next_letter(self):
     s = TextScanner("word")
     assert s.peek() == "w"
Ejemplo n.º 7
0
 def test_find_next_backslash(self):
     assert TextScanner("\\").find('\\') == 0
     assert TextScanner("a\\").find('\\', escape=False) == 1
     assert TextScanner("a\\").find('\\', escape=True) == 1
     assert TextScanner("a\\\\").find('\\', escape=True) == -1
     assert TextScanner("a\\\\\\").find('\\', escape=True) == 3
Ejemplo n.º 8
0
 def test_scan_empty_text(self):
     s = TextScanner("")
     assert s.is_empty is True
     assert s.has_data is False
     assert s.peek() == ""  # empty string signals end of text
     assert s.get() == ""
Ejemplo n.º 9
0
 def test_find_next_char(self):
     assert TextScanner(";").find(';') == 0
     assert TextScanner("word;").find(';') == 4
     assert TextScanner("word;;").find(';') == 4
Ejemplo n.º 10
0
 def test_find_ignores_escaped_chars(self):
     assert TextScanner("word\\;;").find(';', escape=True) == 6
     assert TextScanner("word\\n;").find(';', escape=True) == 6
     assert TextScanner("word\\;\\;;").find(';', escape=True) == 8
Ejemplo n.º 11
0
 def test_can_not_consume_negative_chars(self):
     s = TextScanner("w")
     pytest.raises(ValueError, s.consume, -1)
Ejemplo n.º 12
0
 def test_can_not_peek_in_reverse_direction(self):
     s = TextScanner("w")
     pytest.raises(ValueError, s.peek, -1)
Ejemplo n.º 13
0
 def test_getting_all_letters_empties_scanner(self):
     s = TextScanner("w")
     s.get()
     assert s.is_empty is True
     assert s.has_data is False
Ejemplo n.º 14
0
 def test_non_empty_string_is_not_empty(self):
     s = TextScanner("word")
     assert s.is_empty is False
     assert s.has_data is True
Ejemplo n.º 15
0
 def test_consume_two_letter(self):
     s = TextScanner("word")
     s.consume(2)
     assert s.peek() == "r"
Ejemplo n.º 16
0
 def test_consume_one_letter(self):
     s = TextScanner("word")
     s.consume()
     assert s.peek() == "o"
Ejemplo n.º 17
0
 def test_getting_next_letter_forwards_scan_position(self):
     s = TextScanner("word")
     assert s.get() == "w"
     assert s.peek() == "o"
Ejemplo n.º 18
0
 def test_peeking_beyond_word_boundaries_returns_empty_string(self):
     s = TextScanner("word")
     assert s.peek(4) == ""
Ejemplo n.º 19
0
 def test_peeking_more_letters_ahead(self):
     s = TextScanner("word")
     assert s.peek(1) == "o"
     assert s.peek(2) == "r"