blob: 45f9e29d1cd98894b399fad88dff0a239daa09e9 [file] [log] [blame]
/*
* Copyright (C) 2020 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.timezone.location.data_pipeline.steps.canonicalizetzs2polygons;
import static com.android.timezone.location.data_pipeline.steps.TestSupport.copyTestResource;
import static com.android.timezone.location.data_pipeline.steps.TestSupport.copyTestResourceWithoutLicense;
import static com.android.timezone.location.data_pipeline.steps.Types.DEFAULT_PROTO_STORAGE_FORMAT;
import static java.time.ZoneOffset.UTC;
import static org.junit.Assert.assertEquals;
import com.android.timezone.location.data_pipeline.steps.CanonicalizeTzS2Polygons;
import com.android.timezone.location.data_pipeline.steps.TestSupport;
import com.android.timezone.location.data_pipeline.steps.Types.TzS2Polygons;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.LocalDateTime;
import java.util.List;
/** Tests for {@link CanonicalizeTzS2Polygons}. */
public final class CanonicalizeTzS2PolygonsTest {
private Path mTempDirPath;
@Before
public void setUp() throws IOException {
mTempDirPath = TestSupport.createTempDir(this.getClass());
}
@After
public void tearDown() throws IOException {
TestSupport.deleteDirectory(mTempDirPath);
}
/**
* A regression test that should spot obvious, possibly unintentional, changes to the output
* data by executing the test class with known input and output data.
*/
@Test
public void regressionTest() throws Exception {
String[] inputTzS2PolygonsResources = {
"America_Argentina_Cordoba_tzs2polygons.prototxt",
"America_Argentina_Ushuaia_tzs2polygons.prototxt",
"GB_tzs2polygons.prototxt",
};
Path inputPolysDirPath = mTempDirPath.resolve("input_polygons");
for (String inputTzS2PolygonResource : inputTzS2PolygonsResources) {
copyTestResource(getClass(), "input_polygons/" + inputTzS2PolygonResource,
inputPolysDirPath);
}
String inputTzIdsResource = "tzids.prototxt";
Path tzIdsDir = mTempDirPath.resolve("tzids");
Path tzIdsFile = copyTestResourceWithoutLicense(getClass(), inputTzIdsResource, tzIdsDir);
Path outputDirPath = mTempDirPath.resolve("output");
Files.createDirectory(outputDirPath);
String[] args = {
"--input", inputPolysDirPath.toAbsolutePath().toString(),
"--tz-ids", tzIdsFile.toAbsolutePath().toString(),
"--replacement-threshold",
LocalDateTime.of(2020, 1, 1, 0, 0, 0).toInstant(UTC).toString(),
"--output", outputDirPath.toAbsolutePath().toString()
};
CanonicalizeTzS2Polygons.main(args);
List<File> outputPolygons =
TzS2Polygons.listFiles(outputDirPath.toFile(), DEFAULT_PROTO_STORAGE_FORMAT);
assertEquals(2, outputPolygons.size());
Path expectedDirPath = mTempDirPath.resolve("expected");
String[] expectedTzS2PolygonsResources = {
"Europe_London_tzs2polygons.prototxt",
"America_Argentina_Buenos_Aires_tzs2polygons.prototxt",
};
for (String expectedTzS2PolygonsResource : expectedTzS2PolygonsResources) {
checkOutputPolyFile(outputDirPath, expectedDirPath, expectedTzS2PolygonsResource);
}
}
private void checkOutputPolyFile(
Path outputDirPath, Path expectedDirPath, String expectedTzS2PolygonResource)
throws Exception {
String expectedPolyResource = "output_polygons/" + expectedTzS2PolygonResource;
Path expectedPolyFile =
copyTestResource(getClass(), expectedPolyResource, expectedDirPath);
TzS2Polygons expectedTzS2Polygons =
TzS2Polygons.load(expectedPolyFile.toFile(), DEFAULT_PROTO_STORAGE_FORMAT);
File actualTzS2PolygonsFile = new File(outputDirPath.toFile(), expectedTzS2PolygonResource);
TzS2Polygons actualTzS2Polygons =
TzS2Polygons.load(actualTzS2PolygonsFile, DEFAULT_PROTO_STORAGE_FORMAT);
assertEquals(expectedPolyFile + " is expected to match " + actualTzS2PolygonsFile,
expectedTzS2Polygons, actualTzS2Polygons);
}
}