diff --git a/examples/mapping/sourcemeter_mapping_example_2_0_monsters.xml b/examples/mapping/sourcemeter_mapping_example_2_0_monsters.xml
new file mode 100644
index 00000000..3b2882c8
--- /dev/null
+++ b/examples/mapping/sourcemeter_mapping_example_2_0_monsters.xml
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sources/codemetropolis-toolchain-commons/src/test/java/codemetropolis/toolchain/commons/cmxml/BuildableTest.java b/sources/codemetropolis-toolchain-commons/src/test/java/codemetropolis/toolchain/commons/cmxml/BuildableTest.java
new file mode 100644
index 00000000..f8a33725
--- /dev/null
+++ b/sources/codemetropolis-toolchain-commons/src/test/java/codemetropolis/toolchain/commons/cmxml/BuildableTest.java
@@ -0,0 +1,26 @@
+package codemetropolis.toolchain.commons.cmxml;
+
+import codemetropolis.toolchain.commons.cmxml.Buildable.Type;
+import junit.framework.TestCase;
+
+public class BuildableTest extends TestCase {
+
+ Buildable b1, b2, b3;
+
+ public void setup() {
+ b1 = null;
+ b2 = null;
+ b3 = null;
+ }
+
+ public void testIsOverlapping() {
+ b1 = new Buildable("test1", "testBuilding1", Type.FLOOR, new Point(0, 0, 0), new Point(2, 2, 2));
+ b2 = new Buildable("test2", "testBuilding2", Type.FLOOR, new Point(1, 1, 1), new Point(2, 2, 2));
+ b3 = new Buildable("test3", "testBuilding3", Type.FLOOR, new Point(-1, -1, -1), new Point(2, 2, 2));
+
+ assertTrue(b1.isOverlapping(b2));
+ assertTrue(b3.isOverlapping(b1));
+ assertFalse(b2.isOverlapping(b3));
+ }
+
+}
diff --git a/sources/codemetropolis-toolchain-commons/src/test/java/codemetropolis/toolchain/commons/cmxml/PointTest.java b/sources/codemetropolis-toolchain-commons/src/test/java/codemetropolis/toolchain/commons/cmxml/PointTest.java
new file mode 100644
index 00000000..c98c8a8a
--- /dev/null
+++ b/sources/codemetropolis-toolchain-commons/src/test/java/codemetropolis/toolchain/commons/cmxml/PointTest.java
@@ -0,0 +1,23 @@
+package codemetropolis.toolchain.commons.cmxml;
+
+import junit.framework.TestCase;
+
+public class PointTest extends TestCase {
+
+ Point testObj;
+
+ public void setup() {
+ testObj = null;
+ }
+
+ public void testTranslate() {
+ testObj = new Point(0, 0, 0);
+
+ Point newPoint = testObj.translate(new Point(1, 2, 3));
+
+ assertEquals(1, newPoint.getX());
+ assertEquals(2, newPoint.getY());
+ assertEquals(3, newPoint.getZ());
+ }
+
+}
diff --git a/sources/codemetropolis-toolchain-commons/src/test/java/codemetropolis/toolchain/commons/util/TimeTest.java b/sources/codemetropolis-toolchain-commons/src/test/java/codemetropolis/toolchain/commons/util/TimeTest.java
new file mode 100644
index 00000000..1ab330aa
--- /dev/null
+++ b/sources/codemetropolis-toolchain-commons/src/test/java/codemetropolis/toolchain/commons/util/TimeTest.java
@@ -0,0 +1,58 @@
+package codemetropolis.toolchain.commons.util;
+
+import junit.framework.TestCase;
+
+public class TimeTest extends TestCase {
+
+ Time testObj;
+
+ public void setup() {
+ testObj = null;
+ }
+
+ public void testGetHours() {
+ testObj = new Time(0);
+ assertEquals(0, testObj.getHours());
+
+ testObj = new Time(3599999); // 0 hrs 59 mins 59 seconds, 999 milliseconds
+ assertEquals(0, testObj.getHours());
+
+ testObj = new Time(86400001); // 24 hrs 1 milliseconds
+ assertEquals(24, testObj.getHours());
+ }
+
+ public void testGetMinutes() {
+ testObj = new Time(0);
+ assertEquals(0, testObj.getMinutes());
+
+ testObj = new Time(6999);
+ assertEquals(0, testObj.getMinutes());
+
+ testObj = new Time(59999);
+ assertEquals(0, testObj.getMinutes());
+
+ testObj = new Time(60000);
+ assertEquals(1, testObj.getMinutes());
+
+ testObj = new Time(3600000);
+ assertEquals(0, testObj.getMinutes());
+
+ testObj = new Time(3730000);
+ assertEquals(2, testObj.getMinutes());
+ }
+
+ public void testGetSeconds() {
+ testObj = new Time(0);
+ assertEquals(0, testObj.getSeconds());
+
+ testObj = new Time(3999);
+ assertEquals(3, testObj.getSeconds());
+
+ testObj = new Time(60000);
+ assertEquals(0, testObj.getSeconds());
+
+ testObj = new Time(74500);
+ assertEquals(14, testObj.getSeconds());
+ }
+
+}
diff --git a/sources/codemetropolis-toolchain-converter/src/test/java/codemetropolis/toolchain/converter/ConverterExecutorArgsTest.java b/sources/codemetropolis-toolchain-converter/src/test/java/codemetropolis/toolchain/converter/ConverterExecutorArgsTest.java
new file mode 100644
index 00000000..561d0a7f
--- /dev/null
+++ b/sources/codemetropolis-toolchain-converter/src/test/java/codemetropolis/toolchain/converter/ConverterExecutorArgsTest.java
@@ -0,0 +1,30 @@
+package codemetropolis.toolchain.converter;
+
+import java.util.HashMap;
+
+import codemetropolis.toolchain.converter.control.ConverterType;
+import junit.framework.TestCase;
+
+public class ConverterExecutorArgsTest extends TestCase {
+ ConverterExecutorArgs testObj;
+
+ public void setup () {
+ testObj = null;
+ }
+
+ public void testConverterExecutorArgsConstructorNoParams() {
+ testObj = new ConverterExecutorArgs(ConverterType.SOURCEMETER, "testSource", "testOutput");
+ assertEquals("testOutput", testObj.getOutputFile());
+ assertEquals("testSource", testObj.getSource());
+ assertEquals(ConverterType.SOURCEMETER, testObj.getType());
+ }
+
+ public void testConverterExecutorArgsConstructor() {
+ testObj = new ConverterExecutorArgs(ConverterType.SONARQUBE, "testSource", "testOutput", new HashMap());
+ assertEquals("testOutput", testObj.getOutputFile());
+ assertEquals("testSource", testObj.getSource());
+ assertEquals(ConverterType.SONARQUBE, testObj.getType());
+ assertNotNull(testObj.getParams());
+ assertTrue(testObj.getParams().isEmpty());
+ }
+}
diff --git a/sources/codemetropolis-toolchain-converter/src/test/java/codemetropolis/toolchain/converter/control/ConverterLoaderTest.java b/sources/codemetropolis-toolchain-converter/src/test/java/codemetropolis/toolchain/converter/control/ConverterLoaderTest.java
new file mode 100644
index 00000000..b393b625
--- /dev/null
+++ b/sources/codemetropolis-toolchain-converter/src/test/java/codemetropolis/toolchain/converter/control/ConverterLoaderTest.java
@@ -0,0 +1,30 @@
+package codemetropolis.toolchain.converter.control;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import codemetropolis.toolchain.commons.cdf.converter.CdfConverter;
+import codemetropolis.toolchain.converter.control.*;
+import codemetropolis.toolchain.converter.sonarqube.SonarQubeConverter;
+import codemetropolis.toolchain.converter.sourcemeter.GraphConverter;
+import junit.framework.TestCase;
+
+public class ConverterLoaderTest extends TestCase {
+
+ CdfConverter result;
+
+
+ public void setup() {
+ result = null;
+ }
+
+ public void testLoadSourceMeter() {
+ result = ConverterLoader.load(ConverterType.SOURCEMETER, new HashMap());
+ assert(result instanceof GraphConverter);
+ }
+
+ public void testLoadSonarQube() {
+ result = ConverterLoader.load(ConverterType.SONARQUBE, new HashMap());
+ assert(result instanceof SonarQubeConverter);
+ }
+}
diff --git a/sources/codemetropolis-toolchain-converter/src/test/java/codemetropolis/toolchain/converter/sonarqube/SonarMetricTest.java b/sources/codemetropolis-toolchain-converter/src/test/java/codemetropolis/toolchain/converter/sonarqube/SonarMetricTest.java
new file mode 100644
index 00000000..d5577516
--- /dev/null
+++ b/sources/codemetropolis-toolchain-converter/src/test/java/codemetropolis/toolchain/converter/sonarqube/SonarMetricTest.java
@@ -0,0 +1,35 @@
+package codemetropolis.toolchain.converter.sonarqube;
+
+import codemetropolis.toolchain.converter.sonarqube.SonarMetric.MetricType;
+import junit.framework.TestCase;
+
+public class SonarMetricTest extends TestCase {
+
+ SonarMetric testObj;
+
+
+ public void setup() {
+ testObj = null;
+ }
+
+ public void testHashCode() {
+
+ testObj = new SonarMetric(null, null, null);
+ assertEquals(29791, testObj.hashCode());
+
+ testObj = new SonarMetric("name1", "value1", null);
+ int value = ((31+"name1".hashCode())*31)*31+"value1".hashCode();
+ assertEquals(value, testObj.hashCode());
+ }
+
+ public void testEquals() {
+ testObj = new SonarMetric("name1", "value1", MetricType.STRING);
+
+ assertEquals(true, testObj.equals(testObj));
+ assertEquals(true, testObj.equals(new SonarMetric("name1", "value1", MetricType.STRING)));
+ assertEquals(false, testObj.equals(null));
+ assertEquals(false, testObj.equals(3));
+ assertEquals(false, testObj.equals(new SonarMetric(null, null, null)));
+ assertEquals(false, testObj.equals(new SonarMetric("name1", "value1", null)));
+ }
+}
diff --git a/sources/codemetropolis-toolchain-mapping/src/main/java/codemetropolis/toolchain/mapping/model/Linking.java b/sources/codemetropolis-toolchain-mapping/src/main/java/codemetropolis/toolchain/mapping/model/Linking.java
index f14233fd..a4b0ea5d 100644
--- a/sources/codemetropolis-toolchain-mapping/src/main/java/codemetropolis/toolchain/mapping/model/Linking.java
+++ b/sources/codemetropolis-toolchain-mapping/src/main/java/codemetropolis/toolchain/mapping/model/Linking.java
@@ -24,7 +24,7 @@ public class Linking {
static {
SUPPORTED_TARGETS.put(Type.FLOOR, new String[]{"width", "height", "length", "character", "external_character", "torches"});
SUPPORTED_TARGETS.put(Type.CELLAR, new String[]{"width", "height", "length", "character", "external_character", "torches"});
- SUPPORTED_TARGETS.put(Type.GARDEN, new String[]{"tree-ratio", "mushroom-ratio", "flower-ratio"});
+ SUPPORTED_TARGETS.put(Type.GARDEN, new String[]{"tree-ratio", "mushroom-ratio", "flower-ratio", "monster-count", "monster-label"});
SUPPORTED_TARGETS.put(Type.GROUND, new String[]{});
}
diff --git a/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/MappingExecutorArgsTest.java b/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/MappingExecutorArgsTest.java
new file mode 100644
index 00000000..31b3df13
--- /dev/null
+++ b/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/MappingExecutorArgsTest.java
@@ -0,0 +1,22 @@
+package codemetropolis.toolchain.mapping;
+
+import junit.framework.TestCase;
+
+public class MappingExecutorArgsTest extends TestCase {
+
+ MappingExecutorArgs testObj;
+
+ public void setup() {
+ testObj = null;
+ }
+
+ public void testMappingExecutorArgs() {
+ testObj = new MappingExecutorArgs("testCDF", "testOutput", "testMapping", 1.0, true);
+ assertEquals("testCDF", testObj.getCdfFile());
+ assertEquals("testOutput", testObj.getOutputFile());
+ assertEquals("testMapping", testObj.getMappingFile());
+ assertEquals(1.0, testObj.getScale());
+ assertEquals(true, testObj.isHierarchyValidationEnabled());
+ }
+
+}
diff --git a/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/control/LimitControllerTest.java b/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/control/LimitControllerTest.java
new file mode 100644
index 00000000..ac6564f1
--- /dev/null
+++ b/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/control/LimitControllerTest.java
@@ -0,0 +1,22 @@
+package codemetropolis.toolchain.mapping.control;
+
+import junit.framework.TestCase;
+
+public class LimitControllerTest extends TestCase {
+
+ LimitController testObj;
+
+ public void setup() {
+ testObj = null;
+ }
+
+ public void testAdd() {
+ testObj = new LimitController();
+
+ testObj.add("name", "from", 2.0);
+
+ assertNotNull(testObj.getLimit("name", "from"));
+ assertEquals(1, testObj.getLimit("name", "from").getValueSetSize());
+ }
+
+}
\ No newline at end of file
diff --git a/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/control/MappingControllerTest.java b/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/control/MappingControllerTest.java
new file mode 100644
index 00000000..fd8f49b6
--- /dev/null
+++ b/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/control/MappingControllerTest.java
@@ -0,0 +1,69 @@
+package codemetropolis.toolchain.mapping.control;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import codemetropolis.toolchain.commons.cmxml.Buildable;
+import codemetropolis.toolchain.commons.cmxml.Buildable.Type;
+import codemetropolis.toolchain.mapping.model.Mapping;
+import junit.framework.TestCase;
+
+public class MappingControllerTest extends TestCase {
+
+ MappingController testObj;
+
+ public void setup() {
+ testObj = null;
+ }
+
+ public void testSetProperty() {
+
+ testObj = new MappingController(new Mapping());
+
+ Buildable b = new Buildable("id", "name", Type.GARDEN);
+ b.setSizeX(0);
+ b.setSizeY(0);
+
+ try {
+ Method method = testObj.getClass().getDeclaredMethod("setProperty", Buildable.class, String.class, Object.class, boolean.class);
+ method.setAccessible(true);
+
+ method.invoke(testObj, b, "width", 3.0, false);
+
+ assertEquals(3, b.getSizeX());
+
+ method.invoke(testObj, b, "height", 5.0, false);
+
+ assertEquals(5, b.getSizeY());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void testFindRoot() {
+
+ testObj = new MappingController(new Mapping());
+
+ Collection buildables = new ArrayList<>();
+
+ Buildable b = new Buildable("id", "name", Type.GARDEN);
+
+ buildables.add(b);
+
+ try {
+ Method method = testObj.getClass().getDeclaredMethod("findRoot", Collection.class);
+ method.setAccessible(true);
+
+ if (b.isRoot()) {
+ assertEquals(b, method.invoke(testObj, buildables));
+ } else {
+ assertNull(method.invoke(testObj, buildables));
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/conversions/ConversionTest.java b/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/conversions/ConversionTest.java
new file mode 100644
index 00000000..75a0698e
--- /dev/null
+++ b/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/conversions/ConversionTest.java
@@ -0,0 +1,105 @@
+package codemetropolis.toolchain.mapping.conversions;
+
+import codemetropolis.toolchain.mapping.model.Parameter;
+import junit.framework.TestCase;
+
+public class ConversionTest extends TestCase {
+
+ Conversion result = null;
+
+ public void setup() {
+ result = null;
+ }
+
+ public void testCreateFromName() {
+ result = Conversion.createFromName("to_int");
+ assert(result instanceof ToIntConversion);
+
+ result = Conversion.createFromName("to_double");
+ assert(result instanceof ToDoubleConversion);
+
+ result = Conversion.createFromName("multiply");
+ assert(result instanceof MultiplyConversion);
+
+ result = Conversion.createFromName("quantization");
+ assert(result instanceof QuantizationConversion);
+
+ result = Conversion.createFromName("switch");
+ assert(result instanceof SwitchConversion);
+
+ result = Conversion.createFromName("abcd");
+ assertNull(result);
+ }
+
+ public void testToDouble() {
+ double testResult;
+
+ testResult = Conversion.toDouble("42");
+ assertEquals(42.0, testResult);
+
+ testResult = Conversion.toDouble((double)42.0);
+ assertEquals(42.0, testResult);
+ }
+
+ public void testToInt() {
+ int testResult;
+
+ testResult = Conversion.toInt("13");
+ assertEquals(13, testResult);
+
+ testResult = Conversion.toInt("13.13");
+ assertEquals(13, testResult);
+
+ testResult = Conversion.toInt(4.9);
+ assertEquals(4, testResult);
+ }
+
+ public void testAddParameter() {
+ result = new MultiplyConversion();
+
+ assertEquals(0, result.getParameters().length);
+
+ result.addParameter(new Parameter("testKey", "testValue"));
+
+ assertEquals(1, result.getParameters().length);
+ assertEquals("testKey", result.getParameters()[0].getName());
+ assertEquals("testValue", result.getParameters()[0].getValue());
+ }
+
+ public void testAddParameters() {
+ result = new MultiplyConversion();
+
+ assertEquals(0, result.getParameters().length);
+
+ result.addParameters(new Parameter[] {new Parameter("testKey1", "testValue1")});
+ assertEquals(1, result.getParameters().length);
+ assertEquals("testKey1", result.getParameters()[0].getName());
+ assertEquals("testValue1", result.getParameters()[0].getValue());
+
+ result.addParameters(new Parameter[] {new Parameter("testKey2", "testValue2"), new Parameter("testKey3", "testValue3")});
+ assertEquals(3, result.getParameters().length);
+ assertEquals("testKey1", result.getParameters()[0].getName());
+ assertEquals("testValue1", result.getParameters()[0].getValue());
+ assertEquals("testKey2", result.getParameters()[1].getName());
+ assertEquals("testValue2", result.getParameters()[1].getValue());
+ assertEquals("testKey3", result.getParameters()[2].getName());
+ assertEquals("testValue3", result.getParameters()[2].getValue());
+ }
+
+ public void testClearParameters() {
+ result = new MultiplyConversion();
+
+ result.clearParameters();
+ assertEquals(0, result.getParameters().length);
+
+ result.addParameter(new Parameter("testKey", "testValue"));
+ result.clearParameters();
+ assertEquals(0, result.getParameters().length);
+
+ result.addParameter(new Parameter("testKey1", "testValue1"));
+ result.addParameter(new Parameter("testKey2", "testValue2"));
+ result.clearParameters();
+ assertEquals(0, result.getParameters().length);
+ }
+
+}
diff --git a/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/conversions/NormalizeConversionTest.java b/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/conversions/NormalizeConversionTest.java
new file mode 100644
index 00000000..7d198124
--- /dev/null
+++ b/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/conversions/NormalizeConversionTest.java
@@ -0,0 +1,28 @@
+package codemetropolis.toolchain.mapping.conversions;
+
+import codemetropolis.toolchain.mapping.model.Limit;
+import junit.framework.TestCase;
+
+public class NormalizeConversionTest extends TestCase {
+
+ NormalizeConversion testObj;
+
+ public void setup() {
+ testObj = null;
+ }
+
+ public void testApply() {
+ testObj = new NormalizeConversion();
+
+ Limit l1 = new Limit();
+ l1.add(42);
+
+ Limit l2 = new Limit();
+ l2.add(41);
+ l2.add(43);
+
+ assertEquals(1.0, testObj.apply(24.0, l1));
+ assertEquals(0.5, testObj.apply(42.0, l2));
+ }
+
+}
diff --git a/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/conversions/ToDoubleConversionTest.java b/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/conversions/ToDoubleConversionTest.java
new file mode 100644
index 00000000..46d8fb89
--- /dev/null
+++ b/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/conversions/ToDoubleConversionTest.java
@@ -0,0 +1,21 @@
+package codemetropolis.toolchain.mapping.conversions;
+
+import codemetropolis.toolchain.mapping.model.Limit;
+import junit.framework.TestCase;
+
+public class ToDoubleConversionTest extends TestCase {
+
+ ToDoubleConversion testObj;
+
+ public void setup() {
+ testObj = null;
+ }
+
+ public void testApply() {
+ testObj = new ToDoubleConversion();
+
+ assertEquals(2.0, testObj.apply(2.0, new Limit()));
+ assertEquals(2.0, testObj.apply("2.0", new Limit()));
+ }
+
+}
\ No newline at end of file
diff --git a/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/conversions/ToIntConversionTest.java b/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/conversions/ToIntConversionTest.java
new file mode 100644
index 00000000..f8599cb8
--- /dev/null
+++ b/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/conversions/ToIntConversionTest.java
@@ -0,0 +1,21 @@
+package codemetropolis.toolchain.mapping.conversions;
+
+import codemetropolis.toolchain.mapping.model.Limit;
+import junit.framework.TestCase;
+
+public class ToIntConversionTest extends TestCase {
+
+ ToIntConversion testObj;
+
+ public void setup() {
+ testObj = null;
+ }
+
+ public void testApply() {
+ testObj = new ToIntConversion();
+
+ assertEquals(3, testObj.apply(3.21, new Limit()));
+ assertEquals(4, testObj.apply("4", new Limit()));
+ }
+
+}
\ No newline at end of file
diff --git a/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/model/LimitTest.java b/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/model/LimitTest.java
new file mode 100644
index 00000000..eddea6a6
--- /dev/null
+++ b/sources/codemetropolis-toolchain-mapping/src/test/java/codemetropolis/toolchain/mapping/model/LimitTest.java
@@ -0,0 +1,22 @@
+package codemetropolis.toolchain.mapping.model;
+
+import junit.framework.TestCase;
+
+public class LimitTest extends TestCase {
+
+ Limit testObj;
+
+ public void setup() {
+ testObj = null;
+ }
+
+ public void testAdd() {
+ testObj = new Limit();
+
+ testObj.add(3.0);
+ assertEquals(1, testObj.getValueSetSize());
+ assertEquals(3.0, testObj.getMax());
+ assertEquals(3.0, testObj.getMin());
+ }
+
+}
\ No newline at end of file
diff --git a/sources/codemetropolis-toolchain-placing/src/test/java/codemetropolis/toolchain/placing/layout/LayoutTest.java b/sources/codemetropolis-toolchain-placing/src/test/java/codemetropolis/toolchain/placing/layout/LayoutTest.java
new file mode 100644
index 00000000..aa71d14d
--- /dev/null
+++ b/sources/codemetropolis-toolchain-placing/src/test/java/codemetropolis/toolchain/placing/layout/LayoutTest.java
@@ -0,0 +1,25 @@
+package codemetropolis.toolchain.placing.layout;
+
+import codemetropolis.toolchain.placing.exceptions.NonExistentLayoutException;
+import codemetropolis.toolchain.placing.layout.pack.PackLayout;
+import junit.framework.TestCase;
+
+public class LayoutTest extends TestCase {
+
+ public void testParse() {
+
+ try {
+ assert(Layout.parse("PACK") instanceof PackLayout);
+ } catch (NonExistentLayoutException e) {
+ fail();
+ }
+
+ try {
+ Layout.parse("WRONGTYPE");
+ fail();
+ } catch (NonExistentLayoutException e) {}
+
+
+ }
+
+}
diff --git a/sources/codemetropolis-toolchain-placing/src/test/java/codemetropolis/toolchain/placing/layout/pack/PackLayoutTest.java b/sources/codemetropolis-toolchain-placing/src/test/java/codemetropolis/toolchain/placing/layout/pack/PackLayoutTest.java
new file mode 100644
index 00000000..98349c8a
--- /dev/null
+++ b/sources/codemetropolis-toolchain-placing/src/test/java/codemetropolis/toolchain/placing/layout/pack/PackLayoutTest.java
@@ -0,0 +1,76 @@
+package codemetropolis.toolchain.placing.layout.pack;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import codemetropolis.toolchain.commons.cmxml.Buildable;
+import codemetropolis.toolchain.commons.cmxml.Buildable.Type;
+import codemetropolis.toolchain.commons.cmxml.Point;
+import junit.framework.TestCase;
+
+public class PackLayoutTest extends TestCase {
+
+ PackLayout testObj;
+
+ public void setup() {
+ testObj = null;
+ }
+
+ public void testGetMaxSizes() {
+
+ testObj = new PackLayout();
+
+ Buildable b = new Buildable("id", "name", Type.FLOOR, new Point(), new Point(10,10,10));
+ BuildableWrapper w = new BuildableWrapper(b);
+
+ Collection list = new ArrayList<>();
+
+ try {
+ Method method = testObj.getClass().getDeclaredMethod("getMaxSizes", Collection.class);
+ method.setAccessible(true);
+
+ Point result = (Point) method.invoke(testObj, list);
+ assertEquals(0, result.getX());
+ assertEquals(0, result.getY());
+ assertEquals(0, result.getZ());
+
+ list.add(w);
+ result = (Point) method.invoke(testObj, list);
+
+ assertEquals(10, result.getX());
+ assertEquals(0, result.getY());
+ assertEquals(10, result.getZ());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void testCalculateParentSize() {
+
+ testObj = new PackLayout();
+
+ Buildable b = new Buildable("id", "name", Type.FLOOR, new Point(1,1,1), new Point(10,5,2));
+ BuildableWrapper w = new BuildableWrapper(b);
+
+ Collection list = new ArrayList<>();
+ list.add(w);
+
+ //space: 2
+ //minX: 1, maxX: 1+10, minZ: 1, maxZ: 1+2
+ //return: x: 11-1+4, z: 3-1+4
+ try {
+ Method method = testObj.getClass().getDeclaredMethod("calculateParentSize", Collection.class, int.class);
+ method.setAccessible(true);
+
+ Point result = (Point) method.invoke(testObj, list, 2);
+ assertEquals(14, result.getX());
+ assertEquals(0, result.getY());
+ assertEquals(6, result.getZ());
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+}
diff --git a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/building/Garden.java b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/building/Garden.java
index 88b163b9..ca5f31c3 100644
--- a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/building/Garden.java
+++ b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/building/Garden.java
@@ -9,10 +9,13 @@
import codemetropolis.toolchain.rendering.model.pattern.RepeationPattern;
import codemetropolis.toolchain.rendering.model.pattern.YSplitPattern;
import codemetropolis.toolchain.rendering.model.primitive.SignPost;
+import codemetropolis.toolchain.rendering.model.primitive.Spawner;
import codemetropolis.toolchain.rendering.model.primitive.SolidBox;
import codemetropolis.toolchain.rendering.util.Orientation;
public class Garden extends Building {
+
+ int monster_count;
public Garden(Buildable innerBuildable) throws BuildingTypeMismatchException {
super(innerBuildable);
@@ -23,11 +26,18 @@ public Garden(Buildable innerBuildable) throws BuildingTypeMismatchException {
prepareBase();
prepareDoor();
prepareSigns();
+ prepareSpawners();
+ prepareSignsForSpawners();
}
private void prepareBase( ) {
BasicBlock _fnc = new BasicBlock( "minecraft:fence" );
BasicBlock _sns = new BasicBlock( "minecraft:sandstone" );
+
+ monster_count = innerBuildable.hasAttribute("monster-count")
+ ? Integer.parseInt( innerBuildable.getAttributeValue ("monster-count") )
+ : 0;
+
RandomPattern _flowers = new RandomPattern( new RepeationPattern( new BasicBlock[][][]{ { { BasicBlock.NonBlock } } } ) );
RandomPattern _redOrYellow = new RandomPattern( new RepeationPattern( new BasicBlock[][][]{ { { new BasicBlock( "minecraft:yellow_flower" ) } } } ) );
@@ -144,5 +154,31 @@ private void prepareSigns( ) {
primitives.add(new SignPost(position.getX(), position.getY() + 2, position.getZ() + size.getZ() - 1, SignPost.Orientation.SOUTHWEST, innerBuildable.getName()));
primitives.add(new SignPost(position.getX() + size.getX() - 1, position.getY() + 2, position.getZ() + size.getZ() - 1, SignPost.Orientation.SOUTHEAST, innerBuildable.getName()));
}
+
+ private void prepareSpawners( ) {
+ if (monster_count > 0) primitives.add(new Spawner(position.getX() + size.getX() / 2, position.getY(), position.getZ() - 3));
+ if (monster_count > 1) primitives.add(new Spawner(position.getX() + size.getX() / 2, position.getY(), position.getZ() + size.getZ() + 2));
+ if (monster_count > 2) primitives.add(new Spawner(position.getX() - 3, position.getY(), position.getZ() + size.getZ() / 2));
+ if (monster_count > 3) primitives.add(new Spawner(position.getX() + size.getX() + 2, position.getY(), position.getZ() + size.getZ() / 2));
+ }
+
+ private void prepareSignsForSpawners() {
+ String signName = innerBuildable.hasAttribute("monster-label") ? (innerBuildable.getAttributeValue("monster-label")) : "";
+
+ switch (monster_count) {
+ case 4:
+ primitives.add(new SignPost(position.getX() + size.getX() + 2, position.getY(), position.getZ() + size.getZ() / 2 + 1, SignPost.Orientation.EAST, signName));
+ primitives.add(new SignPost(position.getX() + size.getX() + 2, position.getY(), position.getZ() + size.getZ() / 2 - 1, SignPost.Orientation.EAST, signName));
+ case 3:
+ primitives.add(new SignPost(position.getX() - 3, position.getY(), position.getZ() + size.getZ() / 2 + 1, SignPost.Orientation.WEST, signName));
+ primitives.add(new SignPost(position.getX() - 3, position.getY(), position.getZ() + size.getZ() / 2 - 1, SignPost.Orientation.WEST, signName));
+ case 2:
+ primitives.add(new SignPost(position.getX() + size.getX() / 2 - 1, position.getY(), position.getZ() + size.getZ() + 2, SignPost.Orientation.SOUTH, signName));
+ primitives.add(new SignPost(position.getX() + size.getX() / 2 + 1, position.getY(), position.getZ() + size.getZ() + 2, SignPost.Orientation.SOUTH, signName));
+ case 1:
+ primitives.add(new SignPost(position.getX() + size.getX() / 2 - 1, position.getY(), position.getZ() - 3, SignPost.Orientation.NORTH, signName));
+ primitives.add(new SignPost(position.getX() + size.getX() / 2 + 1, position.getY(), position.getZ() - 3, SignPost.Orientation.NORTH, signName));
+ }
+ }
}
diff --git a/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/primitive/Spawner.java b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/primitive/Spawner.java
new file mode 100644
index 00000000..f2d6d5af
--- /dev/null
+++ b/sources/codemetropolis-toolchain-rendering/src/main/java/codemetropolis/toolchain/rendering/model/primitive/Spawner.java
@@ -0,0 +1,27 @@
+package codemetropolis.toolchain.rendering.model.primitive;
+
+import java.io.File;
+
+import codemetropolis.toolchain.commons.cmxml.Point;
+import codemetropolis.toolchain.rendering.model.BasicBlock;
+
+public class Spawner implements Primitive {
+
+ private Point position;
+
+ public Spawner(int x, int y, int z) {
+ super();
+ this.position = new Point(x, y, z);
+ }
+
+ @Override
+ public int toCSVFile(File directory) {
+ new Boxel(new BasicBlock((short) 52), position).toCSVFile(directory);
+ return 1;
+ }
+ @Override
+ public int getNumberOfBlocks() {
+ return 1;
+ }
+
+}
diff --git a/sources/codemetropolis-toolchain-rendering/src/test/java/codemetropolis/toolchain/rendering/events/ProgressEventTest.java b/sources/codemetropolis-toolchain-rendering/src/test/java/codemetropolis/toolchain/rendering/events/ProgressEventTest.java
new file mode 100644
index 00000000..0d63fc44
--- /dev/null
+++ b/sources/codemetropolis-toolchain-rendering/src/test/java/codemetropolis/toolchain/rendering/events/ProgressEventTest.java
@@ -0,0 +1,35 @@
+package codemetropolis.toolchain.rendering.events;
+
+import junit.framework.TestCase;
+
+public class ProgressEventTest extends TestCase {
+
+ ProgressEvent testObj;
+
+ public void setup() {
+ testObj = null;
+ }
+
+ public void testGetPercent() {
+ testObj = new ProgressEvent(new Object(), null, 100, 200, 100);
+ assertEquals(50.0, testObj.getPercent());
+
+ testObj = new ProgressEvent(new Object(), null, 53, 56, 400);
+ assertEquals(94.64, testObj.getPercent(), 0.01);
+
+ testObj = new ProgressEvent(new Object(), null, 30, 30, 1000);
+ assertEquals(100.0, testObj.getPercent());
+ }
+
+ public void testGetTimeLeftInMillis() {
+ testObj = new ProgressEvent(new Object(), null, 100, 200, 100);
+ assertEquals(100, testObj.getTimeLeftInMillis());
+
+ testObj = new ProgressEvent(new Object(), null, 53, 56, 400);
+ assertEquals(22, testObj.getTimeLeftInMillis());
+
+ testObj = new ProgressEvent(new Object(), null, 30, 30, 1000);
+ assertEquals(0, testObj.getTimeLeftInMillis());
+ }
+
+}
diff --git a/sources/codemetropolis-toolchain-rendering/src/test/java/codemetropolis/toolchain/rendering/model/primitive/BoxelTest.java b/sources/codemetropolis-toolchain-rendering/src/test/java/codemetropolis/toolchain/rendering/model/primitive/BoxelTest.java
new file mode 100644
index 00000000..3605c139
--- /dev/null
+++ b/sources/codemetropolis-toolchain-rendering/src/test/java/codemetropolis/toolchain/rendering/model/primitive/BoxelTest.java
@@ -0,0 +1,24 @@
+package codemetropolis.toolchain.rendering.model.primitive;
+
+import codemetropolis.toolchain.commons.cmxml.Point;
+import codemetropolis.toolchain.rendering.model.BasicBlock;
+import junit.framework.TestCase;
+
+public class BoxelTest extends TestCase {
+
+ Boxel testObj;
+
+ public void setup() {
+ testObj = null;
+ }
+
+ public void testToCSV() {
+
+ testObj = new Boxel(new BasicBlock((short) 10, 3), new Point(2,5,6), "info");
+ assertEquals("10;3;2;5;6;info", testObj.toCSV());
+
+ testObj = new Boxel(new BasicBlock((short) 11, 3), new Point(2,5,6), "");
+ assertEquals("11;3;2;5;6;NULL", testObj.toCSV());
+ }
+
+}
\ No newline at end of file
diff --git a/sources/codemetropolis-toolchain-rendering/src/test/java/codemetropolis/toolchain/rendering/util/CharacterTest.java b/sources/codemetropolis-toolchain-rendering/src/test/java/codemetropolis/toolchain/rendering/util/CharacterTest.java
new file mode 100644
index 00000000..278c6ee0
--- /dev/null
+++ b/sources/codemetropolis-toolchain-rendering/src/test/java/codemetropolis/toolchain/rendering/util/CharacterTest.java
@@ -0,0 +1,61 @@
+package codemetropolis.toolchain.rendering.util;
+
+import junit.framework.TestCase;
+
+public class CharacterTest extends TestCase {
+
+ Character testObj;
+
+ public void setup() {
+ testObj = null;
+ }
+
+ public void testGetBlock() {
+ testObj = Character.STONE;assertEquals("minecraft:stone", testObj.getBlock().getName());
+ testObj = Character.COBBLESTONE;assertEquals("minecraft:cobblestone", testObj.getBlock().getName());
+ testObj = Character.MOSSY_STONE;assertEquals("minecraft:mossy_cobblestone", testObj.getBlock().getName());
+ testObj = Character.SANDSTONE; assertEquals("minecraft:sandstone", testObj.getBlock().getName());
+ testObj = Character.OBSIDIAN; assertEquals("minecraft:obsidian", testObj.getBlock().getName());
+ testObj = Character.WOOD; assertEquals("minecraft:log", testObj.getBlock().getName());
+ testObj = Character.DARK_WOOD; assertEquals("minecraft:log", testObj.getBlock().getName());
+ testObj = Character.BIRCH_WOOD; assertEquals("minecraft:log", testObj.getBlock().getName());
+ testObj = Character.PLANKS; assertEquals("minecraft:planks", testObj.getBlock().getName());
+ testObj = Character.DARK_PLANKS; assertEquals("minecraft:planks", testObj.getBlock().getName());
+ testObj = Character.METAL; assertEquals("minecraft:iron_block", testObj.getBlock().getName());
+ testObj = Character.DIRT; assertEquals("minecraft:dirt", testObj.getBlock().getName());
+ testObj = Character.SAND; assertEquals("minecraft:sandstone", testObj.getBlock().getName());
+ testObj = Character.RED_SAND; assertEquals("minecraft:sand", testObj.getBlock().getName());
+ testObj = Character.BRICK; assertEquals("minecraft:double_stone_slab", testObj.getBlock().getName());
+ testObj = Character.STONE_BRICK; assertEquals("minecraft:double_stone_slab", testObj.getBlock().getName());
+ testObj = Character.DARK_BRICK; assertEquals("minecraft:double_stone_slab", testObj.getBlock().getName());
+ testObj = Character.GLASS; assertEquals("minecraft:glass", testObj.getBlock().getName());
+ testObj = Character.GOLD; assertEquals("minecraft:gold_block", testObj.getBlock().getName());
+ testObj = Character.DIAMOND; assertEquals("minecraft:diamond_block", testObj.getBlock().getName());
+ testObj = Character.UNDEFINED; assertEquals("minecraft:wool", testObj.getBlock().getName());
+ }
+
+ public void testGetTopBlock() {
+ testObj = Character.WOOD; assertEquals("minecraft:fence", testObj.getTopBlock().getName());
+ testObj = Character.DARK_WOOD; assertEquals("minecraft:fence", testObj.getTopBlock().getName());
+ testObj = Character.BIRCH_WOOD; assertEquals("minecraft:fence", testObj.getTopBlock().getName());
+ testObj = Character.PLANKS; assertEquals("minecraft:fence", testObj.getTopBlock().getName());
+ testObj = Character.DARK_PLANKS; assertEquals("minecraft:fence", testObj.getTopBlock().getName());
+
+ testObj = Character.STONE;assertEquals(testObj.getBlock().getName(), testObj.getTopBlock().getName());
+ testObj = Character.COBBLESTONE;assertEquals(testObj.getBlock().getName(), testObj.getTopBlock().getName());
+ testObj = Character.MOSSY_STONE;assertEquals(testObj.getBlock().getName(), testObj.getTopBlock().getName());
+ testObj = Character.SANDSTONE; assertEquals(testObj.getBlock().getName(), testObj.getTopBlock().getName());
+ testObj = Character.OBSIDIAN; assertEquals(testObj.getBlock().getName(), testObj.getTopBlock().getName());
+ testObj = Character.METAL; assertEquals(testObj.getBlock().getName(), testObj.getTopBlock().getName());
+ testObj = Character.DIRT; assertEquals(testObj.getBlock().getName(), testObj.getTopBlock().getName());
+ testObj = Character.SAND; assertEquals(testObj.getBlock().getName(), testObj.getTopBlock().getName());
+ testObj = Character.RED_SAND; assertEquals(testObj.getBlock().getName(), testObj.getTopBlock().getName());
+ testObj = Character.BRICK; assertEquals(testObj.getBlock().getName(), testObj.getTopBlock().getName());
+ testObj = Character.STONE_BRICK; assertEquals(testObj.getBlock().getName(), testObj.getTopBlock().getName());
+ testObj = Character.DARK_BRICK; assertEquals(testObj.getBlock().getName(), testObj.getTopBlock().getName());
+ testObj = Character.GLASS; assertEquals(testObj.getBlock().getName(), testObj.getTopBlock().getName());
+ testObj = Character.GOLD; assertEquals(testObj.getBlock().getName(), testObj.getTopBlock().getName());
+ }
+
+
+}