blob: 1b885f3cfc8837699112f804a0a4f1f415eefc0e [file] [log] [blame]
/*
* Copyright (C) 2013 The Android Open Source Project
*
* 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.android.tools.lint.checks;
import com.android.tools.lint.detector.api.Detector;
public class CallSuperDetectorTest extends AbstractCheckTest {
@Override
protected Detector getDetector() {
return new CallSuperDetector();
}
public void testCallSuper() throws Exception {
assertEquals(""
+ "src/test/pkg/CallSuperTest.java:11: Error: Overriding method should call super.test1 [MissingSuperCall]\n"
+ " protected void test1() { // ERROR\n"
+ " ~~~~~~~\n"
+ "src/test/pkg/CallSuperTest.java:14: Error: Overriding method should call super.test2 [MissingSuperCall]\n"
+ " protected void test2() { // ERROR\n"
+ " ~~~~~~~\n"
+ "src/test/pkg/CallSuperTest.java:17: Error: Overriding method should call super.test3 [MissingSuperCall]\n"
+ " protected void test3() { // ERROR\n"
+ " ~~~~~~~\n"
+ "src/test/pkg/CallSuperTest.java:20: Error: Overriding method should call super.test4 [MissingSuperCall]\n"
+ " protected void test4(int arg) { // ERROR\n"
+ " ~~~~~~~~~~~~~~\n"
+ "src/test/pkg/CallSuperTest.java:26: Error: Overriding method should call super.test5 [MissingSuperCall]\n"
+ " protected void test5(int arg1, boolean arg2, Map<List<String>,?> arg3, // ERROR\n"
+ " ^\n"
+ "src/test/pkg/CallSuperTest.java:30: Error: Overriding method should call super.test5 [MissingSuperCall]\n"
+ " protected void test5() { // ERROR\n"
+ " ~~~~~~~\n"
+ "6 errors, 0 warnings\n",
lintProject("src/test/pkg/CallSuperTest.java.txt=>src/test/pkg/CallSuperTest.java",
"src/android/support/annotation/CallSuper.java.txt=>src/android/support/annotation/CallSuper.java"));
}
@SuppressWarnings("ClassNameDiffersFromFileName")
public void testCallSuperIndirect() throws Exception {
// Ensure that when the @CallSuper is on an indirect super method,
// we correctly check that you call the direct super method, not the ancestor.
//
// Regression test for
// https://code.google.com/p/android/issues/detail?id=174964
assertEquals("No warnings.",
lintProject(
java("src/test/pkg/CallSuperTest.java", ""
+ "package test.pkg;\n"
+ "\n"
+ "import android.support.annotation.CallSuper;\n"
+ "\n"
+ "import java.util.List;\n"
+ "import java.util.Map;\n"
+ "\n"
+ "@SuppressWarnings(\"UnusedDeclaration\")\n"
+ "public class CallSuperTest {\n"
+ " private static class Child extends Parent {\n"
+ " @Override\n"
+ " protected void test1() {\n"
+ " super.test1();\n"
+ " }\n"
+ " }\n"
+ "\n"
+ " private static class Parent extends ParentParent {\n"
+ " @Override\n"
+ " protected void test1() {\n"
+ " super.test1();\n"
+ " }\n"
+ " }\n"
+ "\n"
+ " private static class ParentParent extends ParentParentParent {\n"
+ " @CallSuper\n"
+ " protected void test1() {\n"
+ " }\n"
+ " }\n"
+ "\n"
+ " private static class ParentParentParent {\n"
+ "\n"
+ " }\n"
+ "}\n"),
copy("src/android/support/annotation/CallSuper.java.txt",
"src/android/support/annotation/CallSuper.java")));
}
public void testDetachFromWindow() throws Exception {
assertEquals(""
+ "src/test/pkg/DetachedFromWindow.java:7: Error: Overriding method should call super.onDetachedFromWindow [MissingSuperCall]\n"
+ " protected void onDetachedFromWindow() {\n"
+ " ~~~~~~~~~~~~~~~~~~~~~~\n"
+ "src/test/pkg/DetachedFromWindow.java:26: Error: Overriding method should call super.onDetachedFromWindow [MissingSuperCall]\n"
+ " protected void onDetachedFromWindow() {\n"
+ " ~~~~~~~~~~~~~~~~~~~~~~\n"
+ "2 errors, 0 warnings\n",
lintProject("src/test/pkg/DetachedFromWindow.java.txt=>" +
"src/test/pkg/DetachedFromWindow.java"));
}
public void testWatchFaceVisibility() throws Exception {
assertEquals(""
+ "src/test/pkg/WatchFaceTest.java:9: Error: Overriding method should call super.onVisibilityChanged [MissingSuperCall]\n"
+ " public void onVisibilityChanged(boolean visible) { // ERROR: Missing super call\n"
+ " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"
+ "1 errors, 0 warnings\n",
lintProject(
"src/test/pkg/WatchFaceTest.java.txt=>src/test/pkg/WatchFaceTest.java",
"stubs/WatchFaceService.java.txt=>src/android/support/wearable/watchface/WatchFaceService.java",
"stubs/CanvasWatchFaceService.java.txt=>src/android/support/wearable/watchface/CanvasWatchFaceService.java"
));
}
}