/* * * * Copyright 1990-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). * * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. */ package javax.microedition.lcdui; import com.sun.midp.chameleon.skins.*; import com.sun.midp.i3test.TestCase; import com.sun.midp.util.LcduiTestCanvas; import com.sun.midp.util.LcduiTestMIDlet; import com.sun.midp.configurator.Constants; /** * This test case does extensive testing on the proper sizing * of Canvas. It validates the size reported to a Canvas under * various conditions, such as a canvas with a title, a ticker, * in standard screen mode, in fullscreen mode, as well as a * canvas which is newly created versus showing on the screen. */ public class TestCanvasSizing extends TestCase { /** Test Name */ static final String testName = "CanvasSizing"; // We define a set of constants that are set by pulling values // out of the various skin classes (ie. TitleSkin, TickerSkin, etc). /** Screen width in normal mode */ protected static int STD_WIDTH; /** Screen height in normal mode */ protected static int STD_HEIGHT; // Note that although for chameleon's standard spec, the fullscreen // height and the standard height are the same, this may not be the // case for all implementations. Including both here allows the test // to be valid in both circumstances. /** Screen width in fullsize mode */ protected static int FS_WIDTH; /** Screen height in fullsize mode */ protected static int FS_HEIGHT; /** Title height */ protected static int TITLE_HEIGHT; /** Ticker height */ protected static int TICKER_HEIGHT; /** Softbutton height */ protected static int SOFTBTN_HEIGHT; /** The Display to use to view our test canvases */ protected Display display; /** Test ticker, used for sizing only */ protected Ticker ticker; /** * Construct a new CanvasSizing test. The constructor * initializes all sizing constants from the chameleon * skin files. */ public TestCanvasSizing() { // Initialize the constants STD_WIDTH = ScreenSkin.WIDTH; STD_HEIGHT = Constants.CHAM_HEIGHT; FS_WIDTH = Constants.CHAM_FULLWIDTH; FS_HEIGHT = Constants.CHAM_FULLHEIGHT; TITLE_HEIGHT = TitleSkin.HEIGHT; TICKER_HEIGHT = TickerSkin.HEIGHT; SOFTBTN_HEIGHT = SoftButtonSkin.HEIGHT; ticker = new Ticker("Canvas sizing test"); } /** * This is a utility method which retrieves the canvas's size and * validates it against the passed in values after making sure * the canvas is visible on the screen. * * @param canvas the canvas to test * @param WIDTH the <b>correct</b> width the canvas should be * @param HEIGHT the <b>correct</b> height the canvas should be */ protected void checkCanvasSize(TestCanvas canvas, int WIDTH, int HEIGHT) { display.setCurrent(canvas); if (!canvas.awaitPaint()) { fail("checkCanvasSize: canvas not visible"); return; } int w = canvas.getWidth(); int h = canvas.getHeight(); assertEquals("Checking canvas width (shown):", WIDTH, w); assertEquals("Checking canvas height (shown):", HEIGHT, h); } /** * This test is for a canvas with a title and a ticker set in * standard screen mode. */ protected void testOne() { declare(testName + " 1: Standard screen mode with title and ticker."); TestCanvas canvas = new TestCanvas(); canvas.setTitle("CanvasSizing Test 1"); canvas.setTicker(ticker); checkCanvasSize(canvas, STD_WIDTH, STD_HEIGHT - SOFTBTN_HEIGHT - TITLE_HEIGHT - TICKER_HEIGHT); } /** * This test is for a canvas with a title but no ticker set in * standard screen mode. */ protected void testTwo() { declare(testName + " 2: Standard screen mode with title."); TestCanvas canvas = new TestCanvas(); canvas.setTitle("CanvasSizing Test 2"); checkCanvasSize(canvas, STD_WIDTH, STD_HEIGHT - SOFTBTN_HEIGHT - TITLE_HEIGHT); } /** * This test is for a canvas with a ticker but no title set in * standard screen mode. */ protected void testThree() { declare(testName + " 3: Standard screen mode with ticker."); TestCanvas canvas = new TestCanvas(); canvas.setTicker(ticker); checkCanvasSize(canvas, STD_WIDTH, STD_HEIGHT - SOFTBTN_HEIGHT - TICKER_HEIGHT); } /** * This test is for a canvas with no title and no ticker set in * standard screen mode. */ protected void testFour() { declare(testName + " 4: Standard screen mode, plain."); TestCanvas canvas = new TestCanvas(); checkCanvasSize(canvas, STD_WIDTH, STD_HEIGHT - SOFTBTN_HEIGHT); } /** * This test is for a canvas with a title and a ticker set in * fullscreen mode. */ protected void testFive() { declare(testName + " 5: Fullsize screen mode with title and ticker."); TestCanvas canvas = new TestCanvas(); canvas.setTitle("CanvasSizing Test 5"); canvas.setTicker(ticker); canvas.toggleFullscreen(true); // NOTE: In fullscreen mode, the title and ticker shouldn't appear, as // per the chameleon UI spec: that area is then used by the canvas checkCanvasSize(canvas, FS_WIDTH, FS_HEIGHT); } /** * This test is for a canvas with a title but no ticker set in * fullscreen mode. */ protected void testSix() { declare(testName + " 6: Fullsize screen mode with title."); TestCanvas canvas = new TestCanvas(); canvas.setTitle("CanvasSizing Test 6"); canvas.toggleFullscreen(true); // NOTE: In fullscreen mode, the title and ticker shouldn't appear, as // per the chameleon UI spec: that area is then used by the canvas checkCanvasSize(canvas, FS_WIDTH, FS_HEIGHT); } /** * This test is for a canvas with a ticker but no title set in * fullscreen mode. */ protected void testSeven() { declare(testName + " 7: Fullsize screen mode with ticker."); TestCanvas canvas = new TestCanvas(); canvas.setTicker(ticker); canvas.toggleFullscreen(true); // NOTE: In fullscreen mode, the title and ticker shouldn't appear, as // per the chameleon UI spec: that area is then used by the canvas checkCanvasSize(canvas, FS_WIDTH, FS_HEIGHT); } /** * This test is for a canvas with no ticker and no title set in * fullscreen mode. */ protected void testEight() { declare(testName + " 8: Fullsize screen mode, plain."); TestCanvas canvas = new TestCanvas(); canvas.toggleFullscreen(true); // NOTE: In fullscreen mode, the title and ticker shouldn't appear, as // per the chameleon UI spec: that area is then used by the canvas checkCanvasSize(canvas, FS_WIDTH, FS_HEIGHT); } /** * Overridden from TestCase parent. This method will kick off each * individual test */ public void runTests() throws Throwable { try { LcduiTestMIDlet.invoke(); display = LcduiTestMIDlet.getDisplay(); testOne(); testTwo(); testThree(); testFour(); testFive(); testSix(); testSeven(); testEight(); } finally { LcduiTestMIDlet.cleanup(); } } /** * Inner canvas class which notifies the main TestCase when * a particular canvas has become visible. This allows the * main TestCase to do sizing verification both before the * canvas becomes visible, and after. */ class TestCanvas extends LcduiTestCanvas { /** * Used to remotely toggle this canvas's fullscreen mode * * @param onOff true if this canvas should go to fullscreen mode */ public void toggleFullscreen(boolean onOff) { super.setFullScreenMode(onOff); } /** * Just a default white fill. The test programmatically changes * screens so it would be too fast to write anything useful anyway, * as the user wouldn't have time to read it. * * @param g the Graphics to paint with */ public void paint1(Graphics g) { int c = g.getColor(); g.setColor(0xFFFFFF); g.fillRect(g.getClipX(), g.getClipY(), g.getClipWidth(), g.getClipHeight()); g.setColor(c); } } }