Browse Source

Fixed tests to work with pytest, improved docs

tags/gm/2021-09-23T00Z/github.com--lark-parser-lark/0.6.6
Erez Shinan 6 years ago
parent
commit
532c955962
5 changed files with 51 additions and 37 deletions
  1. +33
    -17
      docs/how_to_develop.md
  2. +1
    -0
      mkdocs.yml
  3. +6
    -20
      tests/test_parser.py
  4. +7
    -0
      tests/test_relative_import.lark
  5. +4
    -0
      tests/test_relative_multi_import.lark

+ 33
- 17
docs/how_to_develop.md View File

@@ -14,25 +14,25 @@ If you're interested in taking one of these on, let me know and I will provide m

## Unit Tests

If you would like to run all Unit Tests,
all you need is a supported Python Interpreter.
You can consult the list of supported interpreter for unit testing on the `tox.ini` file.
Then, just run the command `python -m tests`

If you would like to run a single Unit Test,
you do not need to use tox,
you can directly run it with your installed Python Interpreter.
First you need to figure out what is the test full name.
For example:
```python
## test_package test_class_name.test_function_name
python -m tests TestLalrStandard.test_lexer_error_recovering
Lark comes with an extensive set of tests. Many of the tests will run several times, once for each parser configuration.

To run the tests, just go to the lark project root, and run the command:
```bash
python -m tests
```

or

```bash
pypy -m tests
```

Equivalent example/way, but unrecommended:
```python
## test_package.tests_module.test_class_name.test_function_name
python -m unittest tests.test_parser.TestLalrStandard.test_lexer_error_recovering
For a list of supported interpreters, you can consult the `tox.ini` file.

You can also run a single unittest using its class and method name, for example:
```bash
## test_package test_class_name.test_function_name
python -m tests TestLalrStandard.test_lexer_error_recovering
```

### tox
@@ -45,3 +45,19 @@ run the command `tox` on the root of this project (where the main setup.py file
And, for example,
if you would like to only run the Unit Tests for Python version 2.7,
you can run the command `tox -e py27`

### pytest

You can also run the tests using pytest:

```bash
pytest tests
```

### Using setup.py

Another way to run the tests is using setup.py:

```bash
python setup.py test
```

+ 1
- 0
mkdocs.yml View File

@@ -6,6 +6,7 @@ pages:
- Features: features.md
- Parsers: parsers.md
- How To Use (Guide): how_to_use.md
- How To Develop (Guide): how_to_develop.md
- Grammar Reference: grammar.md
- Tree Construction Reference: tree_construction.md
- Classes Reference: classes.md


+ 6
- 20
tests/test_parser.py View File

@@ -18,7 +18,7 @@ from io import (
logging.basicConfig(level=logging.INFO)

from lark.lark import Lark
from lark.exceptions import GrammarError, ParseError, UnexpectedToken, UnexpectedInput
from lark.exceptions import GrammarError, ParseError, UnexpectedToken, UnexpectedInput, UnexpectedCharacters
from lark.tree import Tree
from lark.visitors import Transformer

@@ -388,6 +388,8 @@ def _make_full_earley_test(LEXER):
def _make_parser_test(LEXER, PARSER):
def _Lark(grammar, **kwargs):
return Lark(grammar, lexer=LEXER, parser=PARSER, propagate_positions=True, **kwargs)
def _Lark_open(gfilename, **kwargs):
return Lark.open(gfilename, lexer=LEXER, parser=PARSER, propagate_positions=True, **kwargs)
class _TestParser(unittest.TestCase):
def test_basic1(self):
g = _Lark("""start: a+ b a* "b" a*
@@ -817,7 +819,7 @@ def _make_parser_test(LEXER, PARSER):
%s""" % (' '.join(tokens), '\n'.join("%s: %s"%x for x in tokens.items())))

def test_float_without_lexer(self):
expected_error = UnexpectedInput if LEXER == 'dynamic' else UnexpectedToken
expected_error = UnexpectedCharacters if LEXER.startswith('dynamic') else UnexpectedToken
if PARSER == 'cyk':
expected_error = ParseError

@@ -997,16 +999,7 @@ def _make_parser_test(LEXER, PARSER):


def test_relative_import(self):
grammar = """
start: NUMBER WORD

%import .grammars.test.NUMBER
%import common.WORD
%import common.WS
%ignore WS

"""
l = _Lark(grammar)
l = _Lark_open('test_relative_import.lark', rel_to=__file__)
x = l.parse('12 lions')
self.assertEqual(x.children, ['12', 'lions'])

@@ -1024,14 +1017,7 @@ def _make_parser_test(LEXER, PARSER):


def test_relative_multi_import(self):
grammar = """
start: NUMBER WORD

%import .grammars.test (NUMBER, WORD, WS)
%ignore WS

"""
l = _Lark(grammar)
l = _Lark_open("test_relative_multi_import.lark", rel_to=__file__)
x = l.parse('12 capybaras')
self.assertEqual(x.children, ['12', 'capybaras'])



+ 7
- 0
tests/test_relative_import.lark View File

@@ -0,0 +1,7 @@
start: NUMBER WORD

%import .grammars.test.NUMBER
%import common.WORD
%import common.WS
%ignore WS


+ 4
- 0
tests/test_relative_multi_import.lark View File

@@ -0,0 +1,4 @@
start: NUMBER WORD

%import .grammars.test (NUMBER, WORD, WS)
%ignore WS

Loading…
Cancel
Save