diff --git a/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/BarChartDummy.java b/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/BarChartDummy.java
deleted file mode 100644
index f5488cca19b6858ab11a314b9beeda390d4291d0..0000000000000000000000000000000000000000
--- a/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/BarChartDummy.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package de.tudresden.inf.mci.brailleplot.rendering;
-
-
-/**
- * A dummy class for BarCharts.
- * @author Leonard Kupper
- * @version 2019.06.28
- */
-public class BarChartDummy implements Renderable {
-
-    //private double[] dummy = {0.21, 0.13, -0.3, 0.52, -1.02, 0.65, 0.77, -0.33};
-    private double[] dummy = {500,36,357,473,75,220,356};
-
-    final String getTitle() {
-        return "I am a bar chart.";
-    }
-
-    final double[] getCategories() {
-        return dummy;
-    }
-
-    final int getCategoryCount() {
-        return dummy.length;
-    }
-
-    final double getValue(final int categoryIndex) {
-        return dummy[categoryIndex];
-    }
-
-    public double getValueRangeSize() {
-        return (getValueRangeMax() - getValueRangeMin());
-    }
-
-    public double getValueRangeMax() {
-        double max = Double.NEGATIVE_INFINITY;
-        for (double value : dummy) {
-            if (value > max) {
-                max = value;
-            }
-        }
-        return max;
-    }
-
-    public double getValueRangeMin() {
-        double min = Double.POSITIVE_INFINITY;
-        for (double value : dummy) {
-            if (value < min) {
-                min = value;
-            }
-        }
-        return min;
-    }
-
-}
diff --git a/src/test/java/de/tudresden/inf/mci/brailleplot/rendering/FunctionalRasterizerTest.java b/src/test/java/de/tudresden/inf/mci/brailleplot/rendering/FunctionalRasterizerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..cdf6485c5084d21b2f84ec6b8a4006cfdd75f1d9
--- /dev/null
+++ b/src/test/java/de/tudresden/inf/mci/brailleplot/rendering/FunctionalRasterizerTest.java
@@ -0,0 +1,57 @@
+package de.tudresden.inf.mci.brailleplot.rendering;
+
+import de.tudresden.inf.mci.brailleplot.configparser.ConfigurationParser;
+import de.tudresden.inf.mci.brailleplot.configparser.Format;
+import de.tudresden.inf.mci.brailleplot.configparser.JavaPropertiesConfigurationParser;
+import de.tudresden.inf.mci.brailleplot.configparser.Printer;
+import diagrams.BarChart;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import java.io.File;
+
+
+public class FunctionalRasterizerTest {
+
+    public static final String mDefaultConfig = getResource("default.properties").getAbsolutePath();
+    public static final String mBaseConfig = getResource("base_format.properties").getAbsolutePath();
+    public static Printer mPrinter;
+    public static Format mFormat;
+
+    public static File getResource(String fileName) {
+        ClassLoader classLoader = ClassLoader.getSystemClassLoader();
+        File resourceFile = new File(classLoader.getResource(fileName).getFile());
+        return resourceFile;
+    }
+
+    @BeforeAll
+    public static void initialize() {
+        Assertions.assertDoesNotThrow(
+                () -> {
+                    ConfigurationParser parser = new JavaPropertiesConfigurationParser(mBaseConfig, mDefaultConfig);
+                    mPrinter = parser.getPrinter();
+                    mFormat = parser.getFormat("test");
+                }
+        );
+    }
+
+    // Invalid use test cases.
+
+    @Test
+    public void testInvalidDirectCall() {
+        // Create FunctionalRasterizer for Text
+        FunctionalRasterizer<Text> textRasterizer = new FunctionalRasterizer<>(Text.class, (data, canvas) -> {
+            // dummy
+        });
+
+        // The FunctionalRasterizer should not be called directly, it is meant to be called by its RenderingBase
+        // which decides which rasterizer to use based on the Renderable type.
+        // Directly passing the wrong Renderable type must cause exception:
+        Assertions.assertThrows(IllegalArgumentException.class, () -> {
+            AbstractRasterCanvas testCanvas = new SixDotBrailleRasterCanvas(mPrinter, mFormat);
+            // Pass Image to Text rasterizer.
+            textRasterizer.rasterize(new Image(getResource("dummy.bmp")), testCanvas);
+        });
+    }
+}
diff --git a/src/test/java/de/tudresden/inf/mci/brailleplot/rendering/RectangleTest.java b/src/test/java/de/tudresden/inf/mci/brailleplot/rendering/RectangleTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..126a146a38b45c8728986f5f325aca32530d0240
--- /dev/null
+++ b/src/test/java/de/tudresden/inf/mci/brailleplot/rendering/RectangleTest.java
@@ -0,0 +1,142 @@
+package de.tudresden.inf.mci.brailleplot.rendering;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+
+public class RectangleTest {
+
+    Rectangle rect1 = new Rectangle(4.5, 2.75, 8.3, 16);
+    Rectangle rect2 = new Rectangle(8.5, 6.75, 8.3, 16);
+    Rectangle rect3 = new Rectangle(0, 0, 3, 2);
+
+    @Test
+    public void testDimensions() {
+        Assertions.assertEquals(4.5, rect1.getX());
+        Assertions.assertEquals(2.75, rect1.getY());
+        Assertions.assertEquals(8.3, rect1.getWidth());
+        Assertions.assertEquals(16, rect1.getHeight());
+        Assertions.assertEquals(12.8, rect1.getRight());
+        Assertions.assertEquals(18.75, rect1.getBottom());
+    }
+
+    @Test
+    public void testIntegerCoordinates() {
+        Rectangle.IntWrapper intRect;
+
+        // with rational original coordinates (get rounded)
+        intRect = rect1.intWrapper();
+        Assertions.assertEquals(5, intRect.getX());
+        Assertions.assertEquals(3, intRect.getY());
+        Assertions.assertEquals(8, intRect.getWidth());
+        Assertions.assertEquals(16, intRect.getHeight());
+        Assertions.assertEquals(12, intRect.getRight());
+        Assertions.assertEquals(18, intRect.getBottom());
+
+        // with natural original coordinates
+        intRect = rect3.intWrapper();
+        Assertions.assertEquals(0, intRect.getX());
+        Assertions.assertEquals(0, intRect.getY());
+        Assertions.assertEquals(3, intRect.getWidth());
+        Assertions.assertEquals(2, intRect.getHeight());
+        Assertions.assertEquals(2, intRect.getRight());
+        Assertions.assertEquals(1, intRect.getBottom());
+    }
+
+    @Test
+    public void testScaling() {
+        Rectangle scaledRect = rect1.scaledBy(5.5, 0.4);
+        Assertions.assertEquals(4.5 * 5.5, scaledRect.getX());
+        Assertions.assertEquals(2.75 * 0.4, scaledRect.getY());
+        Assertions.assertEquals(8.3 * 5.5, scaledRect.getWidth());
+        Assertions.assertEquals(16 * 0.4, scaledRect.getHeight());
+        Assertions.assertEquals(12.8 * 5.5, scaledRect.getRight());
+        Assertions.assertEquals(18.75 * 0.4, scaledRect.getBottom());
+    }
+
+    @Test
+    public void testIntersecting() {
+        Rectangle itsct;
+
+        // Non-empty intersection
+        itsct = rect1.intersectedWith(rect2);
+        Assertions.assertEquals(8.5, itsct.getX());
+        Assertions.assertEquals(6.75, itsct.getY());
+        Assertions.assertEquals(12.8 - 8.5, itsct.getWidth());
+        Assertions.assertEquals(18.75 - 6.75, itsct.getHeight());
+        Assertions.assertEquals(12.8, itsct.getRight());
+        Assertions.assertEquals(18.75, itsct.getBottom());
+
+        // Swapping order of rectangles gives equivalent intersection
+        itsct = rect2.intersectedWith(rect1);
+        Assertions.assertEquals(8.5, itsct.getX());
+        Assertions.assertEquals(6.75, itsct.getY());
+        Assertions.assertEquals(12.8 - 8.5, itsct.getWidth());
+        Assertions.assertEquals(18.75 - 6.75, itsct.getHeight());
+        Assertions.assertEquals(12.8, itsct.getRight());
+        Assertions.assertEquals(18.75, itsct.getBottom());
+
+        // Empty intersection
+        itsct = rect1.intersectedWith(rect3);
+        Assertions.assertEquals(4.5, itsct.getX());
+        Assertions.assertEquals(2.75, itsct.getY());
+        Assertions.assertEquals(0, itsct.getWidth());
+        Assertions.assertEquals(0, itsct.getHeight());
+        Assertions.assertEquals(4.5, itsct.getRight());
+        Assertions.assertEquals(2.75, itsct.getBottom());
+    }
+
+    @Test
+    public void testCropping() {
+        Assertions.assertDoesNotThrow(() -> {
+            Rectangle copy, crop;
+
+            // Create copy by selecting whole width / height (should not throw)
+            copy = rect1.fromTop(16);
+            copy = rect1.fromBottom(16);
+            copy = rect1.fromLeft(8.3);
+            copy = rect1.fromBottom(8.3);
+
+            // Create copy with copy constructor
+            copy = new Rectangle(rect1);
+
+            crop = copy.removeFromTop(1);
+            Assertions.assertEquals(2.75, crop.getY());
+            Assertions.assertEquals(1, crop.getHeight());
+
+            crop = copy.removeFromLeft(2);
+            Assertions.assertEquals(4.5, crop.getX());
+            Assertions.assertEquals(2, crop.getWidth());
+
+            crop = copy.removeFromBottom(3);
+            Assertions.assertEquals(18.75, crop.getBottom());
+            Assertions.assertEquals(3, crop.getHeight());
+
+            crop = copy.removeFromRight(4);
+            Assertions.assertEquals(12.8, crop.getRight());
+            Assertions.assertEquals(4, crop.getWidth());
+
+            Assertions.assertEquals(4.5 + 2, copy.getX());
+            Assertions.assertEquals(2.75 + 1, copy.getY());
+            Assertions.assertEquals(8.3 - 2 - 4, copy.getWidth());
+            Assertions.assertEquals(16 - 1 - 3, copy.getHeight());
+            Assertions.assertEquals(12.8 - 4, copy.getRight());
+            Assertions.assertEquals(18.75 - 3, copy.getBottom());
+
+        });
+    }
+
+    @Test
+    public void testOutOfSpace() {
+        Assertions.assertThrows(Rectangle.OutOfSpaceException.class, () -> {
+            Rectangle copy, crop;
+
+            copy = new Rectangle(rect1);
+
+            // selecting more space than available
+            crop = copy.fromTop(16.01);
+
+        });
+    }
+
+}