got doc in on adding tests
This commit is contained in:
parent
7be6ff56a7
commit
b2db71a97e
|
@ -0,0 +1,119 @@
|
|||
# Adding unit tests
|
||||
|
||||
## Generating Runtime Tests
|
||||
|
||||
Because ANTLR supports multiple target languages, the unit tests are broken into two groups: the unit tests that test the tool itself (in `tool-testsuite`) and the unit tests that test the parser runtimes (in antlr4/runtime-testsuite). To avoid a lot of cut-and-paste, we generate all **runtime** tests from a set of templates using [runtime-testsuite/src/org/antlr/v4/testgen/TestGenerator.java](../runtime-testsuite/src/org/antlr/v4/testgen/TestGenerator.java). The `mvn` command is simple to use:
|
||||
|
||||
```
|
||||
$ cd ~/antlr/code/antlr4/runtime-testsuite
|
||||
$ mvn -Pgen generate-test-sources
|
||||
...
|
||||
rootDir = /Users/parrt/antlr/code/antlr4/runtime-testsuite
|
||||
outputDir = /Users/parrt/antlr/code/antlr4/runtime-testsuite/test
|
||||
templates = /Users/parrt/antlr/code/antlr4/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates
|
||||
target = ALL
|
||||
browsers = false
|
||||
viz = false
|
||||
```
|
||||
|
||||
It basically runs the Java program:
|
||||
|
||||
```bash
|
||||
$ java org.antlr.v4.testgen.TestGenerator \
|
||||
-root ~/antlr/code/antlr4/runtime-testsuite \
|
||||
-outdir ~/antlr/code/antlr4/runtime-testsuite/test \
|
||||
-templates ~/antlr/code/antlr4/runtime-testsuite/resources/org/antlr/v4/test/runtime/templates
|
||||
```
|
||||
|
||||
## Adding a runtime test
|
||||
|
||||
For each target, you will find an `Index.stg` file with a dictionary of all test groups. E.g., `runtime-testsuite/resources/org/antlr/v4/test/runtime/templates/Index.stg` looks like:
|
||||
|
||||
```
|
||||
TestFolders ::= [
|
||||
"CompositeLexers": [],
|
||||
"CompositeParsers": [],
|
||||
"FullContextParsing": [],
|
||||
"LeftRecursion": [],
|
||||
"LexerErrors": [],
|
||||
"LexerExec": [],
|
||||
"Listeners": [],
|
||||
"ParserErrors": [],
|
||||
"ParserExec": [],
|
||||
"ParseTrees": [],
|
||||
"Performance": [],
|
||||
"SemPredEvalLexer": [],
|
||||
"SemPredEvalParser": [],
|
||||
"Sets": []
|
||||
]
|
||||
```
|
||||
|
||||
Then each group has a subdirectory with another index. E.g., `Sets/Index.stg` looks like:
|
||||
|
||||
```
|
||||
TestTemplates ::= [
|
||||
"SeqDoesNotBecomeSet": [],
|
||||
"ParserSet": [],
|
||||
"ParserNotSet": [],
|
||||
"ParserNotToken": [],
|
||||
"ParserNotTokenWithLabel": [],
|
||||
"RuleAsSet": [],
|
||||
"NotChar": [],
|
||||
"OptionalSingleElement": [],
|
||||
...
|
||||
```
|
||||
|
||||
For every name mentioned, you will find a `.stg` file with the actual test. E.g., `Sets/StarSet.stg`:
|
||||
|
||||
```
|
||||
TestType() ::= "Parser"
|
||||
|
||||
Options ::= [
|
||||
"Debug": false
|
||||
]
|
||||
|
||||
Grammar ::= [
|
||||
"T": {<grammar("T")>}
|
||||
]
|
||||
|
||||
Input() ::= "abaac"
|
||||
|
||||
Rule() ::= "a"
|
||||
|
||||
Output() ::= <<
|
||||
abaac<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
||||
|
||||
grammar(grammarName) ::= <<
|
||||
grammar <grammarName>;
|
||||
a : ('a'|'b')* 'c' {<InputText():writeln()>} ;
|
||||
>>
|
||||
```
|
||||
|
||||
### Cross-language actions embedded within grammars
|
||||
|
||||
To get:
|
||||
|
||||
```
|
||||
System.out.println($set.stop);
|
||||
```
|
||||
|
||||
Use instead the language-neutral:
|
||||
|
||||
```
|
||||
<writeln("$set.stop")>
|
||||
```
|
||||
|
||||
File `runtime-testsuite/resources/org/antlr/v4/test/runtime/java/Java.test.stg` has templates like:
|
||||
|
||||
```
|
||||
writeln(s) ::= <<System.out.println(<s>);>>
|
||||
```
|
||||
|
||||
## Adding an ANTLR tool unit test
|
||||
|
||||
Just go into the appropriate Java test class in dir `antlr4/tool-testsuite/test/org/antlr/v4/test/tool` and add your unit test.
|
||||
|
||||
|
|
@ -55,6 +55,10 @@ This documentation is a reference and summarizes grammar syntax and the key sema
|
|||
|
||||
* Integrating ANTLR into Development Systems
|
||||
|
||||
* [Build ANTLR itself](building-antlr.md)
|
||||
# Building / releasing ANTLR itself
|
||||
|
||||
* [Building ANTLR itself](building-antlr.md)
|
||||
|
||||
* [Cutting an ANTLR Release](releasing-antlr.md)
|
||||
|
||||
* [Adding ANTLR unit tests](adding-tests.md)
|
||||
|
|
Loading…
Reference in New Issue