### Question:
MapTileGame extends FeaturableAbstract implements MapTile, Listenable<TileSetListener> { public void create(Media levelrip, int tileWidth, int tileHeight, int horizontalTiles) { final TilesExtractor tilesExtractor = new TilesExtractor(); final Collection<ImageBuffer> buffers = tilesExtractor.extract(tileWidth, tileHeight, Arrays.asList(levelrip)); loadSheets(SheetsExtractor.extract(buffers, horizontalTiles)); for (final ImageBuffer tileBuffer : buffers) { tileBuffer.dispose(); } LevelRipConverter.start(levelrip, mapSurface); } MapTileGame(); void create(Media levelrip, int tileWidth, int tileHeight, int horizontalTiles); void create(Media levelrip); void create(Media levelrip, Media sheetsConfig); @Override void create(int tileWidth, int tileHeight, int widthInTile, int heightInTile); @Override void loadSheets(List<SpriteTiled> sheets); @Override void loadSheets(Media sheetsConfig); @Override void clear(); @Override void addListener(TileSetListener listener); @Override void removeListener(TileSetListener listener); @Override void setTile(int tx, int ty, int number); @Override Tile getTile(int tx, int ty); @Override Tile getTile(Localizable localizable, int offsetX, int offsetY); @Override Tile getTileAt(double x, double y); @Override Collection<Tile> getNeighbors(Tile tile); @Override Collection<Tile> getTilesHit(double ox, double oy, double x, double y); @Override int getInTileX(Localizable localizable); @Override int getInTileY(Localizable localizable); @Override int getInTileWidth(Surface surface); @Override int getInTileHeight(Surface surface); @Override SpriteTiled getSheet(int sheetId); @Override int getSheetsNumber(); @Override int getTilesPerSheet(); @Override int getTilesNumber(); @Override int getTileWidth(); @Override int getTileHeight(); @Override int getInTileWidth(); @Override int getInTileHeight(); @Override int getInTileRadius(); @Override boolean isCreated(); @Override int getWidth(); @Override int getHeight(); @Override Media getMedia();  }### Answer:
@Test void testCreate() { assertFalse(map.isCreated()); map.create(16, 32, 2, 3); assertTrue(map.isCreated()); map.loadSheets(new ArrayList<SpriteTiled>()); assertEquals(16, map.getTileWidth()); assertEquals(32, map.getTileHeight()); assertEquals(2 * 16, map.getWidth()); assertEquals(3 * 32, map.getHeight()); assertEquals(2, map.getInTileWidth()); assertEquals(3, map.getInTileHeight()); assertEquals((int) Math.ceil(StrictMath.sqrt(2.0 * 2.0 + 3.0 * 3.0)), map.getInTileRadius()); }
@Test void testCreateWrongTileWidth() { assertThrows(() -> map.create(0, 1, 1, 1), "Invalid argument: 0 is not strictly superior to 0"); }
@Test void testCreateWrongTileHeight() { assertThrows(() -> map.create(1, 0, 1, 1), "Invalid argument: 0 is not strictly superior to 0"); }
@Test void testCreateWrongWidth() { assertThrows(() -> map.create(1, 1, 0, 1), "Invalid argument: 0 is not strictly superior to 0"); }
@Test void testCreateWrongHeight() { assertThrows(() -> map.create(1, 1, 1, 0), "Invalid argument: 0 is not strictly superior to 0"); }