blob: 63a1734171775db5c58b4e74150b5edc82c41456 [file] [log] [blame]
/*
* Copyright 2002,2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.jelly.swing;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Point;
import java.io.UnsupportedEncodingException;
import javax.swing.ButtonGroup;
import javax.swing.DebugGraphics;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import junit.framework.TestSuite;
import org.apache.commons.jelly.JellyContext;
import org.apache.commons.jelly.Script;
import org.apache.commons.jelly.XMLOutput;
import org.apache.commons.jelly.test.BaseJellyTest;
/** Tests many swing tags for basic functionality.
* @author Hans Gilde
*
*/
public class TestSwingTags extends BaseJellyTest {
/**
* @param name
*/
public TestSwingTags(String name) {
super(name);
}
public static TestSuite suite() throws Exception {
return new TestSuite(TestSwingTags.class);
}
/** Tests some basic Swing tag functions like creating components
* , adding them to the parent container and setting bean values.
* @throws Exception
*/
public void testBasicComponentFunctions() throws Exception {
if (!isAWTAvailable()) return;
runSwingScript("test.simple");
JellyContext context = getJellyContext();
JFrame frame = (JFrame) context.getVariable("frame");
assertEquals(new Dimension(100,100), frame.getSize());
assertEquals(new Point(200,200), frame.getLocation());
JPanel panel = (JPanel) componentByName(frame.getContentPane(), "panel");
JButton button = (JButton) componentByName(panel, "button");
assertNotNull(button);
assertEquals(new Color(0x11,0x22,0x33), button.getBackground());
assertEquals(new Color(0x44,0x55,0x66), button.getForeground());
assertEquals(DebugGraphics.FLASH_OPTION|DebugGraphics.LOG_OPTION, panel.getDebugGraphicsOptions());
assertEquals(DebugGraphics.BUFFERED_OPTION, button.getDebugGraphicsOptions());
}
/** Tests the GridbagLayout tags, making sure that the constraints are
* set properly including inheritance and basedOn.
* @throws Exception
*/
public void testGridBagBasic() throws Exception {
if (!isAWTAvailable()) return;
runSwingScript("test.gbc");
JellyContext context = getJellyContext();
JFrame frame = (JFrame) context.getVariable("frame");
JButton button = (JButton) componentByName(frame.getContentPane(), "button");
JButton button2 = (JButton) componentByName(frame.getContentPane(), "button2");
GridBagLayout layout = (GridBagLayout) frame.getContentPane().getLayout();
GridBagConstraints constraints = layout.getConstraints(button);
// this is failing
assertEquals(GridBagConstraints.NORTH,constraints.anchor);
assertEquals(GridBagConstraints.VERTICAL, constraints.fill);
assertEquals(3, constraints.gridheight);
assertEquals(2, constraints.gridwidth);
assertEquals(4, constraints.gridx);
assertEquals(5, constraints.gridy);
assertEquals(7, constraints.ipadx);
assertEquals(8, constraints.ipady);
assertEquals(0.3, constraints.weightx, 0);
assertEquals(new Insets(1,2,3,4), constraints.insets);
assertEquals(0.6, constraints.weighty, 0);
GridBagConstraints constraints2 = layout.getConstraints(button2);
assertEquals(1, constraints2.gridx);
assertEquals(2, constraints2.gridy);
assertEquals(2, constraints2.ipadx);
assertEquals(9, constraints2.ipady);
assertEquals(new Insets(3,4,5,6), constraints2.insets);
}
public void testGridBag14() throws Exception {
if (!isAWTAvailable()) return;
if (System.getProperty("java.version").startsWith("1.4")) {
runSwingScript("test.gbc14");
JellyContext context = getJellyContext();
JFrame frame = (JFrame) context.getVariable("frame");
JButton button = (JButton) componentByName(frame.getContentPane(), "button");
GridBagLayout layout = (GridBagLayout) frame.getContentPane().getLayout();
GridBagConstraints constraints = layout.getConstraints(button);
//note that 21 is the JDK 1.4 value of GridBagConstraint.LINE_START
assertEquals(21,constraints.anchor);
}
}
public void testGridBagFail(){
if (!isAWTAvailable()) return;
try {
runSwingScript("test.gbcBad");
} catch (Exception e) {
//success
return;
}
fail("Should have thrown an exception for a bad GBC anchor");
}
public void testButtonGroup() throws Exception {
if (!isAWTAvailable()) return;
runSwingScript("test.buttonGroup");
JellyContext context = getJellyContext();
ButtonGroup bg = (ButtonGroup) context.getVariable("bg");
assertEquals(3, bg.getButtonCount());
assertNotNull(bg.getSelection());
}
public void testInvalidBeanProperty() throws Exception {
if (!isAWTAvailable()) return;
try {
runSwingScript("test.invalidProperty");
} catch (Exception e) {
//success
return;
}
fail("Should have thrown an exception due to an invalid bean property.");
}
protected void runSwingScript(String testName) throws Exception {
setUpScript("swingTags.jelly");
Script script = getJelly().compileScript();
getJellyContext().getVariables().clear();
getJellyContext().setVariable(testName,Boolean.TRUE);
script.run(getJellyContext(),getXMLOutput());
}
/** Searches a container for a component with a given name. Searches only
* the immediate container, not child containers.
* @param container the Container to search in
* @param name the name to look for
* @return the first component with the given name
* @throws Exception if the name isn't found
*/
protected static Component componentByName(Container container, String name) throws Exception{
Component[] components = container.getComponents();
for (int i=0;i<components.length;i++) {
Component component = components[i];
if (component.getName().equals(name)) {
return component;
}
}
throw new Exception("Component " + name + " not found in container " + container);
}
/**
* @return true if we are running with AWT present
*/
private boolean isAWTAvailable() {
return !Boolean.getBoolean("java.awt.headless");
}
/* (non-Javadoc)
* @see org.apache.commons.jelly.core.BaseJellyTest#getXMLOutput()
*/
protected XMLOutput getXMLOutput() {
try {
return XMLOutput.createXMLOutput(System.out);
} catch (UnsupportedEncodingException e) {
return null;
}
}
}