@Test
  public void testCreateBasedOnShapeType() throws Exception {
    TestEditBlackboard bb = new TestEditBlackboard();
    String fid = "FeatureID";
    EditGeom geom = bb.newGeom(fid, null);
    bb.addPoint(10, 10, geom.getShell());
    EditGeom geom2 = bb.newGeom(fid, null);
    AttributeTypeBuilder builder = new AttributeTypeBuilder();
    builder.setBinding(Geometry.class);
    builder.setName("geom");
    GeometryDescriptor at = builder.buildDescriptor("geom", builder.buildGeometryType());
    bb.addPoint(100, 100, geom2.getShell());

    String fid2 = "FID2";
    EditGeom differentGeom = bb.newGeom(fid2, null);
    bb.addPoint(200, 200, differentGeom.getShell());

    Map<String, Bag> result = GeometryCreationUtil.createAllGeoms(geom, Point.class, at, false);
    assertEquals(1, result.get(fid2).jts.size());
    assertEquals(Point.class, result.get(fid2).jts.get(0).getClass());

    differentGeom.setShapeType(ShapeType.LINE);
    result = GeometryCreationUtil.createAllGeoms(geom, Point.class, at, false);
    assertEquals(1, result.get(fid2).jts.size());
    assertEquals(LineString.class, result.get(fid2).jts.get(0).getClass());

    differentGeom.setShapeType(ShapeType.POLYGON);
    result = GeometryCreationUtil.createAllGeoms(geom, Point.class, at, false);
    assertEquals(1, result.get(fid2).jts.size());
    assertEquals(Polygon.class, result.get(fid2).jts.get(0).getClass());

    differentGeom.setShapeType(ShapeType.UNKNOWN);
    result = GeometryCreationUtil.createAllGeoms(geom, Point.class, at, false);
    assertEquals(1, result.get(fid2).jts.size());
    assertEquals(Point.class, result.get(fid2).jts.get(0).getClass());

    bb.addPoint(200, 200, differentGeom.getShell());

    result = GeometryCreationUtil.createAllGeoms(geom, Point.class, at, false);
    assertEquals(1, result.get(fid2).jts.size());
    assertEquals(Point.class, result.get(fid2).jts.get(0).getClass());

    bb.addPoint(200, 210, differentGeom.getShell());

    result = GeometryCreationUtil.createAllGeoms(geom, Point.class, at, false);
    assertEquals(1, result.get(fid2).jts.size());
    assertEquals(LineString.class, result.get(fid2).jts.get(0).getClass());

    bb.addPoint(200, 200, differentGeom.getShell());

    result = GeometryCreationUtil.createAllGeoms(geom, Point.class, at, false);
    assertEquals(1, result.get(fid2).jts.size());
    assertEquals(Polygon.class, result.get(fid2).jts.get(0).getClass());
  }
  @Test
  public void testNewGeom() throws Exception {
    TestEditBlackboard bb = new TestEditBlackboard();
    bb.getGeoms().get(0).setChanged(false);
    bb.newGeom("testing", null); // $NON-NLS-1$

    assertEquals(1, bb.getGeoms().size());
    assertEquals("testing", bb.getGeoms().get(0).getFeatureIDRef().get()); // $NON-NLS-1$

    bb.clear();
    bb.getGeoms().get(0).setChanged(true);
    bb.newGeom("test2", null); // $NON-NLS-1$

    assertEquals(2, bb.getGeoms().size());
    assertEquals("test2", bb.getGeoms().get(1).getFeatureIDRef().get()); // $NON-NLS-1$
  }
  @Test
  public void testMoveGeom() throws Exception {
    TestEditBlackboard bb = new TestEditBlackboard();
    EditGeom geom = bb.getGeoms().get(0);
    PrimitiveShape shell = geom.getShell();
    bb.addPoint(10, 10, shell);
    bb.addPoint(11, 10, shell);
    bb.addPoint(12, 10, shell);
    bb.addPoint(13, 10, shell);
    bb.addPoint(14, 10, shell);

    bb.moveSelection(1, 0, geom.createSelection());

    assertEquals(Point.valueOf(11, 10), shell.getPoint(0));
    assertEquals(Point.valueOf(12, 10), shell.getPoint(1));
    assertEquals(Point.valueOf(13, 10), shell.getPoint(2));
    assertEquals(Point.valueOf(14, 10), shell.getPoint(3));
    assertEquals(Point.valueOf(15, 10), shell.getPoint(4));
  }