docs: document test attributes
This commit is contained in:
parent
60a935139b
commit
3eb7366500
1 changed files with 60 additions and 0 deletions
|
|
@ -222,6 +222,66 @@ tree-sitter test -f 'Return statements'
|
|||
|
||||
The recommendation is to be comprehensive in adding tests. If it's a visible node, add it to a test file in your `test/corpus` directory. It's typically a good idea to test all of the permutations of each language construct. This increases test coverage, but doubly acquaints readers with a way to examine expected outputs and understand the "edges" of a language.
|
||||
|
||||
#### Attributes
|
||||
|
||||
Tests can be annotated with a few `attributes`. Attributes must be put in the header, below the test name, and start with a `:`.
|
||||
A couple of attributes also take in a parameter, which require the use of parenthesis.
|
||||
|
||||
**Note**: If you'd like to supply in multiple parameters, e.g. to run tests on multiple platforms or to test multiple languages, you can repeat the attribute on a new line.
|
||||
|
||||
The following attributes are available:
|
||||
|
||||
- `:skip` — This attribute will skip the test when running `tree-sitter test`.
|
||||
This is useful when you want to temporarily disable running a test without deleting it.
|
||||
- `:error` — This attribute will assert that the parse tree contains an error. It's useful to just validate that a certain input is invalid without displaying the whole parse tree, as such you should omit the parse tree below the `---` line.
|
||||
- `:fail-fast` — This attribute will stop the testing additional tests if the test marked with this attribute fails.
|
||||
- `:language(LANG)` — This attribute will run the tests using the parser for the specified language. This is useful for multi-parser repos, such as XML and DTD, or Typescript and TSX. The default parser will be the first entry in the `tree-sitter` field in the root `package.json`, so having a way to pick a second or even third parser is useful.
|
||||
- `:platform(PLATFORM)` — This attribute specifies the platform on which the test should run. It is useful to test platform-specific behavior (e.g. Windows newlines are different from Unix). This attribute must match up with Rust's [`std::env::consts::OS`](https://doc.rust-lang.org/std/env/consts/constant.OS.html).
|
||||
|
||||
Examples using attributes:
|
||||
|
||||
```text
|
||||
=========================
|
||||
Test that will be skipped
|
||||
:skip
|
||||
=========================
|
||||
|
||||
int main() {}
|
||||
|
||||
-------------------------
|
||||
|
||||
====================================
|
||||
Test that will run on Linux or macOS
|
||||
|
||||
:platform(linux)
|
||||
:platform(macos)
|
||||
====================================
|
||||
|
||||
int main() {}
|
||||
|
||||
------------------------------------
|
||||
|
||||
========================================================================
|
||||
Test that expects an error, and will fail fast if there's no parse error
|
||||
:fail-fast
|
||||
:error
|
||||
========================================================================
|
||||
|
||||
int main ( {}
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
=================================================
|
||||
Test that will parse with both Typescript and TSX
|
||||
:language(typescript)
|
||||
:language(tsx)
|
||||
=================================================
|
||||
|
||||
console.log('Hello, world!');
|
||||
|
||||
-------------------------------------------------
|
||||
```
|
||||
|
||||
#### Automatic Compilation
|
||||
|
||||
You might notice that the first time you run `tree-sitter test` after regenerating your parser, it takes some extra time. This is because Tree-sitter automatically compiles your C code into a dynamically-loadable library. It recompiles your parser as-needed whenever you update it by re-running `tree-sitter generate`.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue