/* * Copyright (c) 2008-2009, Piccolo2D project, http://piccolo2d.org * Copyright (c) 1998-2008, University of Maryland * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are permitted provided * that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, this list of conditions * and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions * and the following disclaimer in the documentation and/or other materials provided with the * distribution. * * None of the name of the University of Maryland, the name of the Piccolo2D project, or the names of its * contributors may be used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package edu.umd.cs.piccolox; import java.awt.Color; import java.awt.Cursor; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import edu.umd.cs.piccolo.PCamera; import edu.umd.cs.piccolo.nodes.PPath; import edu.umd.cs.piccolo.util.PPaintContext; import junit.framework.TestCase; /** * Unit test for POffscreenCanvas. */ public class POffscreenCanvasTest extends TestCase { public void testConstructor() { POffscreenCanvas canvas0 = new POffscreenCanvas(100, 100); assertNotNull(canvas0); POffscreenCanvas canvas1 = new POffscreenCanvas(0, 0); assertNotNull(canvas1); POffscreenCanvas canvas2 = new POffscreenCanvas(0, 100); assertNotNull(canvas2); POffscreenCanvas canvas3 = new POffscreenCanvas(100, 0); assertNotNull(canvas3); try { new POffscreenCanvas(-1, 100); fail("ctr(-1, 100) expected IllegalArgumentException"); } catch (IllegalArgumentException e) { // expected } try { new POffscreenCanvas(100, -1); fail("ctr(100, -1) expected IllegalArgumentException"); } catch (IllegalArgumentException e) { // expected } try { new POffscreenCanvas(-1, -1); fail("ctr(-1, -1) expected IllegalArgumentException"); } catch (IllegalArgumentException e) { // expected } } public void testCamera() { POffscreenCanvas canvas = new POffscreenCanvas(100, 200); assertNotNull(canvas); PCamera camera = canvas.getCamera(); assertNotNull(camera); assertEquals(canvas, camera.getComponent()); PCamera camera1 = new PCamera(); canvas.setCamera(camera1); assertEquals(camera1, canvas.getCamera()); assertEquals(null, camera.getComponent()); assertEquals(canvas, camera1.getComponent()); canvas.setCamera(null); assertEquals(null, camera1.getComponent()); assertEquals(null, canvas.getCamera()); } public void testRenderEmpty() { POffscreenCanvas canvas = new POffscreenCanvas(100, 200); BufferedImage image = new BufferedImage(100, 200, BufferedImage.TYPE_INT_ARGB); Graphics2D graphics = image.createGraphics(); canvas.render(graphics); for (int x = 0; x < 100; x++) { for (int y = 0; y < 200; y++) { assertEquals(0, image.getRGB(x, y)); } } } public void testRenderFull() { POffscreenCanvas canvas = new POffscreenCanvas(100, 200); PPath rect = PPath.createRectangle(0.0f, 0.0f, 200.0f, 300.0f); rect.setPaint(new Color(255, 0, 0)); rect.setStroke(null); rect.offset(-100.0d, -100.0d); canvas.getCamera().getLayer(0).addChild(rect); BufferedImage image = new BufferedImage(100, 200, BufferedImage.TYPE_INT_ARGB); Graphics2D graphics = image.createGraphics(); canvas.render(graphics); for (int x = 0; x < 100; x++) { for (int y = 0; y < 200; y++) { // red pixel, RGBA is 255, 0, 0, 255 assertEquals(-65536, image.getRGB(x, y)); } } } public void testRenderNull() { try { POffscreenCanvas canvas = new POffscreenCanvas(100, 200); canvas.render(null); fail("render(null) expected IllegalArgumentException"); } catch (IllegalArgumentException e) { // expected } } public void testRenderQuality() { POffscreenCanvas canvas = new POffscreenCanvas(100, 200); assertEquals(POffscreenCanvas.DEFAULT_RENDER_QUALITY, canvas.getRenderQuality()); canvas.setRenderQuality(PPaintContext.HIGH_QUALITY_RENDERING); assertEquals(PPaintContext.HIGH_QUALITY_RENDERING, canvas.getRenderQuality()); canvas.setRenderQuality(PPaintContext.LOW_QUALITY_RENDERING); assertEquals(PPaintContext.LOW_QUALITY_RENDERING, canvas.getRenderQuality()); try { canvas.setRenderQuality(-1); } catch (IllegalArgumentException e) { // expected } } public void testPaintImmediately() { POffscreenCanvas canvas = new POffscreenCanvas(100, 200); canvas.paintImmediately(); } public void testPopCursor() { POffscreenCanvas canvas = new POffscreenCanvas(100, 200); canvas.popCursor(); } public void testPushCursor() { POffscreenCanvas canvas = new POffscreenCanvas(100, 200); canvas.pushCursor(null); canvas.pushCursor(Cursor.getDefaultCursor()); } public void testInteracting() { POffscreenCanvas canvas = new POffscreenCanvas(100, 200); canvas.setInteracting(true); canvas.setInteracting(false); } }