// This software is released into the Public Domain. See copying.txt for details. package org.openstreetmap.osmosis.set.v0_6; import java.io.File; import java.io.IOException; import org.junit.Test; import org.openstreetmap.osmosis.core.Osmosis; import org.openstreetmap.osmosis.core.OsmosisRuntimeException; import org.openstreetmap.osmosis.testutil.AbstractDataTest; /** * Test the --apply-change task. * * @author Igor Podolskiy */ public class ChangeApplierTest extends AbstractDataTest { /** * Test the application of an empty change to a non-empty stream. * * @throws Exception * if something goes wrong */ @Test public void emptyChange() throws Exception { applyChange("v0_6/apply_change/apply-change-base.osm", "v0_6/empty-change.osc", "v0_6/apply_change/apply-change-base.osm"); } /** * Test the application of a non-empty change to an empty stream. * * @throws Exception * if something goes wrong */ @Test public void emptyBase() throws Exception { applyChange("v0_6/empty-entity.osm", "v0_6/apply_change/change-delete.osc", "v0_6/empty-entity.osm"); } /** * Test the application of an empty change to an empty stream. * * @throws Exception * if something goes wrong */ @Test public void emptyBoth() throws Exception { applyChange("v0_6/empty-entity.osm", "v0_6/empty-change.osc", "v0_6/empty-entity.osm"); } /** * Test the creation of a node. * * @throws Exception * if something goes wrong */ @Test public void createNode() throws Exception { applyChange("v0_6/apply_change/apply-change-base.osm", "v0_6/apply_change/change-create.osc", "v0_6/apply_change/apply-change-create.osm"); } /** * Test the modification of a node. * * @throws Exception * if something goes wrong */ @Test public void modifyNode() throws Exception { applyChange("v0_6/apply_change/apply-change-base.osm", "v0_6/apply_change/change-modify.osc", "v0_6/apply_change/apply-change-modify.osm"); } /** * Test the deletion of a node. * * @throws Exception * if something goes wrong */ @Test public void deleteNode() throws Exception { applyChange("v0_6/apply_change/apply-change-base.osm", "v0_6/apply_change/change-delete.osc", "v0_6/apply_change/apply-change-delete.osm"); } /** * Test the creation, modification and deletion of the same entity in a single stream. * * @throws Exception * if something goes wrong */ @Test(expected = OsmosisRuntimeException.class) public void createModifyDelete() throws Exception { applyChange("v0_6/apply_change/apply-change-base.osm", "v0_6/apply_change/change-create-modify-delete.osc", "v0_6/apply_change/apply-change-base.osm"); } /** * Test the deletion of an entity that does not exist in the source stream. * * Deletion of a non-existent entity doesn't change anything. * * @throws Exception * if something goes wrong */ @Test public void deleteNonExistent() throws Exception { applyChange("v0_6/apply_change/apply-change-base.osm", "v0_6/apply_change/change-delete-nonexistent.osc", "v0_6/apply_change/apply-change-base.osm"); } /** * Test the modification of an entity that does not exist in the source stream. * * Modification of a non-existent entity has the same effect as its creation. * * @throws Exception * if something goes wrong */ @Test public void modifyNonExistent() throws Exception { applyChange("v0_6/apply_change/apply-change-base.osm", "v0_6/apply_change/change-modify-nonexistent.osc", "v0_6/apply_change/apply-change-modify-nonexistent.osm"); } /** * Test the creation of an entity that already exists in the source stream. * * Creation of an existent entity has the same effect as a modification. * * @throws Exception * if something goes wrong */ @Test public void createExistent() throws Exception { applyChange("v0_6/apply_change/apply-change-base.osm", "v0_6/apply_change/change-create-existent.osc", "v0_6/apply_change/apply-change-base.osm"); } /** * Test the case when the version in the change stream is lower than in the * source stream. * * @throws Exception * if something goes wrong */ @Test public void modifyHigherVersion() throws Exception { applyChange("v0_6/apply_change/apply-change-base-high.osm", "v0_6/apply_change/change-modify.osc", "v0_6/apply_change/apply-change-modify-higher.osm"); } /** * Test the case when the change is longer than the source stream * and consists of creates. * * @throws Exception * if something goes wrong */ @Test public void longChangeCreate() throws Exception { applyChange("v0_6/apply_change/apply-change-base-node-only.osm", "v0_6/apply_change/change-big-create.osc", "v0_6/apply_change/apply-change-big.osm"); } /** * Test the case when the change is longer than the source * stream and consists of deletes. * * @throws Exception * if something goes wrong */ @Test public void longChangeDelete() throws Exception { applyChange("v0_6/apply_change/apply-change-base-node-only.osm", "v0_6/apply_change/change-big-delete.osc", "v0_6/apply_change/apply-change-base-node-only.osm"); } private void applyChange(String sourceFileName, String changeFileName, String expectedOutputFileName) throws IOException { File sourceFile; File changeFile; File expectedOutputFile; File actualOutputFile; sourceFile = dataUtils.createDataFile(sourceFileName); changeFile = dataUtils.createDataFile(changeFileName); expectedOutputFile = dataUtils.createDataFile(expectedOutputFileName); actualOutputFile = dataUtils.newFile(); Osmosis.run( new String [] { "-q", "--read-xml-change-0.6", changeFile.getPath(), "--read-xml-0.6", sourceFile.getPath(), "--apply-change-0.6", "--write-xml-0.6", actualOutputFile.getPath() } ); dataUtils.compareFiles(expectedOutputFile, actualOutputFile); } }