Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Wiki Markup
{div:class=navigation}
{table:width=100%}
 {tr}
  {td} {align:left}[Previous|Tests Prerequisites] {span:class=sep}\|{span} {span:class=text}Tests Prerequisites{span}{align} {td}
  {td} {align:center}[Top|Writing Tests for Plugins] {span:class=sep}\|{span} {span:class=text}Writing Tests for Plugins{span}{align} {td}
  {td} {align:right}[Next|Completion Test] {span:class=sep}\|{span} {span:class=text}Completion Test{span}{align} {td}
 {tr}
{table}
{div}

The first test will check if the parser, implemented in the previous tutorial, works as we expect it.

1. Define input test data

Create a file "ParsingTestData.simple" in "testData" folder.

Code Block

# 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

Wiki Markup
{span:class=shortcut}Tools{span}
Wiki Markup
{span:class=shortcut}View PSI Structure{span}
.

Image Removed

Use

Wiki Markup
{span:class=id}Copy PSI{span}
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.

Code Block

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

Code Block

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.

Wiki Markup
{div:class=navigation}
{table:width=100%}
 {tr}
  {td} {align:left}[Previous|Tests Prerequisites] {span:class=sep}\|{span} {span:class=text}Tests Prerequisites{span}{align} {td}
  {td} {align:center}[Top|Writing Tests for Plugins] {span:class=sep}\|{span} {span:class=text}Writing Tests for Plugins{span}{align} {td}
  {td} {align:right}[Next|Completion Test] {span:class=sep}\|{span} {span:class=text}Completion Test{span}{align} {td}
 {tr}
{table}
{div}

 

Redirect
locationhttp://www.jetbrains.org/intellij/sdk/docs/tutorials/writing_tests_for_plugins/parsing_test.html