/* (c) 2015 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.wms.map; import static org.junit.Assert.*; import java.awt.Point; import java.awt.geom.Point2D; import java.awt.image.BufferedImage; import java.awt.image.ComponentSampleModel; import java.awt.image.DataBuffer; import java.awt.image.Raster; import java.awt.image.RenderedImage; import java.awt.image.SampleModel; import javax.media.jai.Interpolation; import javax.media.jai.PlanarImage; import javax.media.jai.TiledImage; import org.geoserver.wms.RasterCleaner; import org.geoserver.wms.map.QuickTileCache.MapKey; import org.geoserver.wms.map.QuickTileCache.MetaTileKey; import org.geotools.geometry.jts.ReferencedEnvelope; import org.geotools.image.ImageWorker; import org.geotools.referencing.crs.DefaultEngineeringCRS; import org.junit.After; import org.junit.Test; public class MetaTileOutputFormatTest { MapKey mapKey = new MapKey("abcd", 0.01, new Point2D.Double(0, 0)); MetaTileKey key = new MetaTileKey(mapKey, new Point(0, 0), new ReferencedEnvelope(0, 10, 0, 10, DefaultEngineeringCRS.GENERIC_2D)); RasterCleaner cleaner = new RasterCleaner(); @After public void cleanup() { cleaner.finished(null); } @Test public void testReleaseOnBufferedImage() throws Exception { BufferedImage bi = new BufferedImage(768, 768, BufferedImage.TYPE_4BYTE_ABGR); MetatileMapOutputFormat.split(key, bi); assertEquals(1, cleaner.getImages().size()); } @Test public void testReleaseOnPlanarImage() throws Exception { BufferedImage bi = new BufferedImage(256, 256, BufferedImage.TYPE_4BYTE_ABGR); RenderedImage planar = new ImageWorker(bi).scale(3, 3, 0, 0, Interpolation.getInstance(Interpolation.INTERP_NEAREST)).getRenderedImage(); MetatileMapOutputFormat.split(key, planar); assertEquals(1, cleaner.getImages().size()); } @Test public void testPlanarImageTranslatedChild() throws Exception { SampleModel sm = new ComponentSampleModel(DataBuffer.TYPE_BYTE, 128, 128, 1, 128, new int[] {0}); TiledImage source = new TiledImage(0, 0, 512, 512, 0, 0, sm, PlanarImage.createColorModel(sm)); Raster[] tiles = source.getTiles(); assertEquals(16, tiles.length); // Without fix for GEOS-8137, this split call will cause a // java.lang.ClassCastException: java.awt.image.Raster cannot be cast to java.awt.image.WritableRaster MetatileMapOutputFormat.split(key, source); } }