summaryrefslogtreecommitdiffstats
path: root/tests/regular_languages_tests/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/regular_languages_tests/__init__.py')
-rw-r--r--tests/regular_languages_tests/__init__.py100
1 files changed, 100 insertions, 0 deletions
diff --git a/tests/regular_languages_tests/__init__.py b/tests/regular_languages_tests/__init__.py
new file mode 100644
index 00000000..070c0547
--- /dev/null
+++ b/tests/regular_languages_tests/__init__.py
@@ -0,0 +1,100 @@
+from __future__ import unicode_literals
+
+from prompt_toolkit.contrib.regular_languages import compile
+from prompt_toolkit.contrib.regular_languages.compiler import Match, Variables
+from prompt_toolkit.contrib.regular_languages.completion import GrammarCompleter
+from prompt_toolkit.completion import Completer, Completion, CompleteEvent
+from prompt_toolkit.document import Document
+
+import unittest
+
+
+class GrammarTest(unittest.TestCase):
+ def test_simple_match(self):
+ g = compile('hello|world')
+
+ m = g.match('hello')
+ self.assertTrue(isinstance(m, Match))
+
+ m = g.match('world')
+ self.assertTrue(isinstance(m, Match))
+
+ m = g.match('somethingelse')
+ self.assertEqual(m, None)
+
+ def test_variable_varname(self):
+ """
+ Test `Variable` with varname.
+ """
+ g = compile('((?P<varname>hello|world)|test)')
+
+ m = g.match('hello')
+ variables = m.variables()
+ self.assertTrue(isinstance(variables, Variables))
+ self.assertEqual(variables.get('varname'), 'hello')
+ self.assertEqual(variables['varname'], 'hello')
+
+ m = g.match('world')
+ variables = m.variables()
+ self.assertTrue(isinstance(variables, Variables))
+ self.assertEqual(variables.get('varname'), 'world')
+ self.assertEqual(variables['varname'], 'world')
+
+ m = g.match('test')
+ variables = m.variables()
+ self.assertTrue(isinstance(variables, Variables))
+ self.assertEqual(variables.get('varname'), None)
+ self.assertEqual(variables['varname'], None)
+
+ def test_prefix(self):
+ """
+ Test `match_prefix`.
+ """
+ g = compile(r'(hello\ world|something\ else)')
+
+ m = g.match_prefix('hello world')
+ self.assertTrue(isinstance(m, Match))
+
+ m = g.match_prefix('he')
+ self.assertTrue(isinstance(m, Match))
+
+ m = g.match_prefix('')
+ self.assertTrue(isinstance(m, Match))
+
+ m = g.match_prefix('som')
+ self.assertTrue(isinstance(m, Match))
+
+ m = g.match_prefix('hello wor')
+ self.assertTrue(isinstance(m, Match))
+
+ m = g.match_prefix('no-match')
+ self.assertEqual(m, None)
+
+ m = g.match_prefix('ello')
+ self.assertEqual(m, None)
+
+ def test_completer(self):
+ class completer1(Completer):
+ def get_completions(self, document, complete_event):
+ yield Completion('before-%s-after' % document.text, -len(document.text))
+ yield Completion('before-%s-after-B' % document.text, -len(document.text))
+
+ class completer2(Completer):
+ def get_completions(self, document, complete_event):
+ yield Completion('before2-%s-after2' % document.text, -len(document.text))
+ yield Completion('before2-%s-after2-B' % document.text, -len(document.text))
+
+ # Create grammar. "var1" + "whitespace" + "var2"
+ g = compile(r'(?P<var1>[a-z]*) \s+ (?P<var2>[a-z]*)')
+
+ # Test 'get_completions()'
+ completer = GrammarCompleter(g, {'var1': completer1(), 'var2': completer2()})
+ completions = list(completer.get_completions(
+ Document('abc def', len('abc def')),
+ CompleteEvent()))
+
+ self.assertEqual(len(completions), 2)
+ self.assertEqual(completions[0].text, 'before2-def-after2')
+ self.assertEqual(completions[0].start_position, -3)
+ self.assertEqual(completions[1].text, 'before2-def-after2-B')
+ self.assertEqual(completions[1].start_position, -3)