1 package org.unicode.cldr.api; 2 3 import static org.unicode.cldr.api.CldrData.PathOrder.ARBITRARY; 4 import static org.unicode.cldr.api.CldrData.PathOrder.DTD; 5 6 import com.google.common.collect.ImmutableSet; 7 import com.google.common.collect.Sets; 8 import com.ibm.icu.dev.test.TestFmwk; 9 import java.util.ArrayList; 10 import java.util.Comparator; 11 import java.util.LinkedHashMap; 12 import java.util.List; 13 import java.util.Map; 14 import java.util.Set; 15 import org.unicode.cldr.util.CLDRConfig; 16 17 public class CldrFileDataSourceTest extends TestFmwk { 18 // The config knows if it's being run as part of a test. This is NOT immutable (but this test 19 // won't mutate it anyway). 20 private static final CLDRConfig testInfo = CLDRConfig.getInstance(); 21 TestRootPathsAndValues()22 public void TestRootPathsAndValues() { 23 CldrFileDataSource src = new CldrFileDataSource(testInfo.getRoot()); 24 Map<CldrPath, CldrValue> arbitraryOrderMap = new LinkedHashMap<>(); 25 src.accept(ARBITRARY, value -> arbitraryOrderMap.put(value.getPath(), value)); 26 27 Map<CldrPath, CldrValue> dtdOrderMap = new LinkedHashMap<>(); 28 src.accept(DTD, value -> dtdOrderMap.put(value.getPath(), value)); 29 30 // Map equality doesn't care about key order. 31 assertEquals("maps are equal", arbitraryOrderMap, dtdOrderMap); 32 33 // This could give a false negative if the DTD order ever miraculously matched hash order, 34 // and if it ever did, it should be sufficient to just change any aspect of the test data. 35 List<CldrPath> arbitraryKeyList = new ArrayList<>(arbitraryOrderMap.keySet()); 36 List<CldrPath> dtdKeyList = new ArrayList<>(dtdOrderMap.keySet()); 37 assertNotEquals("dtd order differs", arbitraryKeyList, dtdKeyList); 38 39 arbitraryKeyList.sort(Comparator.naturalOrder()); 40 assertEquals("sorted order same", arbitraryKeyList, dtdKeyList); 41 } 42 TestUnresolvedVsResolved()43 public void TestUnresolvedVsResolved() { 44 CldrFileDataSource unresolved = 45 new CldrFileDataSource(testInfo.getCLDRFile("en_GB", false)); 46 Map<CldrPath, CldrValue> unresolvedMap = new LinkedHashMap<>(); 47 unresolved.accept(DTD, value -> unresolvedMap.put(value.getPath(), value)); 48 49 CldrFileDataSource resolved = new CldrFileDataSource(testInfo.getCLDRFile("en_GB", true)); 50 Map<CldrPath, CldrValue> resolvedMap = new LinkedHashMap<>(); 51 resolved.accept(DTD, value -> resolvedMap.put(value.getPath(), value)); 52 53 assertTrue("unresolved is subset", unresolvedMap.size() < resolvedMap.size()); 54 Set<CldrPath> onlyUnresolved = 55 Sets.difference(unresolvedMap.keySet(), resolvedMap.keySet()); 56 assertEquals("unresolved is subset", ImmutableSet.of(), onlyUnresolved); 57 } 58 TestNoDtdVersionPath()59 public void TestNoDtdVersionPath() { 60 CldrFileDataSource unresolved = 61 new CldrFileDataSource(testInfo.getCLDRFile("en_GB", false)); 62 unresolved.accept( 63 DTD, 64 v -> 65 assertFalse( 66 "is DTD version string", 67 v.getPath().toString().startsWith("//ldml/version"))); 68 } 69 } 70