aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/lint/ProjectLintConfigurationTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/lint/ProjectLintConfigurationTest.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/lint/ProjectLintConfigurationTest.java218
1 files changed, 218 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/lint/ProjectLintConfigurationTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/lint/ProjectLintConfigurationTest.java
new file mode 100644
index 000000000..f8ea8c435
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/lint/ProjectLintConfigurationTest.java
@@ -0,0 +1,218 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php
+ *
+ * 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.ide.eclipse.adt.internal.lint;
+
+import com.android.annotations.NonNull;
+import com.android.annotations.Nullable;
+import com.android.ide.eclipse.adt.internal.editors.layout.refactoring.AdtProjectTest;
+import com.android.tools.lint.checks.DuplicateIdDetector;
+import com.android.tools.lint.checks.UnusedResourceDetector;
+import com.android.tools.lint.client.api.Configuration;
+import com.android.tools.lint.client.api.JavaParser;
+import com.android.tools.lint.client.api.LintClient;
+import com.android.tools.lint.client.api.XmlParser;
+import com.android.tools.lint.detector.api.Context;
+import com.android.tools.lint.detector.api.Issue;
+import com.android.tools.lint.detector.api.Location;
+import com.android.tools.lint.detector.api.Project;
+import com.android.tools.lint.detector.api.Severity;
+import com.android.tools.lint.detector.api.TextFormat;
+
+import org.eclipse.core.resources.IProject;
+
+import java.io.File;
+
+@SuppressWarnings("javadoc")
+public class ProjectLintConfigurationTest extends AdtProjectTest {
+ public void testBasic() {
+ Configuration parent = null;
+ LintClient client = new TestClient();
+
+ File dir = getTargetDir();
+ if (!dir.exists()) {
+ boolean ok = dir.mkdirs();
+ assertTrue(dir.getPath(), ok);
+ }
+ Project project = client.getProject(dir, dir);
+
+ ProjectLintConfiguration config =
+ new ProjectLintConfiguration(client, project, parent, false /*fatalOnly*/);
+
+ Issue usuallyEnabledIssue = DuplicateIdDetector.WITHIN_LAYOUT;
+ Issue usuallyDisabledIssue = UnusedResourceDetector.ISSUE_IDS;
+
+ assertTrue(config.isEnabled(usuallyEnabledIssue));
+ assertFalse(config.isEnabled(usuallyDisabledIssue));
+
+ config.setSeverity(usuallyEnabledIssue, Severity.IGNORE);
+ config.setSeverity(usuallyDisabledIssue, Severity.ERROR);
+ assertFalse(config.isEnabled(usuallyEnabledIssue));
+ assertTrue(config.isEnabled(usuallyDisabledIssue));
+
+ // Make a NEW config object to ensure the state is persisted properly, not just
+ // kept on the config object!
+ config = new ProjectLintConfiguration(client, project, parent, false /*fatalOnly*/);
+ assertFalse(config.isEnabled(usuallyEnabledIssue));
+ assertTrue(config.isEnabled(usuallyDisabledIssue));
+ }
+
+ public void testInheritance() {
+ Configuration parent = null;
+ LintClient client = new TestClient();
+
+ File dir = getTargetDir();
+ assertTrue(dir.mkdirs());
+ Project project = client.getProject(dir, dir);
+
+ File otherDir = new File(dir, "otherConfig");
+ assertTrue(otherDir.mkdir());
+ Project otherProject = client.getProject(otherDir, otherDir);
+
+ ProjectLintConfiguration otherConfig =
+ new ProjectLintConfiguration(client, otherProject, parent, false);
+
+ ProjectLintConfiguration config =
+ new ProjectLintConfiguration(client, project, otherConfig, false);
+
+ Issue usuallyEnabledIssue = DuplicateIdDetector.WITHIN_LAYOUT;
+ Issue usuallyDisabledIssue = UnusedResourceDetector.ISSUE_IDS;
+
+ assertTrue(config.isEnabled(usuallyEnabledIssue));
+ assertFalse(config.isEnabled(usuallyDisabledIssue));
+
+ otherConfig.setSeverity(usuallyEnabledIssue, Severity.IGNORE);
+ otherConfig.setSeverity(usuallyDisabledIssue, Severity.ERROR);
+
+ // Ensure inheritance works
+ assertFalse(config.isEnabled(usuallyEnabledIssue));
+ assertTrue(config.isEnabled(usuallyDisabledIssue));
+
+ // Revert
+ otherConfig.setSeverity(usuallyEnabledIssue, Severity.ERROR);
+ otherConfig.setSeverity(usuallyDisabledIssue, Severity.IGNORE);
+ assertTrue(config.isEnabled(usuallyEnabledIssue));
+ assertFalse(config.isEnabled(usuallyDisabledIssue));
+
+ // Now override in child
+ config.setSeverity(usuallyEnabledIssue, Severity.ERROR);
+ config.setSeverity(usuallyDisabledIssue, Severity.IGNORE);
+ assertTrue(config.isEnabled(usuallyEnabledIssue));
+ assertFalse(config.isEnabled(usuallyDisabledIssue));
+
+ // Now change in parent: no change in child
+ otherConfig.setSeverity(usuallyEnabledIssue, Severity.IGNORE);
+ otherConfig.setSeverity(usuallyDisabledIssue, Severity.ERROR);
+ assertTrue(config.isEnabled(usuallyEnabledIssue));
+ assertFalse(config.isEnabled(usuallyDisabledIssue));
+ assertFalse(otherConfig.isEnabled(usuallyEnabledIssue));
+ assertTrue(otherConfig.isEnabled(usuallyDisabledIssue));
+
+ // Clear override in child
+ config.setSeverity(usuallyEnabledIssue, null);
+ config.setSeverity(usuallyDisabledIssue, null);
+ assertFalse(config.isEnabled(usuallyEnabledIssue));
+ assertTrue(config.isEnabled(usuallyDisabledIssue));
+ }
+
+ public void testBulkEditing() {
+ Configuration parent = null;
+ LintClient client = new TestClient();
+
+ File dir = getTargetDir();
+ assertTrue(dir.mkdirs());
+ Project project = client.getProject(dir, dir);
+
+ ProjectLintConfiguration config =
+ new ProjectLintConfiguration(client, project, parent, false /*fatalOnly*/);
+
+ Issue usuallyEnabledIssue = DuplicateIdDetector.WITHIN_LAYOUT;
+ Issue usuallyDisabledIssue = UnusedResourceDetector.ISSUE_IDS;
+
+ assertTrue(config.isEnabled(usuallyEnabledIssue));
+ assertFalse(config.isEnabled(usuallyDisabledIssue));
+
+ config.setSeverity(usuallyEnabledIssue, Severity.IGNORE);
+ assertFalse(config.isEnabled(usuallyEnabledIssue));
+ assertFalse(config.isEnabled(usuallyDisabledIssue));
+
+ File configFile = new File(dir, "lint.xml");
+ assertTrue(configFile.getPath(), configFile.exists());
+ long lastModified = configFile.lastModified();
+
+ // We need to make sure that the timestamp of the file is a couple of seconds
+ // after the last update or we can't tell whether the file was updated or not
+
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ System.err.println("Sleep interrupted, test may not work.");
+ }
+ config.startBulkEditing();
+ assertFalse(lastModified < configFile.lastModified());
+ assertEquals(lastModified, configFile.lastModified());
+ config.setSeverity(usuallyDisabledIssue, Severity.ERROR);
+ config.finishBulkEditing();
+ assertTrue(lastModified < configFile.lastModified());
+
+ assertTrue(config.isEnabled(usuallyDisabledIssue));
+ }
+
+ public void testPersistence() {
+ // Ensure that we use the same configuration object repeatedly for a
+ // single project, such that we don't recompute and parse XML for each and
+ // every lint run!
+ IProject project = getProject();
+ TestClient client = new TestClient();
+ ProjectLintConfiguration config1 = ProjectLintConfiguration.get(client, project, false);
+ ProjectLintConfiguration config2 = ProjectLintConfiguration.get(client, project, false);
+ assertSame(config1, config2);
+ }
+
+ @Override
+ protected File getTargetDir() {
+ File targetDir = new File(getTempDir(), getClass().getSimpleName() + "_" + getName());
+ addCleanupDir(targetDir);
+ return targetDir;
+ }
+
+ private static class TestClient extends LintClient {
+ @Override
+ public void report(@NonNull Context context, @NonNull Issue issue,
+ @NonNull Severity severity, @Nullable Location location,
+ @NonNull String message, @NonNull TextFormat format) {
+ }
+
+ @Override
+ public void log(@NonNull Severity severity, @Nullable Throwable exception,
+ @Nullable String format, @Nullable Object... args) {
+ }
+
+ @Override
+ public XmlParser getXmlParser() {
+ return null;
+ }
+
+ @Override
+ public @NonNull String readFile(@NonNull File file) {
+ return null;
+ }
+
+ @Override
+ public JavaParser getJavaParser(@Nullable Project project) {
+ return null;
+ }
+ }
+}