/******************************************************************************* * Copyright (c) 2008, 2014 IBM Corporation and others. All rights reserved. This * program and the accompanying materials are made available under the terms of * the Eclipse Public License v1.0 which accompanies this distribution, and is * available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation * Thibault Le Ouay <thibaultleouay@gmail.com> - Bug 443094 *******************************************************************************/ package org.eclipse.e4.ui.tests.css.swt; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotSame; import java.util.HashSet; import org.eclipse.e4.ui.css.swt.dom.WidgetElement; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.junit.Test; public class ShellTest extends CSSSWTTestCase { static final RGB RED = new RGB(255, 0, 0); static final RGB GREEN = new RGB(0, 255, 0); static final RGB BLUE = new RGB(0, 0, 255); protected Shell createTestShell(String styleSheet) { engine = createEngine(styleSheet, display); // Create widgets Shell shell = new Shell(display, SWT.SHELL_TRIM); FillLayout layout = new FillLayout(); shell.setLayout(layout); Composite panel = new Composite(shell, SWT.NONE); panel.setLayout(new FillLayout()); // Apply styles engine.applyStyles(shell, true); shell.pack(); return shell; } @Test public void testColor() { Shell shellToTest = createTestShell("Shell { background-color: #FF0000; color: #0000FF }"); assertEquals(RED, shellToTest.getBackground().getRGB()); assertEquals(BLUE, shellToTest.getForeground().getRGB()); } @Test public void testFontRegular() { Shell shellToTest = createTestShell("Shell { font: Verdana 16px }"); assertEquals(1, shellToTest.getFont().getFontData().length); FontData fontData = shellToTest.getFont().getFontData()[0]; assertEquals("Verdana", fontData.getName()); assertEquals(16, fontData.getHeight()); assertEquals(SWT.NORMAL, fontData.getStyle()); } @Test public void testFontBold() { Shell shellToTest = createTestShell("Shell { font: Arial 12px; font-weight: bold }"); assertEquals(1, shellToTest.getFont().getFontData().length); FontData fontData = shellToTest.getFont().getFontData()[0]; assertEquals("Arial", fontData.getName()); assertEquals(12, fontData.getHeight()); assertEquals(SWT.BOLD, fontData.getStyle()); } @Test public void testFontItalic() { Shell shellToTest = createTestShell("Shell { font-style: italic }"); assertEquals(1, shellToTest.getFont().getFontData().length); FontData fontData = shellToTest.getFont().getFontData()[0]; assertEquals(SWT.ITALIC, fontData.getStyle()); } // bug 375069: ensure children aren't caught up in parent @Test public void test375069ChildShellDifferentiation() { engine = createEngine("Shell.parent { font-style: italic; }", display); Shell parent = new Shell(display, SWT.NONE); WidgetElement.setCSSClass(parent, "parent"); Shell child = new Shell(parent, SWT.NONE); WidgetElement.setCSSClass(child, "child"); parent.open(); child.open(); engine.applyStyles(parent, true); engine.applyStyles(child, true); assertEquals(1, parent.getFont().getFontData().length); FontData fontData = parent.getFont().getFontData()[0]; assertEquals(SWT.ITALIC, fontData.getStyle()); assertEquals(1, child.getFont().getFontData().length); fontData = child.getFont().getFontData()[0]; assertNotSame(SWT.ITALIC, fontData.getStyle()); } // bug 375069: ensure children shells are still captured by Shell @Test public void test375069AllShell() { engine = createEngine("Shell { font-style: italic; }", display); Shell parent = new Shell(display, SWT.NONE); WidgetElement.setCSSClass(parent, "parent"); Shell child = new Shell(parent, SWT.NONE); WidgetElement.setCSSClass(child, "child"); parent.open(); child.open(); engine.applyStyles(parent, true); engine.applyStyles(child, true); assertEquals(1, parent.getFont().getFontData().length); FontData fontData = parent.getFont().getFontData()[0]; assertEquals(SWT.ITALIC, fontData.getStyle()); assertEquals(1, child.getFont().getFontData().length); fontData = child.getFont().getFontData()[0]; assertEquals(SWT.ITALIC, fontData.getStyle()); } // bug 375069: ensure children shells are still captured by Shell @Test public void testShellParentage() { engine = createEngine( "Shell[parentage='parent'] { font-style: italic; }", display); Shell parent = new Shell(display, SWT.NONE); WidgetElement.setID(parent, "parent"); Shell child = new Shell(parent, SWT.NONE); WidgetElement.setID(child, "child"); parent.open(); child.open(); engine.applyStyles(parent, true); engine.applyStyles(child, true); assertEquals(1, parent.getFont().getFontData().length); FontData fontData = parent.getFont().getFontData()[0]; assertNotSame(SWT.ITALIC, fontData.getStyle()); assertEquals(1, child.getFont().getFontData().length); fontData = child.getFont().getFontData()[0]; assertEquals(SWT.ITALIC, fontData.getStyle()); } @Test public void testShellUnparentedPseudoelement() { engine = createEngine( "Shell:swt-unparented { font-style: italic; }", display); Shell parent = new Shell(display, SWT.NONE); WidgetElement.setCSSClass(parent, "parent"); Shell child = new Shell(parent, SWT.NONE); WidgetElement.setCSSClass(child, "child"); parent.open(); child.open(); engine.applyStyles(parent, true); engine.applyStyles(child, true); assertEquals(1, parent.getFont().getFontData().length); FontData fontData = parent.getFont().getFontData()[0]; assertEquals(SWT.ITALIC, fontData.getStyle()); assertEquals(1, child.getFont().getFontData().length); fontData = child.getFont().getFontData()[0]; assertNotSame(SWT.ITALIC, fontData.getStyle()); } @Test public void testShellParentedPseudoelement() { engine = createEngine( "Shell:swt-parented { font-style: italic; }", display); Shell parent = new Shell(display, SWT.NONE); WidgetElement.setCSSClass(parent, "parent"); Shell child = new Shell(parent, SWT.NONE); WidgetElement.setCSSClass(child, "child"); parent.open(); child.open(); engine.applyStyles(parent, true); engine.applyStyles(child, true); assertEquals(1, parent.getFont().getFontData().length); FontData fontData = parent.getFont().getFontData()[0]; assertNotSame(SWT.ITALIC, fontData.getStyle()); assertEquals(1, child.getFont().getFontData().length); fontData = child.getFont().getFontData()[0]; assertEquals(SWT.ITALIC, fontData.getStyle()); } @Test public void testSwtDataClassAttribute() { engine = createEngine( "Shell[swt-data-class ~= 'java.util.HashSet'] { font-style: italic; }", display); Shell parent = new Shell(display, SWT.NONE); parent.setData(new HashSet<Object>()); parent.open(); engine.applyStyles(parent, true); assertEquals(1, parent.getFont().getFontData().length); FontData fontData = parent.getFont().getFontData()[0]; assertEquals(SWT.ITALIC, fontData.getStyle()); } @Test public void testBackgroundMode() { Shell shellToTest = createTestShell("Shell { swt-background-mode: force; }"); assertEquals(SWT.INHERIT_FORCE, shellToTest.getBackgroundMode()); } }