///*
// * [The "BSD licence"]
// * Copyright (c) 2010 Ben Gruver
// * All rights reserved.
// *
// * Redistribution and use in source and binary forms, with or without
// * modification, are permitted provided that the following conditions
// * are met:
// * 1. Redistributions of source code must retain the above copyright
// * notice, this list of conditions and the following disclaimer.
// * 2. Redistributions in binary form must reproduce the above copyright
// * notice, this list of conditions and the following disclaimer in the
// * documentation and/or other materials provided with the distribution.
// * 3. The name of the author may not be used to endorse or promote products
// * derived from this software without specific prior written permission.
// *
// * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
// * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
// * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
// * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// * INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
// * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// */
//
//import org.antlr.runtime.ANTLRInputStream;
//import org.antlr.runtime.CommonToken;
//import org.antlr.runtime.CommonTokenStream;
//import org.antlr.runtime.RecognitionException;
//import org.jf.dexlib.Util.Utf8Utils;
//import org.jf.smali.*;
//import org.junit.Assert;
//import org.junit.Test;
//
//import java.io.*;
//import java.util.HashMap;
//import java.util.List;
//
//public class LexerTest {
// private static final HashMap<String, Integer> tokenTypesByName;
//
// static {
// tokenTypesByName = new HashMap<String, Integer>();
//
// for (int i=0; i<smaliParser.tokenNames.length; i++) {
// tokenTypesByName.put(smaliParser.tokenNames[i], i);
// }
// }
//
// @Test
// public void DirectiveTest() {
// runTest("DirectiveTest");
// }
//
// @Test
// public void ByteLiteralTest() {
// runTest("ByteLiteralTest");
// }
//
// @Test
// public void ShortLiteralTest() {
// runTest("ShortLiteralTest");
// }
//
// @Test
// public void IntegerLiteralTest() {
// runTest("IntegerLiteralTest");
// }
//
// @Test
// public void LongLiteralTest() {
// runTest("LongLiteralTest");
// }
//
// @Test
// public void FloatLiteralTest() {
// runTest("FloatLiteralTest");
// }
//
// @Test
// public void CharLiteralTest() {
// runTest("CharLiteralTest");
// }
//
// @Test
// public void StringLiteralTest() {
// runTest("StringLiteralTest");
// }
//
// @Test
// public void MiscTest() {
// runTest("MiscTest");
// }
//
// @Test
// public void CommentTest() {
// runTest("CommentTest", false);
// }
//
// @Test
// public void InstructionTest() {
// runTest("InstructionTest", true);
// }
//
// @Test
// public void TypeAndIdentifierTest() {
// runTest("TypeAndIdentifierTest");
// }
//
// @Test
// public void SymbolTest() {
// runTest("SymbolTest", false);
// }
//
// @Test
// public void RealSmaliFileTest() {
// runTest("RealSmaliFileTest", true);
// }
//
// public void runTest(String test) {
// runTest(test, true);
// }
//
// public void runTest(String test, boolean discardHiddenTokens) {
// String smaliFile = String.format("LexerTest%s%s.smali", File.separatorChar, test);
// String tokensFile = String.format("LexerTest%s%s.tokens", File.separatorChar, test);
//
// expectedTokensTestGrammarLexer expectedTokensLexer = null;
// try {
// expectedTokensLexer = new expectedTokensTestGrammarLexer(new ANTLRInputStream(
// LexerTest.class.getClassLoader().getResourceAsStream(tokensFile)));
// } catch (IOException ex) {
// throw new RuntimeException(ex);
// }
//
// CommonTokenStream expectedTokensStream = new CommonTokenStream(expectedTokensLexer);
//
// expectedTokensTestGrammarParser expectedTokensParser =
// new expectedTokensTestGrammarParser(expectedTokensStream);
// try {
// expectedTokensParser.top();
// } catch (RecognitionException ex) {
// throw new RuntimeException(ex);
// }
//
// List<ExpectedToken> expectedTokens = expectedTokensParser.getExpectedTokens();
//
// InputStream smaliStream = LexerTest.class.getClassLoader().getResourceAsStream(smaliFile);
// if (smaliStream == null) {
// Assert.fail("Could not load " + smaliFile);
// }
// smaliFlexLexer lexer = new smaliFlexLexer(smaliStream);
// lexer.setSourceFile(new File(test + ".smali"));
// lexer.setSuppressErrors(true);
//
// CommonTokenStream tokenStream = new CommonTokenStream(lexer);
// List tokens = tokenStream.getTokens();
//
// int expectedTokenIndex = 0;
// CommonToken token;
// for (int i=0; i<tokens.size(); i++) {
// token = (CommonToken)tokens.get(i);
//
// if (discardHiddenTokens && token.getChannel() == smaliParser.HIDDEN) {
// continue;
// }
//
// if (expectedTokenIndex >= expectedTokens.size()) {
// Assert.fail("Too many tokens");
// }
//
// if (token.getType() == smaliParser.INVALID_TOKEN) {
// Assert.assertTrue("Encountered an INVALID_TOKEN not on the error channel",
// token.getChannel() == smaliParser.ERROR_CHANNEL);
// }
//
// ExpectedToken expectedToken = expectedTokens.get(expectedTokenIndex++);
// if (!tokenTypesByName.containsKey(expectedToken.tokenName)) {
// Assert.fail("Unknown token: " + expectedToken.tokenName);
// }
// int expectedTokenType = tokenTypesByName.get(expectedToken.tokenName);
//
// if (token.getType() != expectedTokenType) {
// Assert.fail(String.format("Invalid token at index %d. Expecting %s, got %s(%s)",
// expectedTokenIndex-1, expectedToken.tokenName, getTokenName(token.getType()), token.getText()));
// }
//
// if (expectedToken.tokenText != null) {
// if (!expectedToken.tokenText.equals(token.getText())) {
// Assert.fail(
// String.format("Invalid token text at index %d. Expecting text \"%s\", got \"%s\"",
// expectedTokenIndex - 1, expectedToken.tokenText, token.getText()));
// }
// }
// }
//
// if (expectedTokenIndex < expectedTokens.size()) {
// Assert.fail(String.format("Not enough tokens. Expecting %d tokens, but got %d", expectedTokens.size(),
// expectedTokenIndex));
// }
// }
//
//
//
// private static String getTokenName(int tokenType) {
// return smaliParser.tokenNames[tokenType];
// }
//}