2016-01-14 19:38:06 -08:00

235 lines
25 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>2. Parsing Test / IntelliJ Platform SDK DevGuide</title>
<link rel="stylesheet" href="/intellij/sdk/docs/app/css/styles.min.css">
<!-- non-retina iPad pre iOS 7 -->
<link rel="apple-touch-icon" href="/intellij/sdk/docs/apple-touch-icon-72x72.png" sizes="72x72">
<!-- retina iPhone pre iOS 7 -->
<link rel="apple-touch-icon" href="/intellij/sdk/docs/apple-touch-icon-114x114.png" sizes="114x114">
<!-- retina iPad pre iOS 7 -->
<link rel="apple-touch-icon" href="/intellij/sdk/docs/apple-touch-icon-144x144.png" sizes="144x144">
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="/intellij/sdk/docs/apple-touch-icon-precomposed.png">
<!-- normal favicon -->
<link rel="shortcut icon" type="image/x-icon" href="/intellij/sdk/docs/favicon.ico">
<link rel="icon" type="image/png" href="/intellij/sdk/docs/favicon.png">
<link rel="stylesheet" href="/intellij/sdk/docs/styles/styles.css"></head>
<body data-id="tutorials/writing_tests_for_plugins/parsing_test">
<div class="wrapper">
<section class="panel _nav">
<header class="panel__header">
<div class="container">
<form class="search-box">
<label for="search-box__input" class="search-box__label">
<input type="text" class="search-box__input" id="search-box__input" placeholder="Search IntelliJ Platform SDK DevGuide">
</label>
<div class="search-box__clear" title="Clear"></div>
</form>
</div>
</header>
<nav class="panel__content">
<div class="container _nav">
<menu class="nav-tree"></menu>
</div>
<div class="container _footer panel__footer">
<p><a href="https://youtrack.jetbrains.com/issues/IJSDK">Send feedback</a></p>
<p>&copy; 2000&ndash;2016 <a href="//www.jetbrains.com">JetBrains</a> s.r.o.<br>
All rights reserved.</p>
</div>
</nav>
</section>
<main class="panel _main" role="main">
<header class="panel__header">
<div class="container">
<h3>IntelliJ Platform SDK DevGuide</h3>
<div class="shortcuts-switcher"><label for="switch-shortcuts">Keymap:</label><select id="switch-shortcuts" class="select _shortcuts" height="1">
<option data-group="primary" value="default" selected>Default</option>
<option data-group="primary" value="default_for_gnome">GNOME</option>
<option data-group="primary" value="default_for_kde">KDE</option>
<option data-group="primary" value="default_for_xwin">XWindow</option>
<option data-group="primary" value="emacs">Emacs</option>
<option data-group="primary" value="jbuilder">JBuilder</option>
<option data-group="primary" value="visual_studio">Visual Studio</option>
<option data-group="primary" value="netbeans_6.5">NetBeans 6.5</option>
<option data-group="primary" value="eclipse">Eclipse</option>
<option data-group="secondary" value="mac_os_x_10.5_">OS X 10.5+</option>
<option data-group="secondary" value="mac_os_x">OS X</option>
<option data-group="secondary" value="eclipse_mac_os_x">OS X Eclipse</option></select>
</div>
<div class="panel-trigger"></div>
</div>
</header>
<section class="panel__content">
<div class="container">
<article class="article" data-shortcut-switcher="false">
<h1>2. Parsing Test</h1>
<p>The first test will check if the parser, implemented in the
<a href="/intellij/sdk/docs/tutorials/custom_language_support/lexer_and_parser_definition.html"><span>Lexer and Parser Definition</span></a>
section of the
<a href="/intellij/sdk/docs/tutorials/custom_language_support_tutorial.html"><span>Custom Language Support Tutorial</span></a>
works as we expect it.</p>
<a name="define-input-test-data" class="elem-anchor"></a>
<h3>2.1. Define input test data<a href="#define-input-test-data" class="anchor-link"><span></span></a></h3>
<p>Create a file <em>ParsingTestData.simple</em> in <em>testData</em> folder.</p>
<pre><code class="code-block__wrapper code-block _highlighted lang_bash"><span class="c"># You are reading the ".properties" entry.</span>
! The exclamation mark can also mark text as comments.
website <span class="o">=</span> http://en.wikipedia.org/
language <span class="o">=</span> English
<span class="c"># The backslash below tells the application to continue reading</span>
<span class="c"># the value onto the next line.</span>
message <span class="o">=</span> Welcome to <span class="se">\</span>
Wikipedia!
<span class="c"># Add spaces to the key</span>
key<span class="se">\ </span>with<span class="se">\ </span>spaces <span class="o">=</span> This is the value that could be looked up with the key <span class="s2">"key with spaces"</span>.
<span class="c"># Unicode</span>
tab : <span class="se">\u</span>0009
</code></pre>
<a name="copy-the-expected-psi-tree" class="elem-anchor"></a>
<h3>2.2. Copy the expected PSI tree<a href="#copy-the-expected-psi-tree" class="anchor-link"><span></span></a></h3>
<p>The easiest way to get the expected PSI structure for any file is to use PSI Viewer.
Run the project and call <code class="code highlight language-text">Tools</code><code class="code highlight language-text">View PSI Structure</code>.</p>
<p><img src="img/plugin_copy_psi.png" alt="PSI Tree Copy" /></p>
<p>Use <code class="code highlight language-text">Copy PSI</code> button to copy the expected PSI structure to the clipboard.</p>
<a name="define-an-output-test-data" class="elem-anchor"></a>
<h3>2.3. Define an output test data<a href="#define-an-output-test-data" class="anchor-link"><span></span></a></h3>
<p>Create a file <em>ParsingTestData.txt</em> with the copied PSI tree.</p>
<pre><code class="code-block__wrapper code-block _highlighted lang_java"><span class="n">Simple</span> <span class="nf">File</span><span class="o">(</span><span class="mi">0</span><span class="o">,</span><span class="mi">433</span><span class="o">)</span>
<span class="n">PsiComment</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">COMMENT</span><span class="o">)(</span><span class="err">'#</span> <span class="n">You</span> <span class="n">are</span> <span class="n">reading</span> <span class="n">the</span> <span class="s">".properties"</span> <span class="n">entry</span><span class="o">.</span><span class="err">'</span><span class="o">)(</span><span class="mi">0</span><span class="o">,</span><span class="mi">42</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">CRLF</span><span class="o">)(</span><span class="sc">'\n'</span><span class="o">)(</span><span class="mi">42</span><span class="o">,</span><span class="mi">43</span><span class="o">)</span>
<span class="n">PsiComment</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">COMMENT</span><span class="o">)(</span><span class="err">'</span><span class="o">!</span> <span class="n">The</span> <span class="n">exclamation</span> <span class="n">mark</span> <span class="n">can</span> <span class="n">also</span> <span class="n">mark</span> <span class="n">text</span> <span class="n">as</span> <span class="n">comments</span><span class="o">.</span><span class="err">'</span><span class="o">)(</span><span class="mi">43</span><span class="o">,</span><span class="mi">97</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">CRLF</span><span class="o">)(</span><span class="sc">'\n'</span><span class="o">)(</span><span class="mi">97</span><span class="o">,</span><span class="mi">98</span><span class="o">)</span>
<span class="n">SimplePropertyImpl</span><span class="o">(</span><span class="n">PROPERTY</span><span class="o">)(</span><span class="mi">98</span><span class="o">,</span><span class="mi">132</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">KEY</span><span class="o">)(</span><span class="err">'</span><span class="n">website</span><span class="err">'</span><span class="o">)(</span><span class="mi">98</span><span class="o">,</span><span class="mi">105</span><span class="o">)</span>
<span class="n">PsiWhiteSpace</span><span class="o">(</span><span class="sc">' '</span><span class="o">)(</span><span class="mi">105</span><span class="o">,</span><span class="mi">106</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">SEPARATOR</span><span class="o">)(</span><span class="sc">'='</span><span class="o">)(</span><span class="mi">106</span><span class="o">,</span><span class="mi">107</span><span class="o">)</span>
<span class="n">PsiWhiteSpace</span><span class="o">(</span><span class="sc">' '</span><span class="o">)(</span><span class="mi">107</span><span class="o">,</span><span class="mi">108</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">VALUE</span><span class="o">)(</span><span class="err">'</span><span class="nl">http:</span><span class="c1">//en.wikipedia.org/')(108,132)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">CRLF</span><span class="o">)(</span><span class="sc">'\n'</span><span class="o">)(</span><span class="mi">132</span><span class="o">,</span><span class="mi">133</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">CRLF</span><span class="o">)(</span><span class="sc">'\n'</span><span class="o">)(</span><span class="mi">133</span><span class="o">,</span><span class="mi">134</span><span class="o">)</span>
<span class="n">SimplePropertyImpl</span><span class="o">(</span><span class="n">PROPERTY</span><span class="o">)(</span><span class="mi">134</span><span class="o">,</span><span class="mi">152</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">KEY</span><span class="o">)(</span><span class="err">'</span><span class="n">language</span><span class="err">'</span><span class="o">)(</span><span class="mi">134</span><span class="o">,</span><span class="mi">142</span><span class="o">)</span>
<span class="n">PsiWhiteSpace</span><span class="o">(</span><span class="sc">' '</span><span class="o">)(</span><span class="mi">142</span><span class="o">,</span><span class="mi">143</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">SEPARATOR</span><span class="o">)(</span><span class="sc">'='</span><span class="o">)(</span><span class="mi">143</span><span class="o">,</span><span class="mi">144</span><span class="o">)</span>
<span class="n">PsiWhiteSpace</span><span class="o">(</span><span class="sc">' '</span><span class="o">)(</span><span class="mi">144</span><span class="o">,</span><span class="mi">145</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">VALUE</span><span class="o">)(</span><span class="err">'</span><span class="n">English</span><span class="err">'</span><span class="o">)(</span><span class="mi">145</span><span class="o">,</span><span class="mi">152</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">CRLF</span><span class="o">)(</span><span class="sc">'\n'</span><span class="o">)(</span><span class="mi">152</span><span class="o">,</span><span class="mi">153</span><span class="o">)</span>
<span class="n">PsiComment</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">COMMENT</span><span class="o">)(</span><span class="err">'#</span> <span class="n">The</span> <span class="n">backslash</span> <span class="n">below</span> <span class="n">tells</span> <span class="n">the</span> <span class="n">application</span> <span class="n">to</span> <span class="k">continue</span> <span class="n">reading</span><span class="err">'</span><span class="o">)(</span><span class="mi">153</span><span class="o">,</span><span class="mi">216</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">CRLF</span><span class="o">)(</span><span class="sc">'\n'</span><span class="o">)(</span><span class="mi">216</span><span class="o">,</span><span class="mi">217</span><span class="o">)</span>
<span class="n">PsiComment</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">COMMENT</span><span class="o">)(</span><span class="err">'#</span> <span class="n">the</span> <span class="n">value</span> <span class="n">onto</span> <span class="n">the</span> <span class="n">next</span> <span class="n">line</span><span class="o">.</span><span class="err">'</span><span class="o">)(</span><span class="mi">217</span><span class="o">,</span><span class="mi">248</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">CRLF</span><span class="o">)(</span><span class="sc">'\n'</span><span class="o">)(</span><span class="mi">248</span><span class="o">,</span><span class="mi">249</span><span class="o">)</span>
<span class="n">SimplePropertyImpl</span><span class="o">(</span><span class="n">PROPERTY</span><span class="o">)(</span><span class="mi">249</span><span class="o">,</span><span class="mi">292</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">KEY</span><span class="o">)(</span><span class="err">'</span><span class="n">message</span><span class="err">'</span><span class="o">)(</span><span class="mi">249</span><span class="o">,</span><span class="mi">256</span><span class="o">)</span>
<span class="n">PsiWhiteSpace</span><span class="o">(</span><span class="sc">' '</span><span class="o">)(</span><span class="mi">256</span><span class="o">,</span><span class="mi">257</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">SEPARATOR</span><span class="o">)(</span><span class="sc">'='</span><span class="o">)(</span><span class="mi">257</span><span class="o">,</span><span class="mi">258</span><span class="o">)</span>
<span class="n">PsiWhiteSpace</span><span class="o">(</span><span class="sc">' '</span><span class="o">)(</span><span class="mi">258</span><span class="o">,</span><span class="mi">259</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">VALUE</span><span class="o">)(</span><span class="err">'</span><span class="n">Welcome</span> <span class="n">to</span> <span class="err">\\</span><span class="n">n</span> <span class="n">Wikipedia</span><span class="o">!</span><span class="err">'</span><span class="o">)(</span><span class="mi">259</span><span class="o">,</span><span class="mi">292</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">CRLF</span><span class="o">)(</span><span class="sc">'\n'</span><span class="o">)(</span><span class="mi">292</span><span class="o">,</span><span class="mi">293</span><span class="o">)</span>
<span class="n">PsiComment</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">COMMENT</span><span class="o">)(</span><span class="err">'#</span> <span class="n">Add</span> <span class="n">spaces</span> <span class="n">to</span> <span class="n">the</span> <span class="n">key</span><span class="err">'</span><span class="o">)(</span><span class="mi">293</span><span class="o">,</span><span class="mi">316</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">CRLF</span><span class="o">)(</span><span class="sc">'\n'</span><span class="o">)(</span><span class="mi">316</span><span class="o">,</span><span class="mi">317</span><span class="o">)</span>
<span class="n">SimplePropertyImpl</span><span class="o">(</span><span class="n">PROPERTY</span><span class="o">)(</span><span class="mi">317</span><span class="o">,</span><span class="mi">410</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">KEY</span><span class="o">)(</span><span class="err">'</span><span class="n">key</span><span class="err">\</span> <span class="n">with</span><span class="err">\</span> <span class="n">spaces</span><span class="err">'</span><span class="o">)(</span><span class="mi">317</span><span class="o">,</span><span class="mi">334</span><span class="o">)</span>
<span class="n">PsiWhiteSpace</span><span class="o">(</span><span class="sc">' '</span><span class="o">)(</span><span class="mi">334</span><span class="o">,</span><span class="mi">335</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">SEPARATOR</span><span class="o">)(</span><span class="sc">'='</span><span class="o">)(</span><span class="mi">335</span><span class="o">,</span><span class="mi">336</span><span class="o">)</span>
<span class="n">PsiWhiteSpace</span><span class="o">(</span><span class="sc">' '</span><span class="o">)(</span><span class="mi">336</span><span class="o">,</span><span class="mi">337</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">VALUE</span><span class="o">)(</span><span class="err">'</span><span class="n">This</span> <span class="n">is</span> <span class="n">the</span> <span class="n">value</span> <span class="n">that</span> <span class="n">could</span> <span class="n">be</span> <span class="n">looked</span> <span class="n">up</span> <span class="n">with</span> <span class="n">the</span> <span class="n">key</span> <span class="s">"key with spaces"</span><span class="o">.</span><span class="err">'</span><span class="o">)(</span><span class="mi">337</span><span class="o">,</span><span class="mi">410</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">CRLF</span><span class="o">)(</span><span class="sc">'\n'</span><span class="o">)(</span><span class="mi">410</span><span class="o">,</span><span class="mi">411</span><span class="o">)</span>
<span class="n">PsiComment</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">COMMENT</span><span class="o">)(</span><span class="err">'#</span> <span class="n">Unicode</span><span class="err">'</span><span class="o">)(</span><span class="mi">411</span><span class="o">,</span><span class="mi">420</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">CRLF</span><span class="o">)(</span><span class="sc">'\n'</span><span class="o">)(</span><span class="mi">420</span><span class="o">,</span><span class="mi">421</span><span class="o">)</span>
<span class="n">SimplePropertyImpl</span><span class="o">(</span><span class="n">PROPERTY</span><span class="o">)(</span><span class="mi">421</span><span class="o">,</span><span class="mi">433</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">KEY</span><span class="o">)(</span><span class="err">'</span><span class="n">tab</span><span class="err">'</span><span class="o">)(</span><span class="mi">421</span><span class="o">,</span><span class="mi">424</span><span class="o">)</span>
<span class="n">PsiWhiteSpace</span><span class="o">(</span><span class="sc">' '</span><span class="o">)(</span><span class="mi">424</span><span class="o">,</span><span class="mi">425</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">SEPARATOR</span><span class="o">)(</span><span class="sc">':'</span><span class="o">)(</span><span class="mi">425</span><span class="o">,</span><span class="mi">426</span><span class="o">)</span>
<span class="n">PsiWhiteSpace</span><span class="o">(</span><span class="sc">' '</span><span class="o">)(</span><span class="mi">426</span><span class="o">,</span><span class="mi">427</span><span class="o">)</span>
<span class="n">PsiElement</span><span class="o">(</span><span class="n">SimpleTokenType</span><span class="o">.</span><span class="na">VALUE</span><span class="o">)(</span><span class="sc">'\u0009'</span><span class="o">)(</span><span class="mi">427</span><span class="o">,</span><span class="mi">433</span><span class="o">)</span>
</code></pre>
<a name="define-a-parsing-test" class="elem-anchor"></a>
<h3>2.4. Define a parsing test<a href="#define-a-parsing-test" class="anchor-link"><span></span></a></h3>
<pre><code class="code-block__wrapper code-block _highlighted lang_java"><span class="kn">package</span> <span class="n">com</span><span class="o">.</span><span class="na">simpleplugin</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">com.intellij.testFramework.ParsingTestCase</span><span class="o">;</span>
<span class="kd">public</span> <span class="kd">class</span> <span class="nc">SimpleParsingTest</span> <span class="kd">extends</span> <span class="n">ParsingTestCase</span> <span class="o">{</span>
<span class="kd">public</span> <span class="nf">SimpleParsingTest</span><span class="o">()</span> <span class="o">{</span>
<span class="kd">super</span><span class="o">(</span><span class="s">""</span><span class="o">,</span> <span class="s">"simple"</span><span class="o">,</span> <span class="k">new</span> <span class="n">SimpleParserDefinition</span><span class="o">());</span>
<span class="o">}</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">testParsingTestData</span><span class="o">()</span> <span class="o">{</span>
<span class="n">doTest</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span>
<span class="o">}</span>
<span class="nd">@Override</span>
<span class="kd">protected</span> <span class="n">String</span> <span class="nf">getTestDataPath</span><span class="o">()</span> <span class="o">{</span>
<span class="k">return</span> <span class="s">"code_samples/simple_language_plugin/testData"</span><span class="o">;</span>
<span class="o">}</span>
<span class="nd">@Override</span>
<span class="kd">protected</span> <span class="kt">boolean</span> <span class="nf">skipSpaces</span><span class="o">()</span> <span class="o">{</span>
<span class="k">return</span> <span class="kc">false</span><span class="o">;</span>
<span class="o">}</span>
<span class="nd">@Override</span>
<span class="kd">protected</span> <span class="kt">boolean</span> <span class="nf">includeRanges</span><span class="o">()</span> <span class="o">{</span>
<span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
</code></pre>
<a name="run-the-test" class="elem-anchor"></a>
<h3>2.5. Run the test<a href="#run-the-test" class="anchor-link"><span></span></a></h3>
<p>Run the test and make sure its green.</p>
<hr />
<p><a href="tests_prerequisites.html"><span>Previous</span></a>
<a href="/intellij/sdk/docs/tutorials/writing_tests_for_plugins.html"><span>Top</span></a>
<a href="completion_test.html"><span>Next</span></a></p>
<div class="last-modified">
Last modified: 28 December 2015
</div>
</article>
<section class="disqus">
<div id="disqus_thread"></div>
</section>
</div>
</section>
</main>
</div>
<script data-main="/intellij/sdk/docs/app/js/main.build" data-baseurl="/intellij/sdk/docs/" src="/intellij/sdk/docs/app/js/vendor/requirejs/require.js"></script>
</body>
</html>