@@ -0,0 +1,1224 @@
+package com.github.davidmoten.rtree;%0A%0Aimport static org.junit.Assert.assertTrue;%0A%0Aimport java.io.IOException;%0Aimport java.util.concurrent.Callable;%0Aimport java.util.concurrent.atomic.AtomicBoolean;%0A%0Aimport org.junit.Test;%0A%0Aimport com.github.davidmoten.junit.Asserts;%0A%0Apublic class ImageSaverTest %7B%0A%0A    @Test%0A    public void testSaveImageToNonExistentDirectoryThrowsRuntimeException() %7B%0A        Visualizer v = RTree.create().visualize(100, 100);%0A        v.save(%22target/saved-image%22);%0A    %7D%0A%0A    @Test(expected = RuntimeException.class)%0A    public void testRunThatThrows() %7B%0A        ImageSaver.run(new Callable%3CVoid%3E() %7B%0A%0A            @Override%0A            public Void call() throws Exception %7B%0A                throw new IOException();%0A            %7D%0A        %7D);%0A    %7D%0A%0A    @Test%0A    public void testRunThatDoesNotThrow() %7B%0A        final AtomicBoolean b = new AtomicBoolean();%0A        ImageSaver.run(new Callable%3CVoid%3E() %7B%0A%0A            @Override%0A            public Void call() throws Exception %7B%0A                b.set(true);%0A                return null;%0A            %7D%0A        %7D);%0A        assertTrue(b.get());%0A    %7D%0A%0A    @Test%0A    public void testIsUtilClass() %7B%0A        Asserts.assertIsUtilityClass(ImageSaver.class);%0A    %7D%0A%0A%7D%0A

add ImageSaver unit tests