/******************************************************************************* * Copyright (c) 2007, 2015 Innoopract Informationssysteme GmbH 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: * Innoopract Informationssysteme GmbH - initial API and implementation * EclipseSource - ongoing development ******************************************************************************/ package org.eclipse.rap.rwt.internal.theme; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.Arrays; import java.util.List; import org.eclipse.rap.rwt.RWT; import org.eclipse.rap.rwt.internal.theme.css.StyleRule; import org.eclipse.rap.rwt.internal.theme.css.StyleSheet; import org.eclipse.rap.rwt.testfixture.internal.Fixture; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Widget; import org.junit.After; import org.junit.Before; import org.junit.Test; public class ThemeManager_Test { private ThemeManager manager; @Before public void setUp() { manager = new ThemeManager(); Fixture.setUp(); } @After public void tearDown() { Fixture.tearDown(); } @Test public void testDefaultThemeableWidgetsBeforeActivation() { ThemeableWidget[] allThemeableWidgets = manager.getAllThemeableWidgets(); assertTrue( allThemeableWidgets.length > 1 ); assertEquals( Widget.class.getName(), allThemeableWidgets[ 0 ].className ); } @Test public void testFallbackThemeBeforeActivation() { Theme fallbackTheme = manager.getTheme( ThemeManager.FALLBACK_THEME_ID ); assertNotNull( fallbackTheme ); assertEquals( "RAP Fallback Theme", fallbackTheme.getName() ); } @Test public void testRegisterTheme() { StyleSheet emptyStyleSheet = new StyleSheet( new StyleRule[ 0 ] ); Theme customTheme = new Theme( "custom.id", "foo", emptyStyleSheet ); manager.registerTheme( customTheme ); manager.activate(); assertTrue( manager.hasTheme( "custom.id" ) ); List regThemeIds = Arrays.asList( manager.getRegisteredThemeIds() ); assertTrue( regThemeIds.contains( "custom.id" ) ); assertSame( customTheme, manager.getTheme( "custom.id" ) ); } @Test public void testRegisterThemeTwice() { StyleSheet emptyStyleSheet = new StyleSheet( new StyleRule[ 0 ] ); Theme theme = new Theme( "id1", "foo", emptyStyleSheet ); manager.registerTheme( theme ); try { manager.registerTheme( theme ); fail(); } catch( IllegalArgumentException expected ) { } } @Test public void testGetThemeableWidget() { manager.activate(); ThemeableWidget themeableWidget = manager.getThemeableWidget( Button.class ); assertNotNull( themeableWidget ); assertNotNull( themeableWidget.loader ); assertEquals( Button.class.getName(), themeableWidget.className ); assertNotNull( themeableWidget.elements ); assertTrue( themeableWidget.elements.length > 0 ); } @Test public void testDefaultThemeInitialized() { manager.initialize(); manager.activate(); Theme defaultTheme = manager.getTheme( RWT.DEFAULT_THEME_ID ); assertNotNull( defaultTheme.getValuesMap() ); assertTrue( defaultTheme.getValuesMap().getAllValues().length > 0 ); } @Test public void testCustomAndDefaultThemeInitialized() throws Exception { StyleSheet styleSheet = ThemeTestUtil.getStyleSheet( "TestExample.css" ); Theme customTheme = new Theme( "custom.id", "Custom Theme", styleSheet ); manager.registerTheme( customTheme ); manager.initialize(); manager.activate(); Theme defaultTheme = manager.getTheme( RWT.DEFAULT_THEME_ID ); assertNotNull( defaultTheme.getValuesMap() ); assertTrue( defaultTheme.getValuesMap().getAllValues().length > 0 ); assertNotNull( customTheme.getValuesMap() ); assertTrue( customTheme.getValuesMap().getAllValues().length > 0 ); } @Test public void testActivateAndDeactivate() { int beforeActivate = getFallbackTheme().getStyleSheet().getStyleRules().length; manager.activate(); int afterActivate = getFallbackTheme().getValuesMap().getAllValues().length; manager.deactivate(); int afterDeactivate = getFallbackTheme().getStyleSheet().getStyleRules().length; assertEquals( 0, beforeActivate ); assertTrue( 0 < afterActivate ); assertEquals( 0, afterDeactivate ); } @Test public void testGetAppearances() { manager.activate(); List<String> appearances = manager.getAppearances(); String joinedAppearances = join( appearances ); assertTrue( joinedAppearances.contains( "\"tree-row\" : {" ) ); assertTrue( joinedAppearances.contains( "\"sash-handle\" : {" ) ); } private Theme getFallbackTheme() { return manager.getTheme( ThemeManager.FALLBACK_THEME_ID ); } private static String join( List<String> appearances ) { StringBuilder buffer = new StringBuilder(); for( String string : appearances ) { buffer.append( string ); } return buffer.toString(); } }