package permissions.dispatcher;
import com.google.common.collect.ImmutableList;
import com.android.tools.lint.detector.api.Detector;
import com.android.tools.lint.detector.api.Issue;
import org.intellij.lang.annotations.Language;
import org.junit.Test;
import java.util.Collections;
import java.util.List;
public class CallNeedsPermissionDetectorTest extends BaseLintDetectorTest {
private static final String NO_WARNINGS = "No warnings.";
@Override
protected Detector getDetector() {
return new CallNeedsPermissionDetector();
}
@Override
protected List<Issue> getIssues() {
return ImmutableList.of(CallNeedsPermissionDetector.ISSUE);
}
@Test
public void testCallNeedsPermissionMethod() throws Exception {
CallNeedsPermissionDetector.methods = Collections.singletonList("fooBar");
@Language("JAVA") String foo = ""
+ "package com.example;\n"
+ "public class Foo {\n"
+ "public void someMethod() {"
+ "Baz baz = new Baz();\n"
+ "baz.fooBar(); "
+ "}\n"
+ "}";
@Language("JAVA") String baz = ""
+ "package com.example;\n"
+ "public class Baz {\n"
+ "public void fooBar() {\n"
+ "}\n"
+ "}";
String result = lintProject(
java("src/com/example/Foo.java", foo),
java("src/com/example/Baz.java", baz));
String error = ""
+ "src/com/example/Foo.java:4: Error: Trying to access permission-protected method directly "
+ "["
+ CallNeedsPermissionDetector.ISSUE.getId()
+ "]\n"
+ "baz.fooBar(); }\n"
+ "~~~~~~~~~~~~\n"
+ "1 errors, 0 warnings\n";
assertEquals(result, error);
}
@Test
public void testCallNeedsPermissionMethodNoError() throws Exception {
@Language("JAVA") String foo = ""
+ "package com.example;\n"
+ "public class Foo {\n"
+ "public void someMethod() {"
+ "Baz baz = new Baz();\n"
+ "baz.noFooBar();\n"
+ "}\n"
+ "}";
@Language("JAVA") String baz = ""
+ "package com.example;\n"
+ "public class Baz {\n"
+ "public void noFooBar() {\n"
+ "}\n"
+ "}";
String result = lintProject(
java("src/com/example/Foo.java", foo),
java("src/com/example/Baz.java", baz));
assertEquals(result, NO_WARNINGS);
}
}