Newer
Older
piccolo2d.java / extras / src / test / java / edu / umd / cs / piccolox / POffscreenCanvasTest.java
@Michael L Heuer Michael L Heuer on 17 Jul 2009 6 KB Issue 69 ; adding render quality parameter
/*
 * 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);
    }
}