blob: 3d5f773dcd5e03aa3d965c4493a4ba03aa80f6ce [file] [log] [blame]
/*
* Copyright (C) 2014 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 static com.android.tools.lint.checks.PropertyFileDetector.suggestEscapes;
import static com.android.tools.lint.detector.api.TextFormat.TEXT;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import com.android.annotations.NonNull;
import com.android.annotations.Nullable;
import com.android.builder.model.AndroidProject;
import com.android.tools.lint.detector.api.Context;
import com.android.tools.lint.detector.api.Detector;
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 java.io.File;
public class PropertyFileDetectorTest extends AbstractCheckTest {
@Override
protected Detector getDetector() {
return new PropertyFileDetector();
}
public void test() throws Exception {
assertEquals(""
+ "local.properties:11: Error: Windows file separators (\\) and drive letter separators (':') must be escaped (\\\\) in property files; use C\\:\\\\my\\\\path\\\\to\\\\sdk [PropertyEscape]\n"
+ "windows.dir=C:\\my\\path\\to\\sdk\n"
+ " ~~~~~~~~~~~~~~\n"
+ "local.properties:14: Error: Windows file separators (\\) and drive letter separators (':') must be escaped (\\\\) in property files; use C\\:\\\\Documents and Settings\\\\UserName\\\\Local Settings\\\\Application Data\\\\Android\\\\android-studio\\\\sdk [PropertyEscape]\n"
+ "ok.sdk.dir=C:\\\\Documents and Settings\\\\UserName\\\\Local Settings\\\\Application Data\\\\Android\\\\android-studio\\\\sdk\n"
+ " ~\n"
+ "2 errors, 0 warnings\n",
lintProject("local.properties=>local.properties"));
}
public void testGetSuggestedEscape() {
assertEquals("C:\\\\my\\\\path\\\\to\\\\sdk", PropertyFileDetector.getSuggestedEscape(
"Windows file separators (\\) must be escaped (\\\\); use C:\\\\my\\\\path\\\\to\\\\sdk",
TEXT));
assertEquals("C\\:\\\\my\\\\path\\\\to\\\\sdk", PropertyFileDetector.getSuggestedEscape(
"local.properties:11: Error: Windows file separators (\\) and drive letter separators (':') must be escaped (\\\\) in property files; use C\\:\\\\my\\\\path\\\\to\\\\sdk",
TEXT));
}
public void testUseHttpInsteadOfHttps() throws Exception {
assertEquals(""
+ "gradle/wrapper/gradle-wrapper.properties:5: Warning: Replace HTTP with HTTPS for better security; use https\\://services.gradle.org/distributions/gradle-2.1-all.zip [UsingHttp]\n"
+ "distributionUrl=http\\://services.gradle.org/distributions/gradle-2.1-all.zip\n"
+ " ~~~~\n"
+ "0 errors, 1 warnings\n",
lintProject("gradle_http.properties=>gradle/wrapper/gradle-wrapper.properties"));
}
public void testIssue92789() throws Exception {
// Regression test for https://code.google.com/p/android/issues/detail?id=92789
assertEquals(""
+ "local.properties:1: Error: Windows file separators (\\) and drive letter separators (':') must be escaped (\\\\) in property files; use D\\:\\\\development\\\\android-sdks [PropertyEscape]\n"
+ "sdk.dir=D:\\\\development\\\\android-sdks\n"
+ " ~\n"
+ "1 errors, 0 warnings\n",
lintProject("local2.properties=>local.properties"));
}
@Override
protected void checkReportedError(@NonNull Context context, @NonNull Issue issue,
@NonNull Severity severity, @Nullable Location location, @NonNull String message) {
assertNotNull(message, PropertyFileDetector.getSuggestedEscape(message, TEXT));
}
public void testSuggestEscapes() {
assertEquals("", suggestEscapes(""));
assertEquals("foo", suggestEscapes("foo"));
assertEquals("foo/bar", suggestEscapes("foo/bar"));
assertEquals("c\\:\\\\foo\\\\bar", suggestEscapes("c\\:\\\\foo\\\\bar"));
assertEquals("c\\:\\\\foo\\\\bar", suggestEscapes("c:\\\\foo\\bar"));
}
@Override
protected TestLintClient createClient() {
return new TestLintClient() {
@NonNull
@Override
protected Project createProject(@NonNull File dir, @NonNull File referenceDir) {
return new Project(this, dir, referenceDir) {
@Override
public boolean isGradleProject() {
return true;
}
@Nullable
@Override
public AndroidProject getGradleProjectModel() {
AndroidProject project = mock(AndroidProject.class);
when(project.getResourcePrefix()).thenReturn("unit_test_prefix_");
return project;
}
};
}
};
}
}