mirror of
https://github.com/JetBrains/intellij-sdk-code-samples.git
synced 2025-07-28 01:07:49 +08:00
[site] Parsing test
This commit is contained in:
parent
ba4ff4dc19
commit
fee0b0779a
@ -65,7 +65,7 @@
|
|||||||
* [Quick Fix](quick_fix.html)
|
* [Quick Fix](quick_fix.html)
|
||||||
* [Writing Tests For Plugins](writing_tests_for_plugins.html)
|
* [Writing Tests For Plugins](writing_tests_for_plugins.html)
|
||||||
* [Tests Prerequisites](tests_prerequisites.html)
|
* [Tests Prerequisites](tests_prerequisites.html)
|
||||||
* [Parsing Test](TODO)
|
* [Parsing Test](parsing_test.html)
|
||||||
* [Completion Test](TODO)
|
* [Completion Test](TODO)
|
||||||
* [Annotator Test](TODO)
|
* [Annotator Test](TODO)
|
||||||
* [Formatter Test](TODO)
|
* [Formatter Test](TODO)
|
||||||
|
BIN
img/writing_tests_for_plugins/plugin_copy_psi.png
Normal file
BIN
img/writing_tests_for_plugins/plugin_copy_psi.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 87 KiB |
139
parsing_test.md
Normal file
139
parsing_test.md
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
---
|
||||||
|
title: Parsing Test
|
||||||
|
---
|
||||||
|
|
||||||
|
<!--
|
||||||
|
INITIAL_SOURCE https://confluence.jetbrains.com/display/IntelliJIDEA/Parsing+Test
|
||||||
|
-->
|
||||||
|
|
||||||
|
# {{ page.title }}
|
||||||
|
|
||||||
|
The first test will check if the parser, implemented in the
|
||||||
|
[Lexer and Parser Definition Tutorial](lexer_und_parser_definition.html),
|
||||||
|
works as we expect it.
|
||||||
|
|
||||||
|
### 1. Define input test data
|
||||||
|
|
||||||
|
Create a file *ParsingTestData.simple* in *testData* folder.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# You are reading the ".properties" entry.
|
||||||
|
! The exclamation mark can also mark text as comments.
|
||||||
|
website = http://en.wikipedia.org/
|
||||||
|
|
||||||
|
language = English
|
||||||
|
# The backslash below tells the application to continue reading
|
||||||
|
# the value onto the next line.
|
||||||
|
message = Welcome to \
|
||||||
|
Wikipedia!
|
||||||
|
# Add spaces to the key
|
||||||
|
key\ with\ spaces = This is the value that could be looked up with the key "key with spaces".
|
||||||
|
# Unicode
|
||||||
|
tab : \u0009
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Copy the expected PSI tree
|
||||||
|
|
||||||
|
The easiest way to get the expected PSI structure for any file is to use PSI Viewer.
|
||||||
|
Run the project and call ```Tools``` → ```View PSI Structure```.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Use ```Copy PSI``` button to copy the expected PSI structure to the clipboard.
|
||||||
|
|
||||||
|
### 3. Define an output test data
|
||||||
|
|
||||||
|
Create a file *ParsingTestData.txt* with the copied PSI tree.
|
||||||
|
|
||||||
|
```java
|
||||||
|
Simple File(0,433)
|
||||||
|
PsiComment(SimpleTokenType.COMMENT)('# You are reading the ".properties" entry.')(0,42)
|
||||||
|
PsiElement(SimpleTokenType.CRLF)('\n')(42,43)
|
||||||
|
PsiComment(SimpleTokenType.COMMENT)('! The exclamation mark can also mark text as comments.')(43,97)
|
||||||
|
PsiElement(SimpleTokenType.CRLF)('\n')(97,98)
|
||||||
|
SimplePropertyImpl(PROPERTY)(98,132)
|
||||||
|
PsiElement(SimpleTokenType.KEY)('website')(98,105)
|
||||||
|
PsiWhiteSpace(' ')(105,106)
|
||||||
|
PsiElement(SimpleTokenType.SEPARATOR)('=')(106,107)
|
||||||
|
PsiWhiteSpace(' ')(107,108)
|
||||||
|
PsiElement(SimpleTokenType.VALUE)('http://en.wikipedia.org/')(108,132)
|
||||||
|
PsiElement(SimpleTokenType.CRLF)('\n')(132,133)
|
||||||
|
PsiElement(SimpleTokenType.CRLF)('\n')(133,134)
|
||||||
|
SimplePropertyImpl(PROPERTY)(134,152)
|
||||||
|
PsiElement(SimpleTokenType.KEY)('language')(134,142)
|
||||||
|
PsiWhiteSpace(' ')(142,143)
|
||||||
|
PsiElement(SimpleTokenType.SEPARATOR)('=')(143,144)
|
||||||
|
PsiWhiteSpace(' ')(144,145)
|
||||||
|
PsiElement(SimpleTokenType.VALUE)('English')(145,152)
|
||||||
|
PsiElement(SimpleTokenType.CRLF)('\n')(152,153)
|
||||||
|
PsiComment(SimpleTokenType.COMMENT)('# The backslash below tells the application to continue reading')(153,216)
|
||||||
|
PsiElement(SimpleTokenType.CRLF)('\n')(216,217)
|
||||||
|
PsiComment(SimpleTokenType.COMMENT)('# the value onto the next line.')(217,248)
|
||||||
|
PsiElement(SimpleTokenType.CRLF)('\n')(248,249)
|
||||||
|
SimplePropertyImpl(PROPERTY)(249,292)
|
||||||
|
PsiElement(SimpleTokenType.KEY)('message')(249,256)
|
||||||
|
PsiWhiteSpace(' ')(256,257)
|
||||||
|
PsiElement(SimpleTokenType.SEPARATOR)('=')(257,258)
|
||||||
|
PsiWhiteSpace(' ')(258,259)
|
||||||
|
PsiElement(SimpleTokenType.VALUE)('Welcome to \\n Wikipedia!')(259,292)
|
||||||
|
PsiElement(SimpleTokenType.CRLF)('\n')(292,293)
|
||||||
|
PsiComment(SimpleTokenType.COMMENT)('# Add spaces to the key')(293,316)
|
||||||
|
PsiElement(SimpleTokenType.CRLF)('\n')(316,317)
|
||||||
|
SimplePropertyImpl(PROPERTY)(317,410)
|
||||||
|
PsiElement(SimpleTokenType.KEY)('key\ with\ spaces')(317,334)
|
||||||
|
PsiWhiteSpace(' ')(334,335)
|
||||||
|
PsiElement(SimpleTokenType.SEPARATOR)('=')(335,336)
|
||||||
|
PsiWhiteSpace(' ')(336,337)
|
||||||
|
PsiElement(SimpleTokenType.VALUE)('This is the value that could be looked up with the key "key with spaces".')(337,410)
|
||||||
|
PsiElement(SimpleTokenType.CRLF)('\n')(410,411)
|
||||||
|
PsiComment(SimpleTokenType.COMMENT)('# Unicode')(411,420)
|
||||||
|
PsiElement(SimpleTokenType.CRLF)('\n')(420,421)
|
||||||
|
SimplePropertyImpl(PROPERTY)(421,433)
|
||||||
|
PsiElement(SimpleTokenType.KEY)('tab')(421,424)
|
||||||
|
PsiWhiteSpace(' ')(424,425)
|
||||||
|
PsiElement(SimpleTokenType.SEPARATOR)(':')(425,426)
|
||||||
|
PsiWhiteSpace(' ')(426,427)
|
||||||
|
PsiElement(SimpleTokenType.VALUE)('\u0009')(427,433)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Define a parsing test
|
||||||
|
|
||||||
|
```java
|
||||||
|
package com.simpleplugin;
|
||||||
|
|
||||||
|
import com.intellij.testFramework.ParsingTestCase;
|
||||||
|
|
||||||
|
public class SimpleParsingTest extends ParsingTestCase {
|
||||||
|
public SimpleParsingTest() {
|
||||||
|
super("", "simple", new SimpleParserDefinition());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testParsingTestData() {
|
||||||
|
doTest(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getTestDataPath() {
|
||||||
|
return "../../SimplePlugin/testData";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean skipSpaces() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean includeRanges() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Run the test
|
||||||
|
|
||||||
|
Run the test and make sure it's green.
|
||||||
|
|
||||||
|
-----
|
||||||
|
|
||||||
|
[Previous](tests_prerequisites.html) [Top](writing_tests_for_plugins.html) [Next](completion_test.html)
|
||||||
|
|
@ -15,7 +15,7 @@ As an example we will take the plugin implemented in the
|
|||||||
and cover its code with functional tests.
|
and cover its code with functional tests.
|
||||||
|
|
||||||
* [Tests Prerequisites](tests_prerequisites.html)
|
* [Tests Prerequisites](tests_prerequisites.html)
|
||||||
* [Parsing Test](TODO)
|
* [Parsing Test](parsing_test.html))
|
||||||
* [Completion Test](TODO)
|
* [Completion Test](TODO)
|
||||||
* [Annotator Test](TODO)
|
* [Annotator Test](TODO)
|
||||||
* [Formatter Test](TODO)
|
* [Formatter Test](TODO)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user