blob: a0859a247558fa6155b44e4ca5394dbe78ae90c8 [file] [log] [blame]
package org.unicode.cldr.unittest;
import java.util.Arrays;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashSet;
import java.util.Set;
import org.unicode.cldr.test.CoverageLevel2;
import org.unicode.cldr.util.CLDRConfig;
import org.unicode.cldr.util.CLDRFile;
import org.unicode.cldr.util.CLDRLocale;
import org.unicode.cldr.util.CoreCoverageInfo;
import org.unicode.cldr.util.CoreCoverageInfo.CoreItems;
import org.unicode.cldr.util.Factory;
import org.unicode.cldr.util.LanguageTagParser;
import org.unicode.cldr.util.Level;
import org.unicode.cldr.util.Organization;
import org.unicode.cldr.util.PathHeader;
import org.unicode.cldr.util.StandardCodes;
import org.unicode.cldr.util.SupplementalDataInfo;
import com.google.common.collect.LinkedHashMultimap;
import com.google.common.collect.Multimap;
public class TestCoverage extends TestFmwkPlus {
static final StandardCodes sc = StandardCodes.make();
static final CLDRConfig testInfo = CLDRConfig.getInstance();
static final SupplementalDataInfo sdi = testInfo.getSupplementalDataInfo();
public static void main(String[] args) {
new TestCoverage().run(args);
}
static Set<CoreItems> all = Collections.unmodifiableSet(EnumSet
.allOf(CoreItems.class));
static Set<CoreItems> none = Collections.unmodifiableSet(EnumSet
.noneOf(CoreItems.class));
public void TestBasic() {
CLDRFile engCldrFile = testInfo.getEnglish();
Multimap<CoreItems, String> errors = LinkedHashMultimap.create();
Set<CoreItems> coreCoverage = CoreCoverageInfo.getCoreCoverageInfo(
engCldrFile, errors);
if (!assertEquals("English should be complete", all, coreCoverage)) {
showDiff("Missing", all, coreCoverage);
}
CLDRFile skimpyLocale = testInfo.getCldrFactory().make("asa", false);
errors.clear();
coreCoverage = CoreCoverageInfo.getCoreCoverageInfo(skimpyLocale,
errors);
if (!assertEquals("Skimpy locale should not be complete", none,
coreCoverage)) {
showDiff("Missing", all, coreCoverage);
showDiff("Extra", coreCoverage, none);
}
}
public void TestSelected() {
Object[][] tests = {
{ "en", "//ldml/localeDisplayNames/subdivisions/subdivision[@type=\"gbeng\"]", Level.MODERN, 8 },
{ "en", "//ldml/numbers/minimalPairs/ordinalMinimalPairs[@ordinal=\"other\"]", Level.MODERATE, 20 },
{ "en", "//ldml/numbers/minimalPairs/pluralMinimalPairs[@count=\"other\"]", Level.MODERATE, 20 },
};
PathHeader.Factory phf = PathHeader.getFactory(testInfo.getEnglish());
for (Object[] test : tests) {
String localeId = (String) test[0];
String path = (String) test[1];
Level expectedLevel = (Level) test[2];
int expectedVotes = (Integer) test[3];
CoverageLevel2 coverageLevel = CoverageLevel2.getInstance(sdi, localeId);
Level level = coverageLevel.getLevel(path);
PathHeader ph = phf.fromPath(path);
assertEquals(localeId + " : " + path + " : ", expectedLevel, level);
CLDRLocale loc = CLDRLocale.getInstance(localeId);
int actualVotes = sdi.getRequiredVotes(loc, ph);
assertEquals(localeId + " : " + path + " : ", expectedVotes, actualVotes);
}
}
static final boolean DEBUG = false;
public void TestLocales() {
long start = System.currentTimeMillis();
logln("Status\tLocale\tName\tLevel\tCount" + showColumn(all)
+ "\tError Messages");
LanguageTagParser ltp = new LanguageTagParser();
Multimap<CoreItems, String> errors = LinkedHashMultimap.create();
Set<String> toTest = new HashSet(
Arrays.asList("ky mn ms uz az kk pa sr zh lo".split(" ")));
Set<String> defaultContents = sdi.getDefaultContentLocales();
Factory fullCldrFactory = testInfo.getFullCldrFactory();
for (String locale : fullCldrFactory.getAvailable()) {
if (!ltp.set(locale).getRegion().isEmpty() || locale.equals("root")
|| defaultContents.contains(locale)) {
continue;
}
Level level = sc.getLocaleCoverageLevel(Organization.cldr, locale);
if (DEBUG && (!toTest.contains(locale) || level != Level.MODERN)) {
continue;
}
if (locale.equals("am")) {
int debug = 0;
}
CLDRFile testFile = fullCldrFactory.make(locale, false);
Set<CoreItems> coreCoverage;
errors.clear();
try {
coreCoverage = CoreCoverageInfo.getCoreCoverageInfo(testFile,
errors);
} catch (Exception e) {
errln("Failure for locale: " + getLocaleAndName(locale));
e.printStackTrace();
continue;
}
Set missing = EnumSet.allOf(CoreItems.class);
missing.removeAll(coreCoverage);
if (missing.size() != 0) {
errln("\t" + getLocaleAndName(locale) + "\t" + level + "\t"
+ missing.size() + showColumn(missing) + "\t" + errors);
} else {
logln("OK\t" + getLocaleAndName(locale) + "\t" + level + "\t"
+ missing.size());
}
}
long end = System.currentTimeMillis();
logln("Elapsed:\t" + (end - start));
}
private String getLocaleAndName(String locale) {
return locale + "\t" + testInfo.getEnglish().getName(locale);
}
private String showColumn(Set items) {
StringBuilder result = new StringBuilder();
for (CoreItems x : CoreItems.values()) {
result.append("\t");
if (items.contains(x)) {
result.append(x);
}
}
return result.toString();
}
public void showDiff(String title, Set<CoreItems> all,
Set<CoreItems> coreCoverage) {
Set diff = EnumSet.copyOf(all);
diff.removeAll(coreCoverage);
if (diff.size() != 0) {
errln("\t" + title + ": " + diff);
}
}
}