blob: 27c10c47b9a3e50faa4878d7245ffdaffc61ac6d [file] [log] [blame]
// © 2020 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
package org.unicode.icu.tool.cldrtoicu.localedistance;
import static com.google.common.truth.Truth.assertThat;
import static java.util.Arrays.asList;
import static org.unicode.icu.tool.cldrtoicu.localedistance.TestData.territoryGroup;
import static org.unicode.icu.tool.cldrtoicu.testing.AssertUtils.assertThrows;
import org.junit.Test;
import org.unicode.cldr.api.CldrData;
import org.unicode.cldr.api.CldrDataSupplier;
import org.unicode.cldr.api.CldrValue;
public class TerritoryContainmentTest {
@Test
public void testSimple() {
CldrData testData = getTestData(
territoryGroup("001", "002", "003"),
territoryGroup("002", "GB", "FR"),
territoryGroup("003", "US", "CA"));
TerritoryContainment containment = TerritoryContainment.getContainment(testData);
assertThat(containment.getMacroRegions()).containsExactly("001", "002", "003").inOrder();
assertThat(containment.getLeafRegions()).containsExactly("CA", "FR", "GB", "US").inOrder();
assertThat(containment.getLeafRegionsOf("002")).containsExactly("FR", "GB").inOrder();
assertThat(containment.getLeafRegionsOf("GB")).isEmpty();
}
@Test
public void testOverlappingContainment() {
CldrData testData = getTestData(
territoryGroup("001", "002", "003", "004"),
territoryGroup("002", "GB", "FR"),
territoryGroup("003", "US", "CA"),
territoryGroup("004", "CA", "GB"));
TerritoryContainment containment = TerritoryContainment.getContainment(testData);
assertThat(containment.getLeafRegions()).containsExactly("CA", "FR", "GB", "US").inOrder();
assertThat(containment.getLeafRegionsOf("002")).containsExactly("FR", "GB").inOrder();
assertThat(containment.getLeafRegionsOf("004")).containsExactly("CA", "GB").inOrder();
}
@Test
public void testMultipleRootsFails() {
CldrData testData = getTestData(
territoryGroup("001", "002"),
territoryGroup("002", "GB", "FR"),
territoryGroup("003", "US", "CA"));
IllegalArgumentException err =
assertThrows(IllegalArgumentException.class, () -> TerritoryContainment.getContainment(testData));
assertThat(err).hasMessageThat().contains("001");
assertThat(err).hasMessageThat().contains("003");
assertThat(err).hasMessageThat().doesNotContain("002");
}
@Test
public void testCyclicGraphFails() {
CldrData testData = getTestData(
territoryGroup("001", "002"),
territoryGroup("002", "001"));
IllegalArgumentException err =
assertThrows(IllegalArgumentException.class, () -> TerritoryContainment.getContainment(testData));
assertThat(err).hasMessageThat().contains("world region");
assertThat(err).hasMessageThat().contains("001");
}
private static CldrData getTestData(CldrValue... values) {
return CldrDataSupplier.forValues(asList(values));
}
}