package org.elixir_lang.elixir_flex_lexer.sigil_modifiers.group_heredoc_end; import com.intellij.psi.TokenType; import com.intellij.psi.tree.IElementType; import org.elixir_lang.ElixirFlexLexer; import org.elixir_lang.elixir_flex_lexer.TokenTest; import org.elixir_lang.psi.ElixirTypes; import org.junit.Ignore; import org.junit.runners.Parameterized; import java.io.IOException; import java.util.Arrays; import java.util.Collection; /** * Created by luke.imhoff on 10/23/14. */ @Ignore("abstract") public abstract class Test extends TokenTest { /* * Constructors */ public Test(CharSequence charSequence, IElementType tokenType, int lexicalState) { super(charSequence, tokenType, lexicalState); } /* * Methods */ @Parameterized.Parameters( name = "\"{0}\" parses as {1} token and advances to state {2}" ) public static Collection<Object[]> generateData() { return Arrays.asList(new Object[][]{ { " ", TokenType.WHITE_SPACE, ElixirFlexLexer.YYINITIAL }, { ";", ElixirTypes.SEMICOLON, ElixirFlexLexer.YYINITIAL }, { "A", ElixirTypes.ALIAS_TOKEN, ElixirFlexLexer.KEYWORD_PAIR_MAYBE }, { "\n", ElixirTypes.EOL, ElixirFlexLexer.YYINITIAL }, { "\r\n", ElixirTypes.EOL, ElixirFlexLexer.YYINITIAL }, { "a", ElixirTypes.SIGIL_MODIFIER, ElixirFlexLexer.SIGIL_MODIFIERS } } ); } protected abstract CharSequence quotes(); protected void reset(CharSequence charSequence) throws IOException { // start to trigger SIGIL_MODIFIERS after GROUP CharSequence fullCharSequence = "~r" + quotes() + "\n" + quotes() + charSequence; super.reset(fullCharSequence); // consume ~ flexLexer.advance(); // consume r flexLexer.advance(); // consume quotes flexLexer.advance(); // consume '\n' flexLexer.advance(); // consume quotes flexLexer.advance(); } }