package org.elixir_lang.elixir_flex_lexer;
import com.intellij.psi.TokenType;
import com.intellij.psi.tree.IElementType;
import org.elixir_lang.ElixirFlexLexer;
import org.elixir_lang.psi.ElixirTypes;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
/**
* Created by luke.imhoff on 11/28/14.
*/
@RunWith(Parameterized.class)
public class BinaryIntegerTest extends TokenTest {
/*
* Constructors
*/
public BinaryIntegerTest(CharSequence charSequence, IElementType tokenType, int lexicalState) {
super(charSequence, tokenType, lexicalState);
}
/*
* Methods
*/
@Override
protected void reset(CharSequence charSequence) throws IOException {
// start to trigger BINARY_WHOLE_NUMBER state
CharSequence fullCharSequence = "0b" + charSequence;
super.reset(fullCharSequence);
// consume '0'
flexLexer.advance();
// consume 'b'
flexLexer.advance();
}
@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, INITIAL_STATE },
{ "!", ElixirTypes.UNARY_OPERATOR, ElixirFlexLexer.KEYWORD_PAIR_MAYBE },
{ "#", ElixirTypes.COMMENT, INITIAL_STATE },
{ "$", TokenType.BAD_CHARACTER, INITIAL_STATE },
{ "%", ElixirTypes.STRUCT_OPERATOR, ElixirFlexLexer.KEYWORD_PAIR_MAYBE },
{ "&", ElixirTypes.CAPTURE_OPERATOR, ElixirFlexLexer.KEYWORD_PAIR_MAYBE },
{ "'", ElixirTypes.CHAR_LIST_PROMOTER, ElixirFlexLexer.GROUP },
{ "'''", ElixirTypes.CHAR_LIST_HEREDOC_PROMOTER, ElixirFlexLexer.GROUP_HEREDOC_START },
{ "(", ElixirTypes.OPENING_PARENTHESIS, INITIAL_STATE },
{ ")", ElixirTypes.CLOSING_PARENTHESIS, INITIAL_STATE },
{ "*", ElixirTypes.MULTIPLICATION_OPERATOR, ElixirFlexLexer.KEYWORD_PAIR_MAYBE },
{ "+", ElixirTypes.DUAL_OPERATOR, ElixirFlexLexer.DUAL_OPERATION },
{ ",", ElixirTypes.COMMA, INITIAL_STATE },
{ "-", ElixirTypes.DUAL_OPERATOR, ElixirFlexLexer.DUAL_OPERATION },
{ ".", ElixirTypes.DOT_OPERATOR, ElixirFlexLexer.DOT_OPERATION },
{ "/", ElixirTypes.MULTIPLICATION_OPERATOR, ElixirFlexLexer.KEYWORD_PAIR_MAYBE },
{ "0", ElixirTypes.VALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "1", ElixirTypes.VALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "2", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "3", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "4", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "5", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "6", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "7", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "8", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "9", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ ":", ElixirTypes.COLON, ElixirFlexLexer.ATOM_START },
{ ";", ElixirTypes.SEMICOLON, INITIAL_STATE },
{ "<", ElixirTypes.RELATIONAL_OPERATOR, ElixirFlexLexer.KEYWORD_PAIR_MAYBE },
{ "=", ElixirTypes.MATCH_OPERATOR, ElixirFlexLexer.KEYWORD_PAIR_MAYBE },
{ ">", ElixirTypes.RELATIONAL_OPERATOR, ElixirFlexLexer.KEYWORD_PAIR_MAYBE },
{ "?", ElixirTypes.CHAR_TOKENIZER, ElixirFlexLexer.CHAR_TOKENIZATION },
{ "@", ElixirTypes.AT_OPERATOR, ElixirFlexLexer.KEYWORD_PAIR_MAYBE },
{ "A", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "B", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "C", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "D", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "E", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "F", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "G", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "H", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "I", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "J", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "K", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "L", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "M", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "N", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "O", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "P", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "Q", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "R", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "S", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "T", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "U", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "V", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "W", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "X", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "Y", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "Z", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "[", ElixirTypes.OPENING_BRACKET, INITIAL_STATE },
{ "\"", ElixirTypes.STRING_PROMOTER, ElixirFlexLexer.GROUP },
{ "\"\"\"", ElixirTypes.STRING_HEREDOC_PROMOTER, ElixirFlexLexer.GROUP_HEREDOC_START },
{ "\n", ElixirTypes.EOL, INITIAL_STATE },
{ "\r\n", ElixirTypes.EOL, INITIAL_STATE },
{ "]", ElixirTypes.CLOSING_BRACKET, INITIAL_STATE },
{ "^", ElixirTypes.UNARY_OPERATOR, ElixirFlexLexer.KEYWORD_PAIR_MAYBE },
{ "_", ElixirTypes.IDENTIFIER_TOKEN, ElixirFlexLexer.CALL_OR_KEYWORD_PAIR_MAYBE },
{ "`", TokenType.BAD_CHARACTER, INITIAL_STATE },
{ "a", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "b", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "c", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "d", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "e", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "f", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "g", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "h", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "i", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "j", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "k", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "l", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "m", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "n", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "o", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "p", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "q", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "r", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "s", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "t", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "u", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "v", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "w", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "x", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "y", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "z", ElixirTypes.INVALID_BINARY_DIGITS, ElixirFlexLexer.BINARY_WHOLE_NUMBER },
{ "{", ElixirTypes.OPENING_CURLY, INITIAL_STATE },
{ "|", ElixirTypes.PIPE_OPERATOR, ElixirFlexLexer.KEYWORD_PAIR_MAYBE },
{ "}", ElixirTypes.CLOSING_CURLY, INITIAL_STATE },
{ "~", ElixirTypes.TILDE, ElixirFlexLexer.SIGIL }
});
}
}