// 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 java.util.Date;
import java.util.HashMap;
import org.junit.Assert;
import org.junit.Test;
import org.openstreetmap.osmosis.core.Osmosis;
import org.openstreetmap.osmosis.core.OsmosisRuntimeException;
import org.openstreetmap.osmosis.core.container.v0_6.ChangeContainer;
import org.openstreetmap.osmosis.core.container.v0_6.NodeContainer;
import org.openstreetmap.osmosis.core.container.v0_6.WayContainer;
import org.openstreetmap.osmosis.core.domain.v0_6.CommonEntityData;
import org.openstreetmap.osmosis.core.domain.v0_6.Node;
import org.openstreetmap.osmosis.core.domain.v0_6.OsmUser;
import org.openstreetmap.osmosis.core.domain.v0_6.Way;
import org.openstreetmap.osmosis.core.misc.v0_6.NullChangeWriter;
import org.openstreetmap.osmosis.core.task.common.ChangeAction;
import org.openstreetmap.osmosis.testutil.AbstractDataTest;
/**
* Tests the change simplifier task.
*/
public class ChangeSimplifierTest extends AbstractDataTest {
/**
* Tests that a set of changes is simplified correctly.
*
* @throws IOException
* if any file operations fail.
*/
@Test
public void commonCase() throws IOException {
File sourceFile;
File expectedOutputFile;
File actualOutputFile;
// Generate files.
sourceFile = dataUtils.createDataFile("v0_6/simplify-change-in.osc");
expectedOutputFile = dataUtils.createDataFile("v0_6/simplify-change-out.osc");
actualOutputFile = dataUtils.newFile();
Osmosis.run(
new String [] {
"-q",
"--read-xml-change-0.6",
sourceFile.getPath(),
"--simplify-change-0.6",
"--write-xml-change-0.6",
actualOutputFile.getPath()
}
);
// Validate that the output file matches the expected result.
dataUtils.compareFiles(expectedOutputFile, actualOutputFile);
}
/**
* Tests that simplifying an already simple change successfully
* yields the same change.
*
* @throws Exception
* if anything fails.
*/
@Test
public void alreadySimple() throws Exception {
File sourceFile;
File expectedOutputFile;
File actualOutputFile;
sourceFile = dataUtils.createDataFile("v0_6/simplify-change-out.osc");
expectedOutputFile = dataUtils.createDataFile("v0_6/simplify-change-out.osc");
actualOutputFile = dataUtils.newFile();
Osmosis.run(
new String [] {
"-q",
"--read-xml-change-0.6", sourceFile.getPath(),
"--simplify-change-0.6",
"--write-xml-change-0.6", actualOutputFile.getPath()
}
);
dataUtils.compareFiles(expectedOutputFile, actualOutputFile);
}
/**
* Tests that simplifying an empty change successfully
* yields an empty change.
*
* @throws Exception
* if anything fails.
*/
@Test
public void empty() throws Exception {
File expectedOutputFile;
File actualOutputFile;
expectedOutputFile = dataUtils.createDataFile("v0_6/empty-change.osc");
actualOutputFile = dataUtils.newFile();
Osmosis.run(
new String [] {
"-q",
"--read-empty-change-0.6",
"--simplify-change-0.6",
"--write-xml-change-0.6", actualOutputFile.getPath()
}
);
dataUtils.compareFiles(expectedOutputFile, actualOutputFile);
}
/**
* Tests that badly ordered input (with respect to the version) is detected correctly.
*
* @throws Exception
* if anything fails.
*/
@Test
public void badSortOrderVersion() throws Exception {
ChangeSimplifier simplifier = new ChangeSimplifier();
simplifier.setChangeSink(new NullChangeWriter());
simplifier.initialize(new HashMap<String, Object>());
Node node;
node = new Node(new CommonEntityData(1, 2, new Date(), OsmUser.NONE, 2), 1, 1);
simplifier.process(new ChangeContainer(new NodeContainer(node), ChangeAction.Modify));
try {
node = new Node(new CommonEntityData(1, 1, new Date(), OsmUser.NONE, 1), 1, 1);
simplifier.process(new ChangeContainer(new NodeContainer(node), ChangeAction.Modify));
} catch (OsmosisRuntimeException e) {
if (e.getMessage().startsWith("Pipeline entities are not sorted")) {
return;
}
throw e;
}
Assert.fail("Expected exception not thrown");
}
/**
* Tests that badly ordered input (with respect to the ids) is detected correctly.
*
* @throws Exception
* if anything fails.
*/
@Test
public void badSortOrderId() throws Exception {
ChangeSimplifier simplifier = new ChangeSimplifier();
simplifier.setChangeSink(new NullChangeWriter());
simplifier.initialize(new HashMap<String, Object>());
Node node;
node = new Node(new CommonEntityData(2, 2, new Date(), OsmUser.NONE, 2), 1, 1);
simplifier.process(new ChangeContainer(new NodeContainer(node), ChangeAction.Modify));
try {
node = new Node(new CommonEntityData(1, 2, new Date(), OsmUser.NONE, 1), 1, 1);
simplifier.process(new ChangeContainer(new NodeContainer(node), ChangeAction.Modify));
} catch (OsmosisRuntimeException e) {
if (e.getMessage().startsWith("Pipeline entities are not sorted")) {
return;
}
throw e;
}
Assert.fail("Expected exception not thrown");
}
/**
* Tests that badly ordered input (with respect to the ids) is detected correctly.
*
* @throws Exception
* if anything fails.
*/
@Test
public void badSortOrderType() throws Exception {
ChangeSimplifier simplifier = new ChangeSimplifier();
simplifier.setChangeSink(new NullChangeWriter());
simplifier.initialize(new HashMap<String, Object>());
Node node;
Way way;
way = new Way(new CommonEntityData(2, 2, new Date(), OsmUser.NONE, 2));
simplifier.process(new ChangeContainer(new WayContainer(way), ChangeAction.Modify));
try {
node = new Node(new CommonEntityData(1, 2, new Date(), OsmUser.NONE, 1), 1, 1);
simplifier.process(new ChangeContainer(new NodeContainer(node), ChangeAction.Modify));
} catch (OsmosisRuntimeException e) {
if (e.getMessage().startsWith("Pipeline entities are not sorted")) {
return;
}
throw e;
}
Assert.fail("Expected exception not thrown");
}
}