• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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