/*
* Copyright 2012 Google Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.errorprone.bugpatterns.argumentselectiondefects;
import com.google.common.collect.ImmutableList;
import com.google.errorprone.BugPattern;
import com.google.errorprone.BugPattern.Category;
import com.google.errorprone.BugPattern.SeverityLevel;
import com.google.errorprone.CompilationTestHelper;
import com.google.errorprone.bugpatterns.BugChecker;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
/** Tests for AssertEqualsArgumentOrderChecker */
@RunWith(JUnit4.class)
public class AssertEqualsArgumentOrderCheckerTest {
private CompilationTestHelper compilationHelper;
/**
* A {@link BugChecker} which runs the AssertEqualsArgumentOrderChecker which looks for
* assertEquals methods declared in a class Test
*/
@BugPattern(
name = "AssertEqualsArgumentOrderCheckerInTest",
category = Category.ONE_OFF,
severity = SeverityLevel.ERROR,
summary = "Run AssertEqualsArgumentOrderChecker looking for methods declared in class Test"
)
public static class AssertEqualsArgumentOrderCheckerInTest
extends AssertEqualsArgumentOrderChecker {
public AssertEqualsArgumentOrderCheckerInTest() {
super(ImmutableList.of("Test"));
}
}
@Before
public void setUp() {
compilationHelper =
CompilationTestHelper.newInstance(AssertEqualsArgumentOrderCheckerInTest.class, getClass());
}
@Test
public void assertEqualsCheck_makesNoSuggestion_withOrderExpectedActual() throws Exception {
compilationHelper
.addSourceLines(
"Test.java",
"abstract class Test {",
" static void assertEquals(Object expected, Object actual) {};",
" void test(Object expected, Object actual) {",
" assertEquals(expected, actual);",
" }",
"}")
.doTest();
}
@Test
public void assertEqualsCheck_makesNoSuggestion_withOrderExpectedActualAndMessage()
throws Exception {
compilationHelper
.addSourceLines(
"Test.java",
"abstract class Test {",
" static void assertEquals(String message, Object expected, Object actual) {};",
" void test(Object expected, Object actual) {",
" assertEquals(\"\", expected, actual);",
" }",
"}")
.doTest();
}
@Test
public void assertEqualsCheck_swapsArguments_withOrderActualExpected() throws Exception {
compilationHelper
.addSourceLines(
"Test.java",
"abstract class Test {",
" static void assertEquals(Object expected, Object actual) {};",
" void test(Object expected, Object actual) {",
" // BUG: Diagnostic contains: assertEquals(expected, actual)",
" assertEquals(actual, expected);",
" }",
"}")
.doTest();
}
@Test
public void assertEqualsCheck_swapsArguments_withOrderActualExpectedAndMessage()
throws Exception {
compilationHelper
.addSourceLines(
"Test.java",
"abstract class Test {",
" static void assertEquals(String message, Object expected, Object actual) {};",
" void test(Object expected, Object actual) {",
" // BUG: Diagnostic contains: assertEquals(\"\", expected, actual)",
" assertEquals(\"\", actual, expected);",
" }",
"}")
.doTest();
}
@Test
public void assertEqualsCheck_swapsArguments_withOnlyExpectedAsPrefix() throws Exception {
compilationHelper
.addSourceLines(
"Test.java",
"abstract class Test {",
" static void assertEquals(Object expected, Object actual) {};",
" abstract Object get();",
" void test(Object expectedValue) {",
" // BUG: Diagnostic contains: assertEquals(expectedValue, get())",
" assertEquals(get(), expectedValue);",
" }",
"}")
.doTest();
}
@Test
public void assertEqualsCheck_swapsArguments_withLiteralForActual() throws Exception {
compilationHelper
.addSourceLines(
"Test.java",
"abstract class Test {",
" static void assertEquals(Object expected, Object actual) {};",
" void test(Object other) {",
" // BUG: Diagnostic contains: assertEquals(1, other)",
" assertEquals(other, 1);",
" }",
"}")
.doTest();
}
@Test
public void assertEqualsCheck_doesntSwap_withLiteralForExpected() throws Exception {
compilationHelper
.addSourceLines(
"Test.java",
"abstract class Test {",
" static void assertEquals(String mesasge, Object expected, Object actual) {};",
" void test(Object other) {",
" assertEquals(\"\",1, other);",
" }",
"}")
.doTest();
}
@Test
public void assertEqualsCheck_makeNoChange_withLiteralForBoth() throws Exception {
compilationHelper
.addSourceLines(
"Test.java",
"abstract class Test {",
" static void assertEquals(Object expected, Object actual) {};",
" void test() {",
" assertEquals(2, 1);",
" }",
"}")
.doTest();
}
@Test
public void assertEqualsCheck_makeNoChange_ifSwapCreatesDuplicateCall() throws Exception {
compilationHelper
.addSourceLines(
"Test.java",
"abstract class Test {",
" static void assertEquals(Object expected, Object actual) {};",
" void test(Object expected, Object actual) {",
" assertEquals(expected, actual);",
" assertEquals(actual, expected);",
" }",
"}")
.doTest();
}
@Test
public void assertEqualsCheck_makesNoChange_withNothingMatching() throws Exception {
compilationHelper
.addSourceLines(
"Test.java",
"abstract class Test {",
" static void assertEquals(Object expected, Object actual) {};",
" void test(Object other1, Object other2) {",
" assertEquals(other1, other2);",
" }",
"}")
.doTest();
}
@Test
public void assertEqualsCheck_makesNoChange_whenArgumentExtendsThrowable() throws Exception {
compilationHelper
.addSourceLines(
"Test.java",
"abstract class Test {",
" static void assertEquals(Object expected, Object actual) {};",
" void test(Exception exception) {",
" try {",
" throw exception;",
" } catch (Exception expected) {",
" assertEquals(exception,expected);",
" }",
" }",
"}")
.doTest();
}
@Test
public void assertEqualsCheck_makesNoChange_whenArgumentIsEnumMember() throws Exception {
compilationHelper
.addSourceLines(
"Test.java",
"abstract class Test {",
" static void assertEquals(Object expected, Object actual) {};",
" enum MyEnum {",
" VALUE",
" }",
" void test(MyEnum expected) {",
" assertEquals(MyEnum.VALUE, expected);",
" }",
"}")
.doTest();
}
}