/******************************************************************************* * Copyright (c) 2014 Stefan Winkler 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: * Stefan Winkler <stefan@winklerweb.net> - initial contribution * Thibault Le Ouay <thibaultleouay@gmail.com> - Bug 443094 *******************************************************************************/ package org.eclipse.e4.ui.tests.css.swt; import static org.junit.Assert.assertEquals; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.ToolBar; import org.junit.Test; public class Bug419482Test extends CSSSWTTestCase { private static final RGB RGB_BLUE = new RGB(0, 0, 255); private static final RGB RGB_RED = new RGB(255, 0, 0); private ToolBar toolbar1; private ToolBar toolbar2; private ToolBar toolbar3; @Test public void testTwoLevelsWildcard() { String cssString = "Shell > * > * { color: red; } \n" + "Label { color: blue; }"; Label label = createTestLabel(cssString); RGB rgb = label.getForeground().getRGB(); assertEquals(RGB_BLUE, rgb); } @Test public void testOneLevelWildcardOneSpecific() { String cssString = "Shell > * > Label { color: red; } \n" + "Label { color: blue; }"; Label label = createTestLabel(cssString); RGB rgb = label.getForeground().getRGB(); assertEquals(RGB_RED, rgb); } @Test public void testDescendentsWildcard() { String cssString = "Shell * { color: red; } \n" + "Label { color: blue; }"; Label label = createTestLabel(cssString); RGB rgb = label.getForeground().getRGB(); assertEquals(RGB_BLUE, rgb); } @Test public void testDescendentsSpecific() { String cssString = "Shell Label { color: red; } \n" + "Label { color: blue; }"; Label label = createTestLabel(cssString); RGB rgb = label.getForeground().getRGB(); assertEquals(RGB_RED, rgb); } @Test public void testOriginalBugReport() { String css = "Shell, Shell > *, Shell > * > * {\n" + " background-color: red;\n" + "}\n" + "ToolBar {\n" + " background-color: blue;\n" + "}"; engine = createEngine(css, display); Shell shell = createShellWithToolbars(display); // Apply styles engine.applyStyles(shell, true); assertEquals(RGB_BLUE, toolbar1.getBackground().getRGB()); assertEquals(RGB_BLUE, toolbar2.getBackground().getRGB()); assertEquals(RGB_BLUE, toolbar3.getBackground().getRGB()); } @Test public void testOriginalBugReportDifferentOrder() { String css = "ToolBar {\n" + " background-color: blue;\n" + "}" + "Shell, Shell > *, Shell > * > * {\n" + " background-color: red;\n" + "}\n"; engine = createEngine(css, display); // Create widgets Shell shell = createShellWithToolbars(display); // Apply styles engine.applyStyles(shell, true); assertEquals(RGB_RED, toolbar1.getBackground().getRGB()); assertEquals(RGB_RED, toolbar2.getBackground().getRGB()); assertEquals(RGB_BLUE, toolbar3.getBackground().getRGB()); } private Shell createShellWithToolbars(Display display) { Shell shell = new Shell(display, SWT.SHELL_TRIM); shell.setLayout(new RowLayout(SWT.VERTICAL)); toolbar1 = new ToolBar(shell, SWT.BORDER); Composite composite1 = new Composite(shell, SWT.NONE); composite1.setLayout(new RowLayout(SWT.VERTICAL)); toolbar2 = new ToolBar(composite1, SWT.BORDER); Composite composite2 = new Composite(composite1, SWT.NONE); composite2.setLayout(new RowLayout(SWT.VERTICAL)); toolbar3 = new ToolBar(composite2, SWT.BORDER); return shell; } }