////////////////////////////////////////////////////////////////////////////////
// checkstyle: Checks Java source code for adherence to a set of rules.
// Copyright (C) 2001-2014 Oliver Burn
//
// 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.checks.imports;
import com.puppycrawl.tools.checkstyle.BaseCheckTestSupport;
import com.puppycrawl.tools.checkstyle.DefaultConfiguration;
import java.io.File;
import org.junit.Test;
public class ImportOrderCheckTest extends BaseCheckTestSupport
{
@Test
public void testDefault() throws Exception
{
final DefaultConfiguration checkConfig =
createCheckConfig(ImportOrderCheck.class);
final String[] expected = {
"5: Wrong order for 'java.awt.Dialog' import.",
"9: Wrong order for 'javax.swing.JComponent' import.",
"11: Wrong order for 'java.io.File' import.",
"13: Wrong order for 'java.io.IOException' import.",
};
verify(checkConfig, getPath("imports" + File.separator + "InputImportOrder.java"), expected);
}
@Test
public void testGroups() throws Exception
{
final DefaultConfiguration checkConfig = createCheckConfig(ImportOrderCheck.class);
checkConfig.addAttribute("groups", "java.awt");
checkConfig.addAttribute("groups", "javax.swing");
checkConfig.addAttribute("groups", "java.io");
final String[] expected = {
"5: Wrong order for 'java.awt.Dialog' import.",
"13: Wrong order for 'java.io.IOException' import.",
"16: Wrong order for 'javax.swing.WindowConstants.*' import.",
};
verify(checkConfig, getPath("imports" + File.separator + "InputImportOrder.java"), expected);
}
@Test
public void testGroupsRegexp() throws Exception
{
final DefaultConfiguration checkConfig = createCheckConfig(ImportOrderCheck.class);
checkConfig.addAttribute("groups", "java, /^javax?\\.(awt|swing)\\./");
checkConfig.addAttribute("ordered", "false");
final String[] expected = {
"11: Wrong order for 'java.io.File' import.",
};
verify(checkConfig, getPath("imports" + File.separator + "InputImportOrder.java"), expected);
}
@Test
public void testSeparated() throws Exception
{
final DefaultConfiguration checkConfig = createCheckConfig(ImportOrderCheck.class);
checkConfig.addAttribute("groups", "java.awt, javax.swing, java.io");
checkConfig.addAttribute("separated", "true");
checkConfig.addAttribute("ordered", "false");
final String[] expected = {
"9: 'javax.swing.JComponent' should be separated from previous imports.",
"11: 'java.io.File' should be separated from previous imports.",
"16: Wrong order for 'javax.swing.WindowConstants.*' import.",
};
verify(checkConfig, getPath("imports" + File.separator + "InputImportOrder.java"), expected);
}
@Test
public void testCaseInsensitive() throws Exception
{
final DefaultConfiguration checkConfig = createCheckConfig(ImportOrderCheck.class);
checkConfig.addAttribute("caseSensitive", "false");
final String[] expected = {
};
verify(checkConfig, getPath("imports" + File.separator + "InputImportOrderCaseInsensitive.java"), expected);
}
@Test
public void testTop() throws Exception
{
final DefaultConfiguration checkConfig =
createCheckConfig(ImportOrderCheck.class);
checkConfig.addAttribute("option", "top");
final String[] expected = {
"4: Wrong order for 'java.awt.Button.ABORT' import.",
"18: Wrong order for 'java.io.File.*' import.",
};
verify(checkConfig, getPath("imports" + File.separator + "InputImportOrder_Top.java"), expected);
}
@Test
public void testAbove() throws Exception
{
final DefaultConfiguration checkConfig =
createCheckConfig(ImportOrderCheck.class);
checkConfig.addAttribute("option", "above");
final String[] expected = {
"5: Wrong order for 'java.awt.Button.ABORT' import.",
"8: Wrong order for 'java.awt.Dialog' import.",
"13: Wrong order for 'java.io.File' import.",
"14: Wrong order for 'java.io.File.createTempFile' import.",
};
verify(checkConfig, getPath("imports" + File.separator + "InputImportOrder_Above.java"), expected);
}
@Test
public void testInFlow() throws Exception
{
final DefaultConfiguration checkConfig =
createCheckConfig(ImportOrderCheck.class);
checkConfig.addAttribute("option", "inflow");
final String[] expected = {
"6: Wrong order for 'java.awt.Dialog' import.",
"11: Wrong order for 'javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE' import.",
"12: Wrong order for 'javax.swing.WindowConstants.*' import.",
"13: Wrong order for 'javax.swing.JTable' import.",
"15: Wrong order for 'java.io.File.createTempFile' import.",
"16: Wrong order for 'java.io.File' import.",
};
verify(checkConfig, getPath("imports" + File.separator + "InputImportOrder_InFlow.java"), expected);
}
@Test
public void testUnder() throws Exception
{
// is default (testDefault)
final DefaultConfiguration checkConfig =
createCheckConfig(ImportOrderCheck.class);
checkConfig.addAttribute("option", "under");
final String[] expected = {
"5: Wrong order for 'java.awt.Dialog' import.",
"11: Wrong order for 'java.awt.Button.ABORT' import.",
"14: Wrong order for 'java.io.File' import.",
};
verify(checkConfig, getPath("imports" + File.separator + "InputImportOrder_Under.java"), expected);
}
@Test
public void testBottom() throws Exception
{
final DefaultConfiguration checkConfig =
createCheckConfig(ImportOrderCheck.class);
checkConfig.addAttribute("option", "bottom");
final String[] expected = {
"15: Wrong order for 'java.io.File' import.",
"18: Wrong order for 'java.awt.Button.ABORT' import.",
"21: Wrong order for 'java.io.Reader' import.",
};
verify(checkConfig, getPath("imports" + File.separator + "InputImportOrder_Bottom.java"), expected);
}
@Test
public void testHonorsTokenProperty() throws Exception
{
final DefaultConfiguration checkConfig =
createCheckConfig(ImportOrderCheck.class);
checkConfig.addAttribute("tokens", "IMPORT");
final String[] expected = {
"6: Wrong order for 'java.awt.Button' import.",
};
verify(checkConfig, getPath("imports" + File.separator + "InputImportOrder_HonorsTokensProperty.java"), expected);
}
@Test
public void testWildcard() throws Exception
{
final DefaultConfiguration checkConfig = createCheckConfig(ImportOrderCheck.class);
checkConfig.addAttribute("groups", "com,*,java");
final String[] expected = {
"9: Wrong order for 'javax.crypto.Cipher' import.",
};
verify(checkConfig, getPath("imports" + File.separator + "InputImportOrder_Wildcard.java"), expected);
}
@Test
public void testWildcardUnspecified() throws Exception
{
final DefaultConfiguration checkConfig = createCheckConfig(ImportOrderCheck.class);
/*
<property name="ordered" value="true"/>
<property name="separated" value="true"/>
*/
checkConfig.addAttribute("groups", "java,javax,org");
final String[] expected = {};
verify(checkConfig, getPath("imports" + File.separator + "InputImportOrder_WildcardUnspecified.java"), expected);
}
@Test
public void testNoFailureForRedundantImports() throws Exception
{
final DefaultConfiguration checkConfig =
createCheckConfig(ImportOrderCheck.class);
final String[] expected = {};
verify(checkConfig, getPath("imports" + File.separator + "InputImportOrder_NoFailureForRedundantImports.java"), expected);
}
}