blob: 9773d9b6a377986d196d9f1351034ffee34316da [file] [log] [blame]
////////////////////////////////////////////////////////////////////////////////
// checkstyle: Checks Java source code for adherence to a set of rules.
// Copyright (C) 2001-2017 the original author or authors.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
////////////////////////////////////////////////////////////////////////////////
package com.puppycrawl.tools.checkstyle.xpath;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import com.puppycrawl.tools.checkstyle.AbstractPathTestSupport;
import com.puppycrawl.tools.checkstyle.api.DetailAST;
import com.puppycrawl.tools.checkstyle.api.FileText;
import com.puppycrawl.tools.checkstyle.internal.utils.TestUtil;
public class XpathQueryGeneratorTest extends AbstractPathTestSupport {
private static final int DEFAULT_TAB_WIDTH = 4;
private static DetailAST rootAst;
private static FileText fileText;
@Override
protected String getPackageLocation() {
return "com/puppycrawl/tools/checkstyle/xpath/xpathquerygenerator";
}
@Before
public void init() throws Exception {
final File file = new File(getPath("InputXpathQueryGenerator.java"));
fileText = new FileText(file,
StandardCharsets.UTF_8.name());
rootAst = TestUtil.parseFile(file);
}
@Test
public void testClassDef() {
final int lineNumber = 12;
final int columnNumber = 1;
final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
columnNumber, fileText, DEFAULT_TAB_WIDTH);
final List<String> actual = queryGenerator.generate();
final List<String> expected = Arrays.asList(
"/CLASS_DEF[@text='InputXpathQueryGenerator']",
"/CLASS_DEF[@text='InputXpathQueryGenerator']/MODIFIERS",
"/CLASS_DEF[@text='InputXpathQueryGenerator']/MODIFIERS/LITERAL_PUBLIC");
assertEquals("Generated queries do not match expected ones", expected, actual);
}
@Test
public void testMethodDef() {
final int lineNumber = 45;
final int columnNumber = 5;
final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
columnNumber, fileText, DEFAULT_TAB_WIDTH);
final List<String> actual = queryGenerator.generate();
final List<String> expected = Arrays.asList(
"/CLASS_DEF[@text='InputXpathQueryGenerator']"
+ "/OBJBLOCK/METHOD_DEF[@text='callSomeMethod']",
"/CLASS_DEF[@text='InputXpathQueryGenerator']"
+ "/OBJBLOCK/METHOD_DEF[@text='callSomeMethod']/MODIFIERS",
"/CLASS_DEF[@text='InputXpathQueryGenerator']"
+ "/OBJBLOCK/METHOD_DEF[@text='callSomeMethod']/MODIFIERS/LITERAL_PUBLIC");
assertEquals("Generated queries do not match expected ones", expected, actual);
}
@Test
public void testVariableDef() {
final int lineNumber = 53;
final int columnNumber = 13;
final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
columnNumber, fileText, DEFAULT_TAB_WIDTH);
final List<String> actual = queryGenerator.generate();
final List<String> expected = Arrays.asList(
"/CLASS_DEF[@text='InputXpathQueryGenerator']/OBJBLOCK"
+ "/METHOD_DEF[@text='callSomeMethod']/SLIST/LITERAL_FOR"
+ "/SLIST/VARIABLE_DEF[@text='d']",
"/CLASS_DEF[@text='InputXpathQueryGenerator']/OBJBLOCK"
+ "/METHOD_DEF[@text='callSomeMethod']/SLIST/LITERAL_FOR"
+ "/SLIST/VARIABLE_DEF[@text='d']/MODIFIERS",
"/CLASS_DEF[@text='InputXpathQueryGenerator']/OBJBLOCK"
+ "/METHOD_DEF[@text='callSomeMethod']/SLIST/LITERAL_FOR"
+ "/SLIST/VARIABLE_DEF[@text='d']/TYPE",
"/CLASS_DEF[@text='InputXpathQueryGenerator']/OBJBLOCK"
+ "/METHOD_DEF[@text='callSomeMethod']/SLIST/LITERAL_FOR"
+ "/SLIST/VARIABLE_DEF[@text='d']/TYPE/LITERAL_SHORT");
assertEquals("Generated queries do not match expected ones", expected, actual);
}
@Test
public void testLcurly() {
final int lineNumber = 37;
final int columnNumber = 20;
final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
columnNumber, fileText, DEFAULT_TAB_WIDTH);
final List<String> actual = queryGenerator.generate();
final List<String> expected = Collections.singletonList(
"/CLASS_DEF[@text='InputXpathQueryGenerator']/OBJBLOCK/METHOD_DEF[@text='Label']"
+ "/SLIST/LITERAL_SWITCH/LCURLY");
assertEquals("Generated queries do not match expected ones", expected, actual);
}
@Test
public void testRcurly() {
final int lineNumber = 25;
final int columnNumber = 5;
final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
columnNumber, fileText, DEFAULT_TAB_WIDTH);
final List<String> actual = queryGenerator.generate();
final List<String> expected = Collections.singletonList(
"/CLASS_DEF[@text='InputXpathQueryGenerator']/OBJBLOCK/INSTANCE_INIT"
+ "/SLIST/RCURLY");
assertEquals("Generated queries do not match expected ones", expected, actual);
}
@Test
public void testExpr() {
final int lineNumber = 17;
final int columnNumber = 50;
final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
columnNumber, fileText, DEFAULT_TAB_WIDTH);
final List<String> actual = queryGenerator.generate();
final List<String> expected = Arrays.asList(
"/CLASS_DEF[@text='InputXpathQueryGenerator']/OBJBLOCK"
+ "/VARIABLE_DEF[@text='mUse4']/ASSIGN/EXPR",
"/CLASS_DEF[@text='InputXpathQueryGenerator']/OBJBLOCK"
+ "/VARIABLE_DEF[@text='mUse4']/ASSIGN/EXPR/DOT");
assertEquals("Generated queries do not match expected ones", expected, actual);
}
@Test
public void testLparen() {
final int lineNumber = 45;
final int columnNumber = 31;
final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
columnNumber, fileText, DEFAULT_TAB_WIDTH);
final List<String> actual = queryGenerator.generate();
final List<String> expected = Collections.singletonList(
"/CLASS_DEF[@text='InputXpathQueryGenerator']/OBJBLOCK"
+ "/METHOD_DEF[@text='callSomeMethod']/LPAREN");
assertEquals("Generated queries do not match expected ones", expected, actual);
}
@Test
public void testEmpty() {
final int lineNumber = 300;
final int columnNumber = 300;
final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
columnNumber, fileText, DEFAULT_TAB_WIDTH);
final List<String> actual = queryGenerator.generate();
assertTrue("Result should be empty", actual.isEmpty());
}
@Test
public void testPackage() {
final int lineNumber = 2;
final int columnNumber = 1;
final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
columnNumber, fileText, DEFAULT_TAB_WIDTH);
final List<String> actual = queryGenerator.generate();
final List<String> expected = Collections.singletonList(
"/PACKAGE_DEF");
assertEquals("Generated queries do not match expected ones", expected, actual);
}
@Test
public void testImport() {
final int lineNumber = 5;
final int columnNumber = 1;
final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
columnNumber, fileText, DEFAULT_TAB_WIDTH);
final List<String> actual = queryGenerator.generate();
final List<String> expected = Collections.singletonList(
"/IMPORT[./DOT[@text='File']]");
assertEquals("Generated queries do not match expected ones", expected, actual);
}
@Test
public void testMethodParams() {
final int lineNumber = 72;
final int columnNumber = 30;
final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
columnNumber, fileText, DEFAULT_TAB_WIDTH);
final List<String> actual = queryGenerator.generate();
final List<String> expected = Arrays.asList(
"/CLASS_DEF[@text='InputXpathQueryGenerator']/OBJBLOCK"
+ "/METHOD_DEF[@text='saveUser']/PARAMETERS",
"/CLASS_DEF[@text='InputXpathQueryGenerator']/OBJBLOCK"
+ "/METHOD_DEF[@text='saveUser']/PARAMETERS/PARAMETER_DEF[@text='name']",
"/CLASS_DEF[@text='InputXpathQueryGenerator']/OBJBLOCK"
+ "/METHOD_DEF[@text='saveUser']/PARAMETERS/PARAMETER_DEF[@text='name']"
+ "/MODIFIERS",
"/CLASS_DEF[@text='InputXpathQueryGenerator']/OBJBLOCK"
+ "/METHOD_DEF[@text='saveUser']/PARAMETERS/PARAMETER_DEF[@text='name']"
+ "/TYPE[@text='String']");
assertEquals("Generated queries do not match expected ones", expected, actual);
}
@Test
public void testSwitch() {
final int lineNumber = 37;
final int columnNumber = 9;
final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
columnNumber, fileText, DEFAULT_TAB_WIDTH);
final List<String> actual = queryGenerator.generate();
final List<String> expected = Collections.singletonList(
"/CLASS_DEF[@text='InputXpathQueryGenerator']/OBJBLOCK"
+ "/METHOD_DEF[@text='Label']/SLIST/LITERAL_SWITCH");
assertEquals("Generated queries do not match expected ones", expected, actual);
}
@Test
public void testSwitchCase() {
final int lineNumber = 38;
final int columnNumber = 13;
final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
columnNumber, fileText, DEFAULT_TAB_WIDTH);
final List<String> actual = queryGenerator.generate();
final List<String> expected = Arrays.asList(
"/CLASS_DEF[@text='InputXpathQueryGenerator']/OBJBLOCK/METHOD_DEF[@text='Label']"
+ "/SLIST/LITERAL_SWITCH/CASE_GROUP",
"/CLASS_DEF[@text='InputXpathQueryGenerator']/OBJBLOCK/METHOD_DEF[@text='Label']"
+ "/SLIST/LITERAL_SWITCH/CASE_GROUP/LITERAL_DEFAULT");
assertEquals("Generated queries do not match expected ones", expected, actual);
}
@Test
public void testVariableStringLiteral() {
final int lineNumber = 47;
final int columnNumber = 26;
final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
columnNumber, fileText, DEFAULT_TAB_WIDTH);
final List<String> actual = queryGenerator.generate();
final List<String> expected = Arrays.asList(
"/CLASS_DEF[@text='InputXpathQueryGenerator']/OBJBLOCK"
+ "/METHOD_DEF[@text='callSomeMethod']/SLIST/VARIABLE_DEF[@text='another']"
+ "/ASSIGN/EXPR",
"/CLASS_DEF[@text='InputXpathQueryGenerator']/OBJBLOCK"
+ "/METHOD_DEF[@text='callSomeMethod']/SLIST/VARIABLE_DEF[@text='another']"
+ "/ASSIGN/EXPR/STRING_LITERAL");
assertEquals("Generated queries do not match expected ones", expected, actual);
}
@Test
public void testComma() {
final int lineNumber = 66;
final int columnNumber = 36;
final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
columnNumber, fileText, DEFAULT_TAB_WIDTH);
final List<String> actual = queryGenerator.generate();
final List<String> expected = Collections.singletonList(
"/CLASS_DEF[@text='InputXpathQueryGenerator']/OBJBLOCK/METHOD_DEF[@text='foo']"
+ "/SLIST/LITERAL_FOR/FOR_ITERATOR/ELIST/COMMA");
assertEquals("Generated queries do not match expected ones", expected, actual);
}
@Test
public void testLiteralVoid() {
final int lineNumber = 65;
final int columnNumber = 12;
final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
columnNumber, fileText, DEFAULT_TAB_WIDTH);
final List<String> actual = queryGenerator.generate();
final List<String> expected = Arrays.asList(
"/CLASS_DEF[@text='InputXpathQueryGenerator']/OBJBLOCK"
+ "/METHOD_DEF[@text='foo']/TYPE",
"/CLASS_DEF[@text='InputXpathQueryGenerator']/OBJBLOCK"
+ "/METHOD_DEF[@text='foo']/TYPE/LITERAL_VOID");
assertEquals("Generated queries do not match expected ones", expected, actual);
}
@Test
public void testFirstImport() {
final int lineNumber = 4;
final int columnNumber = 1;
final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
columnNumber, fileText, DEFAULT_TAB_WIDTH);
final List<String> actual = queryGenerator.generate();
final List<String> expected = Collections.singletonList(
"/IMPORT[./DOT[@text='JToolBar']]");
assertEquals("Generated queries do not match expected ones", expected, actual);
}
@Test
public void testLastImport() {
final int lineNumber = 8;
final int columnNumber = 1;
final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
columnNumber, fileText, DEFAULT_TAB_WIDTH);
final List<String> actual = queryGenerator.generate();
final List<String> expected = Collections.singletonList(
"/IMPORT[./DOT[@text='Iterator']]");
assertEquals("Generated queries do not match expected ones", expected, actual);
}
@Test
public void testTabWidthBeforeMethodDef() throws Exception {
final File testFile = new File(getPath("InputXpathQueryGeneratorTabWidth.java"));
final FileText testFileText = new FileText(testFile,
StandardCharsets.UTF_8.name());
final DetailAST detailAst = TestUtil.parseFile(testFile);
final int lineNumber = 4;
final int columnNumber = 13;
final int tabWidth = 4;
final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(detailAst, lineNumber,
columnNumber, testFileText, tabWidth);
final List<String> actual = queryGenerator.generate();
final List<String> expected = Arrays.asList(
"/CLASS_DEF[@text='InputXpathQueryGeneratorTabWidth']/OBJBLOCK"
+ "/METHOD_DEF[@text='toString']",
"/CLASS_DEF[@text='InputXpathQueryGeneratorTabWidth']/OBJBLOCK"
+ "/METHOD_DEF[@text='toString']/MODIFIERS",
"/CLASS_DEF[@text='InputXpathQueryGeneratorTabWidth']/OBJBLOCK"
+ "/METHOD_DEF[@text='toString']/MODIFIERS/LITERAL_PUBLIC");
assertEquals("Generated queries do not match expected ones", expected, actual);
}
@Test
public void testTabWidthAfterVoidLiteral() throws Exception {
final File testFile = new File(getPath("InputXpathQueryGeneratorTabWidth.java"));
final FileText testFileText = new FileText(testFile,
StandardCharsets.UTF_8.name());
final DetailAST detailAst = TestUtil.parseFile(testFile);
final int lineNumber = 8;
final int columnNumber = 41;
final int tabWidth = 8;
final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(detailAst, lineNumber,
columnNumber, testFileText, tabWidth);
final List<String> actual = queryGenerator.generate();
final List<String> expected = Arrays.asList(
"/CLASS_DEF[@text='InputXpathQueryGeneratorTabWidth']/OBJBLOCK"
+ "/METHOD_DEF[@text='getName']/TYPE",
"/CLASS_DEF[@text='InputXpathQueryGeneratorTabWidth']/OBJBLOCK"
+ "/METHOD_DEF[@text='getName']/TYPE/LITERAL_VOID");
assertEquals("Generated queries do not match expected ones", expected, actual);
}
@Test
public void testTabWidthBeforeSlist() throws Exception {
final File testFile = new File(getPath("InputXpathQueryGeneratorTabWidth.java"));
final FileText testFileText = new FileText(testFile,
StandardCharsets.UTF_8.name());
final DetailAST detailAst = TestUtil.parseFile(testFile);
final int lineNumber = 12;
final int columnNumber = 57;
final int tabWidth = 8;
final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(detailAst, lineNumber,
columnNumber, testFileText, tabWidth);
final List<String> actual = queryGenerator.generate();
final List<String> expected = Collections.singletonList(
"/CLASS_DEF[@text='InputXpathQueryGeneratorTabWidth']/OBJBLOCK"
+ "/METHOD_DEF[@text='tabAfterMe']/SLIST");
assertEquals("Generated queries do not match expected ones", expected, actual);
}
@Test
public void testTabWidthEndOfLine() throws Exception {
final File testFile = new File(getPath("InputXpathQueryGeneratorTabWidth.java"));
final FileText testFileText = new FileText(testFile,
StandardCharsets.UTF_8.name());
final DetailAST detailAst = TestUtil.parseFile(testFile);
final int lineNumber = 16;
final int columnNumber = 58;
final int tabWidth = 8;
final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(detailAst, lineNumber,
columnNumber, testFileText, tabWidth);
final List<String> actual = queryGenerator.generate();
final List<String> expected = Collections.singletonList(
"/CLASS_DEF[@text='InputXpathQueryGeneratorTabWidth']/OBJBLOCK"
+ "/VARIABLE_DEF[@text='endLineTab']/SEMI");
assertEquals("Generated queries do not match expected ones", expected, actual);
}
}