blob: 9691f343af5560f332979ab62e2d02f9992679c3 [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.annotations.NonNull;
import com.android.tools.lint.client.api.LintClient;
import com.android.tools.lint.detector.api.Detector;
import com.android.tools.lint.detector.api.Issue;
import com.android.tools.lint.detector.api.Project;
import com.google.common.collect.Sets;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
@SuppressWarnings("javadoc")
public class PluralsDetectorTest extends AbstractCheckTest {
@Override
protected Detector getDetector() {
return new PluralsDetector();
}
public void test1() throws Exception {
mEnabled = Sets.newHashSet(PluralsDetector.MISSING, PluralsDetector.EXTRA);
assertEquals(""
+ "res/values-pl/plurals2.xml:3: Error: For locale \"pl\" (Polish) the following quantities should also be defined: many [MissingQuantity]\n"
+ " <plurals name=\"numberOfSongsAvailable\">\n"
+ " ^\n"
+ "1 errors, 0 warnings\n",
lintProject(
"res/values/plurals.xml",
"res/values/plurals2.xml",
"res/values-pl/plurals2.xml"));
}
public void test2() throws Exception {
mEnabled = Sets.newHashSet(PluralsDetector.MISSING, PluralsDetector.EXTRA);
assertEquals(""
+ "res/values-cs/plurals3.xml:3: Error: For locale \"cs\" (Czech) the following quantities should also be defined: few [MissingQuantity]\n" +
" <plurals name=\"draft\">\n" +
" ^\n" +
"res/values-zh-rCN/plurals3.xml:3: Warning: For language \"zh\" (Chinese) the following quantities are not relevant: one [UnusedQuantity]\n" +
" <plurals name=\"draft\">\n" +
" ^\n" +
"res/values-zh-rCN/plurals3.xml:7: Warning: For language \"zh\" (Chinese) the following quantities are not relevant: one [UnusedQuantity]\n" +
" <plurals name=\"title_day_dialog_content\">\n" +
" ^\n" +
"1 errors, 2 warnings\n",
lintProject(
"res/values-zh-rCN/plurals3.xml",
"res/values-cs/plurals3.xml"));
}
public void testEmptyPlural() throws Exception {
mEnabled = Sets.newHashSet(PluralsDetector.MISSING, PluralsDetector.EXTRA);
assertEquals(""
+ "res/values/plurals4.xml:3: Error: There should be at least one quantity string in this <plural> definition [MissingQuantity]\n"
+ " <plurals name=\"minutes_until_num\">\n"
+ " ^\n"
+ "1 errors, 0 warnings\n",
lintProject(
"res/values/plurals4.xml"));
}
public void testPolish() throws Exception {
// Test for https://code.google.com/p/android/issues/detail?id=67803
mEnabled = Sets.newHashSet(PluralsDetector.MISSING, PluralsDetector.EXTRA);
assertEquals(""
+ "res/values-pl/plurals5.xml:3: Error: For locale \"pl\" (Polish) the following quantities should also be defined: many [MissingQuantity]\n"
+ " <plurals name=\"my_plural\">\n"
+ " ^\n"
+ "res/values-pl/plurals5.xml:3: Warning: For language \"pl\" (Polish) the following quantities are not relevant: zero [UnusedQuantity]\n"
+ " <plurals name=\"my_plural\">\n"
+ " ^\n"
+ "1 errors, 1 warnings\n",
lintProject(
"res/values/plurals5.xml=>res/values-pl/plurals5.xml"));
}
public void testRussian() throws Exception {
// Regression test for https://code.google.com/p/android/issues/detail?id=75799
mEnabled = Sets.newHashSet(PluralsDetector.MISSING, PluralsDetector.EXTRA);
assertEquals("No warnings.",
lintProject(
"res/values-ru/plurals6.xml=>res/values-ru/plurals6.xml"));
}
public void testImpliedQuantity() throws Exception {
mEnabled = Collections.singleton(PluralsDetector.IMPLIED_QUANTITY);
assertEquals(""
+ "res/values-sl/plurals2.xml:4: Error: The quantity 'one' matches more than one specific number in this locale (1, 101, 201, 301, 401, 501, 601, 701, 1001, \u2026), but the message did not include a formatting argument (such as %d). This is usually an internationalization error. See full issue explanation for more. [ImpliedQuantity]\n"
+ " <item quantity=\"one\">Znaleziono jednÄ… piosenkÄ™.</item>\n"
+ " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"
+ "1 errors, 0 warnings\n",
lintProject(
"res/values/plurals.xml",
"res/values/plurals2.xml",
"res/values-pl/plurals2.xml",
// Simulate locale message for locale which has multiple values for one
"res/values-pl/plurals2.xml=>res/values-sl/plurals2.xml"));
}
private Set<Issue> mEnabled = new HashSet<Issue>();
@Override
protected TestConfiguration getConfiguration(LintClient client, Project project) {
return new TestConfiguration(client, project, null) {
@Override
public boolean isEnabled(@NonNull Issue issue) {
return super.isEnabled(issue) && mEnabled.contains(issue);
}
};
}
}