package org.jdesktop.swingx.plaf;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.awt.Color;
import java.awt.Font;
import java.awt.Insets;
import java.awt.Rectangle;
import java.util.Arrays;
import javax.swing.BorderFactory;
import javax.swing.text.JTextComponent;
import org.jdesktop.swingx.prompt.PromptSupport;
import org.jdesktop.swingx.util.JVM;
import org.junit.Before;
import org.junit.Test;
public abstract class PromptTextUITest_Base {
protected JTextComponent textComponent;
protected PromptTextUI ui;
@Before
public void setUI() {
setup();
TextUIWrapper.getDefaultWrapper().install(textComponent, true);
ui = (PromptTextUI) textComponent.getUI();
}
public abstract void setup();
@Test
public void testGetBaseLine() {
int baseline = ui.getBaseline(textComponent, textComponent.getWidth(), textComponent.getHeight());
if(JVM.current().isOrLater(JVM.JDK1_6)){
assertNotSame(-2, baseline);
}else{
assertSame(-2, baseline);
}
}
@Test
public void testInstallUI() {
textComponent.setUI(ui);
//ui should already be installed.
assertTrue(Arrays.asList(textComponent.getFocusListeners()).contains(PromptTextUI.focusHandler));
}
@Test
public void testUninstallUI() {
ui.uninstallUI(textComponent);
assertFalse(Arrays.asList(textComponent.getFocusListeners()).contains(PromptTextUI.focusHandler));
}
@Test
public void testShouldPaintLabel() {
assertTrue(ui.shouldPaintPrompt(textComponent));
textComponent.setText("");
assertTrue(ui.shouldPaintPrompt(textComponent));
textComponent.setText("test");
assertFalse(ui.shouldPaintPrompt(textComponent));
}
@Test
public void testCreateLabelComponent() {
assertNotNull(ui.createPromptComponent());
}
@Test
public void testGetLabelComponent() {
PromptSupport.setPrompt("test", textComponent);
PromptSupport.setForeground(Color.BLACK, textComponent);
PromptSupport.setBackground(Color.RED, textComponent);
textComponent.setBorder(BorderFactory.createBevelBorder(1));
textComponent.setEnabled(false);
textComponent.setEditable(false);
textComponent.setOpaque(false);
textComponent.setBounds(new Rectangle(1,1));
textComponent.setBackground(Color.BLACK);
textComponent.setFont(textComponent.getFont().deriveFont(Font.ITALIC, 20));
textComponent.setSelectedTextColor(Color.BLACK);
textComponent.setSelectionColor(Color.BLACK);
textComponent.setMargin(new Insets(1,1,1,1));
JTextComponent lbl = ui.getPromptComponent(textComponent);
assertEquals(PromptSupport.getPrompt(textComponent), lbl.getText());
assertEquals(PromptSupport.getForeground(textComponent), lbl.getForeground());
assertEquals(PromptSupport.getBackground(textComponent), lbl.getBackground());
assertEquals(textComponent.getBorder().getBorderInsets(textComponent),
lbl.getBorder().getBorderInsets(lbl));
assertEquals(textComponent.isEnabled(), lbl.isEnabled());
assertEquals(textComponent.isEditable(), lbl.isEditable());
assertEquals(textComponent.isOpaque(), lbl.isOpaque());
assertEquals(textComponent.getBounds(), lbl.getBounds());
assertEquals(textComponent.getFont(), lbl.getFont());
assertEquals(textComponent.getSelectedTextColor(), lbl.getSelectedTextColor());
assertEquals(textComponent.getSelectionColor(), lbl.getSelectionColor());
assertEquals(textComponent.getMargin(), lbl.getMargin());
PromptSupport.setFontStyle(Font.BOLD, textComponent);
lbl = ui.getPromptComponent(textComponent);
assertEquals(textComponent.getFont().deriveFont(Font.BOLD), lbl.getFont());
}
@Test
public void testGetPreferredSize() {
textComponent.setText("label text");
PromptSupport.setPrompt("label text", textComponent);
assertEquals(textComponent.getPreferredSize(), ui.getPromptComponent(textComponent).getPreferredSize());
textComponent.setText("text");
assertFalse(textComponent.getPreferredSize().equals(ui.getPromptComponent(textComponent).getPreferredSize()));
}
@Test
public void testPromptSupportStaysInstalledOnUIChange() {
assertTrue(textComponent.getUI() instanceof PromptTextUI);
textComponent.updateUI();
assertTrue(textComponent.getUI() instanceof PromptTextUI);
}
}