/*
*
*
* Copyright 1990-2007 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.i3test.*;
/**
* This test is designed to test Chameleon's ItemLFImpl.lDoInternalLayout()
* routine only. It does not test label size or content size calculations.
* It tests label location and content location calculations.
*
* Internal layout for all items is handled in ItemLFImpl.
* lDoInternalLayout() is given label and content sizes and available
* width, height, it should place label and content in correct place.
* Here is what to expect:
* If label and content are empty, both bounds are set to 0.
* If label is empty, content is given as much space as it needs but
* not more than available.
* If content is empty, label is given as much space as it needs but
* not more than available.
* If label is a single line label (its height <= label font height) then
* there is an attempt to fit label, content and 3 pixel padding between
* them on the same line.
* Otherwise content is placed under label with 2 pixel horizontal padding
* in between.
*
* Furthermore, if label and content are on the same line than
* shorter part (label or content) is vertically centered
* against the taller one (content or label).
*
* Then if there is extra space (item can fit in smaller size than
* it is given) then the space is distributed based on the layout
* primitives set.
*
* ItemLFImpl and Item area abstract in javax.microedition.lcdui.
* We extend them to test lDoInternalLayout().
*/
public class TestItemLFImplLDoInternalLayout extends TestCase {
public void runTests() {
// no extra space, null label, null content
declare("test1");
checkLayout(new TestItemLFImpl(0, 0, // labelSize
0, 0, // contentSize
0, 0, // itemSize
10), // label font height
0, 0, // checked label location
0, 0); // checked content location
// no extra space, null label, non null content
declare("test2");
checkLayout(new TestItemLFImpl(0, 0, // labelSize
100, 100, // contentSize
100, 100, // itemSize
10), // label font height
0, 0, // checked label location
0, 0); // checked content location
// no extra space, non null label, null content
declare("test3");
checkLayout(new TestItemLFImpl(100, 100, // labelSize
0, 0, // contentSize
100, 100, // itemSize
10), // label font height
0, 0, // checked label location
0, 0); // checked content location
// no extra space, non null label, non null content;
// label and content are on the same line;
// label height > content height
declare("test4");
checkLayout(new TestItemLFImpl(50, 20, // labelSize
50, 10, // contentSize
103, 20, // itemSize
20), // labelHeight to be single ln
0, 0, // checked label location
53, 5); // checked content location
// no extra space, non null label, non null content
// label and content are on the same line
// label height < content height
declare("test5");
checkLayout(new TestItemLFImpl(50, 10, // labelSize
50, 20, // contentSize
103, 20, // itemSize
10), // labelHeight to be single ln
0, 5, // checked label location
53, 0); // checked content location
// no extra space, non null label, non null content
// label and content are on different lines (due to width)
// label width < content width
declare("test6");
checkLayout(new TestItemLFImpl(30, 10, // labelSize
50, 20, // contentSize
50, 32, // itemSize
10), // labelHeight to be single ln
0, 0, // checked label location
0, 12); // checked content location
// no extra space, non null label, non null content
// label and content are on different lines (due to multiline label)
// label width < content width
declare("test7");
checkLayout(new TestItemLFImpl(30, 20, // labelSize
50, 30, // contentSize
50, 52, // itemSize
10), // labelHeight to be single ln
0, 0, // checked label location
0, 22); // checked content location
// no extra space, non null label, non null content
// label and content are on different lines (due to width)
// label width > content width
declare("test8");
checkLayout(new TestItemLFImpl(50, 10, // labelSize
30, 20, // contentSize
50, 32, // itemSize
10), // labelHeight to be single ln
0, 0, // checked label location
0, 12); // checked content location
// no extra space, non null label, non null content
// label and content are on different lines (due to mulitline label)
// label width > content width
declare("test9");
checkLayout(new TestItemLFImpl(50, 20, // labelSize
30, 30, // contentSize
50, 52, // itemSize
10), // labelHeight to be single ln
0, 0, // checked label location
0, 22); // checked content location
// ************ more space HORIZONTALLY **************************
// ****************************************************************
// there IS extra space horizontally,
// LAYOUT_CENTER and LAYOUT_RIGHT are NOT set
// null label, non null content
declare("test10");
checkLayout(new TestItemLFImpl(0, 0, // labelSize
50, 50, // contentSize
100, 50, // itemSize
10), // labelHeight to be single ln
0, 0, // checked label location
0, 0); // checked content location
// there IS extra space horizontally,
// LAYOUT_CENTER and LAYOUT_RIGHT are NOT set
// non null label, null content
declare("test11");
checkLayout(new TestItemLFImpl(50, 50, // labelSize
0, 0, // contentSize
100, 50, // itemSize
10), // labelHeight to be single ln
0, 0, // checked label location
0, 0); // checked content location
// there IS extra space horizontally,
// LAYOUT_CENTER and LAYOUT_RIGHT are NOT set
// non null label, non null content
// label and content on the same line;
// label height > content height
declare("test11");
checkLayout(new TestItemLFImpl(47, 20, // labelSize
50, 10, // contentSize
200, 20, // itemSize
20), // labelHeight to be single ln
0, 0, // checked label location
50, 5); // checked content location
// there IS extra space horizontally,
// LAYOUT_CENTER and LAYOUT_RIGHT are NOT set
// non null label, non null content
// label and content on the same line
// label height < content height
declare("test12");
checkLayout(new TestItemLFImpl(47, 10, // labelSize
50, 20, // contentSize
200, 20, // itemSize
10), // labelHeight to be single ln
0, 5, // checked label location
50, 0); // checked content location
// there IS extra space horizontally,
// LAYOUT_CENTER and LAYOUT_RIGHT are NOT set
// non null label, non null content
// label and content on different lines
// label width < content width
declare("test13");
checkLayout(new TestItemLFImpl(30, 20, // labelSize
50, 20, // contentSize
100, 32, // itemSize
10), // labelHeight to be single ln
0, 0, // checked label location
0, 22); // checked content location
// there IS extra space horizontally,
// LAYOUT_CENTER and LAYOUT_RIGHT are NOT set
// non null label, non null content
// label and content on different lines
// label width > content width
declare("test14");
checkLayout(new TestItemLFImpl(50, 20, // labelSize
30, 20, // contentSize
100, 32, // itemSize
10), // labelHeight to be single ln
0, 0, // checked label location
0, 22); // checked content location
// **********************************************
// there IS extra space horizontally,
// LAYOUT_CENTER is set
// non null label, non null content
// label and content on the same line;
// label height > content height
declare("test15");
checkLayout(new TestItemLFImpl(47, 20, // labelSize
50, 10, // contentSize
200, 20, // itemSize
20, // labelHeight to be single ln
Item.LAYOUT_CENTER),
50, 0, // checked label location
100, 5); // checked content location
// there IS extra space horizontally,
// LAYOUT_CENTER is set
// non null label, non null content
// label and content on the same line
// label height < content height
declare("test16");
checkLayout(new TestItemLFImpl(47, 10, // labelSize
50, 20, // contentSize
200, 20, // itemSize
10, // labelHeight to be single ln
Item.LAYOUT_CENTER),
50, 5, // checked label location
100, 0); // checked content location
// there IS extra space horizontally,
// LAYOUT_CENTER is set
// non null label, non null content
// label and content on different lines
// label width < content width
declare("test17");
checkLayout(new TestItemLFImpl(30, 20, // labelSize
50, 20, // contentSize
100, 32, // itemSize
10, // labelHeight to be single ln
Item.LAYOUT_CENTER),
35, 0, // checked label location
25, 22); // checked content location
// there IS extra space horizontally,
// LAYOUT_CENTER is set
// non null label, non null content
// label and content on different lines
// label width > content width
declare("test18");
checkLayout(new TestItemLFImpl(50, 20, // labelSize
30, 20, // contentSize
100, 32, // itemSize
10, // labelHeight to be single ln
Item.LAYOUT_CENTER),
25, 0, // checked label location
35, 22); // checked content location
// *****************
// there IS extra space horizontally,
// LAYOUT_RIGHT is set
// non null label, non null content
// label and content on the same line;
// label height > content height
declare("test19");
checkLayout(new TestItemLFImpl(47, 20, // labelSize
50, 10, // contentSize
200, 20, // itemSize
20, // labelHeight to be single ln
Item.LAYOUT_RIGHT),
100, 0, // checked label location
150, 5); // checked content location
// there IS extra space horizontally,
// LAYOUT_RIGHT is set
// non null label, non null content
// label and content on the same line
// label height < content height
declare("test20");
checkLayout(new TestItemLFImpl(47, 10, // labelSize
50, 20, // contentSize
200, 20, // itemSize
10, // labelHeight to be single ln
Item.LAYOUT_RIGHT),
100, 5, // checked label location
150, 0); // checked content location
// there IS extra space horizontally,
// LAYOUT_RIGHT is set
// non null label, non null content
// label and content on different lines
// label width < content width
declare("test21");
checkLayout(new TestItemLFImpl(30, 20, // labelSize
50, 20, // contentSize
100, 32, // itemSize
10, // labelHeight to be single ln
Item.LAYOUT_RIGHT),
50, 0, // checked label location
50, 22); // checked content location
// there IS extra space horizontally,
// LAYOUT_RIGHT is set
// non null label, non null content
// label and content on different lines
// label width > content width
declare("test22");
checkLayout(new TestItemLFImpl(30, 20, // labelSize
50, 20, // contentSize
100, 32, // itemSize
10, // labelHeight to be single ln
Item.LAYOUT_RIGHT),
50, 0, // checked label location
50, 22); // checked content location
// ************ more space VERTICALLY **************************
// ****************************************************************
// there IS extra space vertically,
// LAYOUT_VCENTER and LAYOUT_BOTTOM are NOT set
// null label, non null content
declare("test23");
checkLayout(new TestItemLFImpl(0, 0, // labelSize
50, 50, // contentSize
50, 100, // itemSize
10), // labelHeight to be single ln
0, 0, // checked label location
0, 0); // checked content location
// there IS extra space vertically,
// LAYOUT_VCENTER and LAYOUT_BOTTOM are NOT set
// non null label, null content
declare("test24");
checkLayout(new TestItemLFImpl(50, 50, // labelSize
0, 0, // contentSize
50, 100, // itemSize
10), // labelHeight to be single ln
0, 0, // checked label location
0, 0); // checked content location
// there IS extra space vertically,
// LAYOUT_VCENTER and LAYOUT_BOTTOM are NOT set
// non null label, non null content
// label and content on the same line;
// label height > content height
declare("test25");
checkLayout(new TestItemLFImpl(47, 20, // labelSize
50, 10, // contentSize
100, 100, // itemSize
20), // labelHeight to be single ln
0, 0, // checked label location
50, 5); // checked content location
// there IS extra space vertically,
// LAYOUT_VCENTER and LAYOUT_BOTTOM are NOT set
// non null label, non null content
// label and content on the same line
// label height < content height
declare("test26");
checkLayout(new TestItemLFImpl(47, 10, // labelSize
50, 20, // contentSize
100, 100, // itemSize
10), // labelHeight to be single ln
0, 5, // checked label location
50, 0); // checked content location
// there IS extra space vertically,
// LAYOUT_VCENTER and LAYOUT_BOTTOM are NOT set
// non null label, non null content
// label and content are on different lines
// label width < content width
declare("test27");
checkLayout(new TestItemLFImpl(30, 20, // labelSize
50, 20, // contentSize
50, 100, // itemSize
10), // labelHeight to be single ln
0, 0, // checked label location
0, 22); // checked content location
// there IS extra space vertically,
// LAYOUT_VCENTER and LAYOUT_BOTTOM are NOT set
// non null label, non null content
// label and content are on different lines
// label width > content width
declare("test28");
checkLayout(new TestItemLFImpl(50, 20, // labelSize
30, 20, // contentSize
50, 100, // itemSize
10), // labelHeight to be single ln
0, 0, // checked label location
0, 22); // checked content location
// **********************************************
// there IS extra space vertically,
// LAYOUT_VCENTER is set
// non null label, non null content
// label and content on the same line;
// label height > content height
declare("test29");
checkLayout(new TestItemLFImpl(47, 20, // labelSize
50, 10, // contentSize
100, 100, // itemSize
20, // labelHeight to be single ln
Item.LAYOUT_VCENTER),
0, 40, // checked label location
50, 45); // checked content location
// there IS extra space vertically,
// LAYOUT_VCENTER is set
// non null label, non null content
// label and content on the same line
// label height < content height
declare("test30");
checkLayout(new TestItemLFImpl(47, 10, // labelSize
50, 20, // contentSize
100, 100, // itemSize
10, // labelHeight to be single ln
Item.LAYOUT_VCENTER),
0, 45, // checked label location
50, 40); // checked content location
// there IS extra space vertically,
// LAYOUT_VCENTER is set
// non null label, non null content
// label and content on different lines
// label width < content width
declare("test31");
checkLayout(new TestItemLFImpl(30, 18, // labelSize
50, 20, // contentSize
50, 100, // itemSize
10, // labelHeight to be single ln
Item.LAYOUT_VCENTER),
0, 30, // checked label location
0, 50); // checked content location
// there IS extra space vertically,
// LAYOUT_VCENTER is set
// non null label, non null content
// label and content on different lines
// label width > content width
declare("test32");
checkLayout(new TestItemLFImpl(50, 18, // labelSize
30, 20, // contentSize
50, 100, // itemSize
10, // labelHeight to be single ln
Item.LAYOUT_VCENTER),
0, 30, // checked label location
0, 50); // checked content location
// *************************************************************
// there IS extra space vertically,
// LAYOUT_BOTTOM is set
// non null label, non null content
// label and content are on the same line;
// label height > content height
declare("test33");
checkLayout(new TestItemLFImpl(47, 20, // labelSize
50, 10, // contentSize
100, 100, // itemSize
20, // labelHeight to be single ln
Item.LAYOUT_BOTTOM),
0, 80, // checked label location
50, 85); // checked content location
// there IS extra space vertically,
// LAYOUT_BOTTOM is set
// non null label, non null content
// label and content on the same line
// label height < content height
declare("test34");
checkLayout(new TestItemLFImpl(47, 10, // labelSize
50, 20, // contentSize
100, 100, // itemSize
10, // labelHeight to be single ln
Item.LAYOUT_BOTTOM),
0, 85, // checked label location
50, 80); // checked content location
// there IS extra space vertically,
// LAYOUT_BOTTOM is set
// non null label, non null content
// label and content on different lines
// label width < content width
declare("test35");
checkLayout(new TestItemLFImpl(30, 18, // labelSize
50, 20, // contentSize
50, 100, // itemSize
10, // labelHeight to be single ln
Item.LAYOUT_BOTTOM),
0, 60, // checked label location
0, 80); // checked content location
// there IS extra space vertically,
// LAYOUT_BOTTOM is set
// non null label, non null content
// label and content on different lines
// label width > content width
declare("test36");
checkLayout(new TestItemLFImpl(30, 18, // labelSize
50, 20, // contentSize
50, 100, // itemSize
10, // labelHeight to be single ln
Item.LAYOUT_BOTTOM),
0, 60, // checked label location
0, 80); // checked content location
// ***** more space VERTICALLY and HORIZONTALLY ******************
// ****************************************************************
// there IS extra space vertically and horizontally
// LAYOUT_CENTER & LAYOUT_VCENTER is set
// non null label, non null content
// label and content are on the same line;
declare("test37");
checkLayout(new TestItemLFImpl(47, 20, // labelSize
50, 10, // contentSize
200, 100, // itemSize
20, // labelHeight to be single ln
Item.LAYOUT_CENTER |
Item.LAYOUT_VCENTER),
50, 40, // checked label location
100, 45); // checked content location
// there IS extra space vertically and horizontally,
// LAYOUT_CENTER & LAYOUT_VCENTER is set
// non null label, non null content
// label and content are on different lines
declare("test38");
checkLayout(new TestItemLFImpl(30, 18, // labelSize
50, 20, // contentSize
100, 100, // itemSize
10, // labelHeight to be single ln
Item.LAYOUT_CENTER |
Item.LAYOUT_VCENTER),
35, 30, // checked label location
25, 50); // checked content location
// there IS extra space vertically and horizontally
// LAYOUT_RIGHT & LAYOUT_BOTTOM is set
// non null label, non null content
// label and content are on the same line;
declare("test39");
checkLayout(new TestItemLFImpl(47, 20, // labelSize
50, 10, // contentSize
200, 100, // itemSize
20, // labelHeight to be single ln
Item.LAYOUT_RIGHT | Item.LAYOUT_BOTTOM),
100, 80, // checked label location
150, 85); // checked content location
// there IS extra space vertically and horizontally,
// LAYOUT_RIGHT & LAYOUT_BOTTOM is set
// non null label, non null content
// label and content are on different lines
declare("test40");
checkLayout(new TestItemLFImpl(30, 18, // labelSize
50, 20, // contentSize
100, 100, // itemSize
10, // labelHeight to be single ln
Item.LAYOUT_RIGHT | Item.LAYOUT_BOTTOM),
50, 60, // checked label location
50, 80); // checked content location
}
private void checkLayout(TestItemLFImpl item, int labelX, int labelY,
int contentX, int contetnY) {
item.checkLayout(labelX, labelY, contentX, contetnY);
}
class TestItem extends Item {
TestItem() {
super(null);
}
}
class TestItemLFImpl extends ItemLFImpl {
TestItemLFImpl(int labelWidth, int labelHeight,
int contentWidth, int contentHeight,
int w, int h,
int labelFontHeight) {
this(labelWidth, labelHeight, contentWidth, contentHeight,
w, h, labelFontHeight, Item.LAYOUT_DEFAULT);
}
TestItemLFImpl(int labelWidth, int labelHeight,
int contentWidth, int contentHeight,
int w, int h,
int labelFontHeight, int layout) {
super(new TestItem());
item.itemLF = this;
item.setLayout(layout);
this.labelFontHeight = labelFontHeight;
labelBounds[X] = labelBounds[Y] = -1;
labelBounds[WIDTH] = labelWidth;
labelBounds[HEIGHT] = labelHeight;
contentBounds[X] = contentBounds[Y] = -1;
contentBounds[WIDTH] = contentWidth;
contentBounds[HEIGHT] = contentHeight;
// We assume that labelBounds and contentBounds
// passed into lDoInternalLayout() are correct
// that is why we need cachedWidth == w
cachedWidth = w;
lDoInternalLayout(labelBounds, contentBounds, w, h);
}
void checkLayout(int labelX, int labelY, int contentX, int contentY) {
assertEquals(labelBounds[X], labelX);
assertEquals(labelBounds[Y], labelY);
assertEquals(contentBounds[X], contentX);
assertEquals(contentBounds[Y], contentY);
}
// overriding this function removes dependency on the
// font height actually used on the platform.
boolean labelAndContentOnSameLine(int labelHeight) {
return labelHeight <= labelFontHeight;
}
int getHorizontalPad() {
return 3;
}
int getVerticalPad() {
return 2;
}
private int labelFontHeight;
}
}
|