blob: 736743ea5356802495d320c8ce822fb355ac52c6 [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.LocaleFolderDetector.suggestBcp47Correction;
import com.android.tools.lint.detector.api.Detector;
@SuppressWarnings("javadoc")
public class LocaleFolderDetectorTest extends AbstractCheckTest {
@Override
protected Detector getDetector() {
return new LocaleFolderDetector();
}
public void testDeprecated() throws Exception {
assertEquals(""
+ "res/values-he: Warning: The locale folder \"he\" should be called \"iw\" instead; see the java.util.Locale documentation [LocaleFolder]\n"
+ "res/values-id: Warning: The locale folder \"id\" should be called \"in\" instead; see the java.util.Locale documentation [LocaleFolder]\n"
+ "res/values-yi: Warning: The locale folder \"yi\" should be called \"ji\" instead; see the java.util.Locale documentation [LocaleFolder]\n"
+ "0 errors, 3 warnings\n",
lintProject(
"res/values/strings.xml",
"res/values/strings.xml=>res/values-no/strings.xml",
"res/values/strings.xml=>res/values-he/strings.xml",
"res/values/strings.xml=>res/values-id/strings.xml",
"res/values/strings.xml=>res/values-yi/strings.xml")
);
}
public void testSuspiciousRegion() throws Exception {
assertEquals(""
+ "res/values-ff-rNO: Warning: Suspicious language and region combination ff (Fulah) with NO (Norway): language ff is usually paired with: SN (Senegal), CM (Cameroon), GN (Guinea), MR (Mauritania) [WrongRegion]\n"
+ "res/values-nb-rSE: Warning: Suspicious language and region combination nb (Norwegian Bokm\u00e5l) with SE (Sweden): language nb is usually paired with: NO (Norway), SJ (Svalbard & Jan Mayen) [WrongRegion]\n"
+ "res/values-sv-rSV: Warning: Suspicious language and region combination sv (Swedish) with SV (El Salvador): language sv is usually paired with: SE (Sweden), AX (Ă…land Islands), FI (Finland) [WrongRegion]\n"
+ "0 errors, 3 warnings\n",
lintProject(
"res/values/strings.xml",
"res/values/strings.xml=>res/values-no/strings.xml",
"res/values/strings.xml=>res/values-nb-rNO/strings.xml",
"res/values/strings.xml=>res/values-nb-rSJ/strings.xml",
"res/values/strings.xml=>res/values-nb-rSE/strings.xml",
"res/values/strings.xml=>res/values-sv-rSV/strings.xml",
"res/values/strings.xml=>res/values-ff-rNO/strings.xml"
)
);
}
public void testAlpha3() throws Exception {
assertEquals(""
+ "res/values-b+nor+NOR: Warning: For compatibility, should use 2-letter language codes when available; use no instead of nor [UseAlpha2]\n"
+ "res/values-b+nor+NOR: Warning: For compatibility, should use 2-letter region codes when available; use NO instead of nor [UseAlpha2]\n"
+ "0 errors, 2 warnings\n",
lintProject(
"res/values/strings.xml",
"res/values/strings.xml=>res/values-no/strings.xml",
"res/values/strings.xml=>res/values-b+kok+IN//strings.xml", // OK
"res/values/strings.xml=>res/values-b+nor+NOR/strings.xml" // Not OK
)
);
}
public void testInvalidFolder() throws Exception {
assertEquals(""
+ "res/values-ldtrl-mnc123: Error: Invalid resource folder: make sure qualifiers appear in the correct order, are spelled correctly, etc. [InvalidResourceFolder]\n"
+ "res/values-no-rNOR: Error: Invalid resource folder; did you mean b+no+NO ? [InvalidResourceFolder]\n"
+ "2 errors, 0 warnings\n",
lintProject(
"res/values/strings.xml",
"res/values/strings.xml=>res/values-ldtrl-mnc123/strings.xml",
"res/values/strings.xml=>res/values-kok-rIN//strings.xml",
"res/values/strings.xml=>res/values-no-rNOR/strings.xml"
)
);
}
public void testConflictingScripts() throws Exception {
assertEquals(""
+ "res/values-b+en+Scr1: Error: Multiple locale folders for language en map to a single folder in versions < API 21: values-b+en+Scr2, values-b+en+Scr1 [InvalidResourceFolder]\n"
+ " res/values-b+en+Scr2: <No location-specific message\n"
+ "1 errors, 0 warnings\n",
lintProject(
"res/values/strings.xml",
"res/values/strings.xml=>res/values-b+en+Scr1/strings.xml",
"res/values/strings.xml=>res/values-b+en+Scr2/strings.xml",
"res/values/strings.xml=>res/values-b+en+Scr3-v21/strings.xml",
"res/values/strings.xml=>res/values-b+fr+Scr1-v21/strings.xml",
"res/values/strings.xml=>res/values-b+fr+Scr2-v21/strings.xml",
"res/values/strings.xml=>res/values-b+no+Scr1/strings.xml",
"res/values/strings.xml=>res/values-b+no+Scr2-v21/strings.xml",
"res/values/strings.xml=>res/values-b+se+Scr1/strings.xml",
"res/values/strings.xml=>res/values-b+de+Scr1+DE/strings.xml",
"res/values/strings.xml=>res/values-b+de+Scr2+AT/strings.xml"
)
);
}
public void testBcpReplacement() {
assertEquals("b+no+NO", suggestBcp47Correction("values-nor-rNO"));
assertEquals("b+no+NO", suggestBcp47Correction("values-nor-rNOR"));
assertEquals("b+es+419", suggestBcp47Correction("values-es-419"));
assertNull(suggestBcp47Correction("values-car"));
assertNull(suggestBcp47Correction("values-b+foo+bar"));
}
}