Skip to content

Commit

Permalink
chore: add unit tests for #2
Browse files Browse the repository at this point in the history
  • Loading branch information
bjansen-caps committed Apr 3, 2023
1 parent 100850e commit 7253471
Show file tree
Hide file tree
Showing 8 changed files with 191 additions and 0 deletions.
3 changes: 3 additions & 0 deletions build.gradle
Expand Up @@ -8,6 +8,7 @@ plugins {
id 'org.jetbrains.intellij' version '1.13.3'
id 'maven-publish'
id 'signing'
id 'antlr'
}

wrapper {
Expand Down Expand Up @@ -41,11 +42,13 @@ dependencies {
implementation("org.antlr:antlr4-runtime:$antlr4Version") {
exclude group:'com.ibm.icu', module:'icu4j'
}
antlr "org.antlr:antlr4:$antlr4Version"
}

task sourcesJar(type: Jar) {
from sourceSets.main.allJava
archiveClassifier.set('sources')
dependsOn(':generateGrammarSource')
}

task javadocJar(type: Jar) {
Expand Down
18 changes: 18 additions & 0 deletions src/test/antlr/issue2/Issue2.g4
@@ -0,0 +1,18 @@
grammar Issue2;

@header {
package org.antlr.intellij.adaptor.issue2;
}

block
: 'start' ID ';'
usesList
'end' ID ';'
;

usesList
: 'uses' ID (',' ID)* ';'
;

ID: [a-zA-Z]+;
WS: [\t\r\n ]+ -> skip;
40 changes: 40 additions & 0 deletions src/test/java/issue2/Issue2FileType.java
@@ -0,0 +1,40 @@
package issue2;

import com.intellij.openapi.fileTypes.LanguageFileType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import javax.swing.*;

class Issue2FileType extends LanguageFileType {

static Issue2FileType INSTANCE = new Issue2FileType();

private Issue2FileType() {
super(Issue2Language.INSTANCE);
}

@NotNull
@Override
public String getName() {
return "Issue 2";
}

@NotNull
@Override
public String getDescription() {
return "Issue 2";
}

@NotNull
@Override
public String getDefaultExtension() {
return "ext";
}

@Nullable
@Override
public Icon getIcon() {
return null;
}
}
12 changes: 12 additions & 0 deletions src/test/java/issue2/Issue2Language.java
@@ -0,0 +1,12 @@
package issue2;

import com.intellij.lang.Language;

class Issue2Language extends Language {

static Issue2Language INSTANCE = new Issue2Language();

private Issue2Language() {
super("Issue2");
}
}
85 changes: 85 additions & 0 deletions src/test/java/issue2/Issue2ParserDefinition.java
@@ -0,0 +1,85 @@
package issue2;

import com.intellij.extapi.psi.PsiFileBase;
import com.intellij.lang.ASTNode;
import com.intellij.lang.ParserDefinition;
import com.intellij.lang.PsiParser;
import com.intellij.lexer.Lexer;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.project.Project;
import com.intellij.psi.FileViewProvider;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.IFileElementType;
import com.intellij.psi.tree.TokenSet;
import org.antlr.intellij.adaptor.issue2.Issue2Lexer;
import org.antlr.intellij.adaptor.issue2.Issue2Parser;
import org.antlr.intellij.adaptor.lexer.ANTLRLexerAdaptor;
import org.antlr.intellij.adaptor.lexer.PSIElementTypeFactory;
import org.antlr.intellij.adaptor.parser.ANTLRParserAdaptor;
import org.antlr.intellij.adaptor.psi.ANTLRPsiNode;
import org.antlr.v4.runtime.Parser;
import org.antlr.v4.runtime.tree.ParseTree;
import org.jetbrains.annotations.NotNull;

public class Issue2ParserDefinition implements ParserDefinition {

public Issue2ParserDefinition() {
PSIElementTypeFactory.defineLanguageIElementTypes(
Issue2Language.INSTANCE,
Issue2Lexer.VOCABULARY,
Issue2Parser.ruleNames
);
}

@NotNull
@Override
public Lexer createLexer(Project project) {
return new ANTLRLexerAdaptor(Issue2Language.INSTANCE, new Issue2Lexer(null));
}

@Override
public PsiParser createParser(Project project) {
return new ANTLRParserAdaptor(Issue2Language.INSTANCE, new Issue2Parser(null)) {
@Override
protected ParseTree parse(Parser parser, IElementType root) {
return ((Issue2Parser) parser).block();
}
};
}

@Override
public IFileElementType getFileNodeType() {
return new IFileElementType(Issue2Language.INSTANCE);
}

@NotNull
@Override
public TokenSet getCommentTokens() {
return TokenSet.EMPTY;
}

@NotNull
@Override
public TokenSet getStringLiteralElements() {
return TokenSet.EMPTY;
}

@NotNull
@Override
public PsiElement createElement(ASTNode node) {
return new ANTLRPsiNode(node);
}

@Override
public PsiFile createFile(FileViewProvider viewProvider) {
return new PsiFileBase(viewProvider, Issue2Language.INSTANCE) {
@NotNull
@Override
public FileType getFileType() {
return Issue2FileType.INSTANCE;
}
};
}
}
19 changes: 19 additions & 0 deletions src/test/java/issue2/Issue2ParserTest.java
@@ -0,0 +1,19 @@
package issue2;

import com.intellij.testFramework.ParsingTestCase;

public class Issue2ParserTest extends ParsingTestCase {

public Issue2ParserTest() {
super("issue2", "ext", true, new Issue2ParserDefinition());
}

public void testIssue2() {
doTest(true);
}

@Override
protected String getTestDataPath() {
return "src/test/resources/testData";
}
}
3 changes: 3 additions & 0 deletions src/test/resources/testData/issue2/issue2.ext
@@ -0,0 +1,3 @@
start X;
uses ducks
end X;
11 changes: 11 additions & 0 deletions src/test/resources/testData/issue2/issue2.txt
@@ -0,0 +1,11 @@
FILE
ANTLRPsiNode(block)
PsiElement('start')('start ')
PsiElement(ID)('X')
PsiElement(';')(';\n ')
PsiErrorElement:mismatched input 'end ' expecting {';', ','}
PsiElement('uses')('uses ')
PsiElement(ID)('ducks\n')
PsiElement('end')('end ')
PsiElement(ID)('X')
PsiElement(';')(';')

0 comments on commit 7253471

Please sign in to comment.