/******************************************************************************* * Copyright (c) 2013 EclipseSource 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: * EclipseSource - initial API and implementation ******************************************************************************/ package com.eclipsesource.tabris.internal.ui; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import java.io.Serializable; import java.util.List; import org.eclipse.rap.rwt.client.WebClient; import org.junit.Rule; import org.junit.Test; import com.eclipsesource.tabris.TabrisClient; import com.eclipsesource.tabris.internal.ui.web.WebRendererFactory; import com.eclipsesource.tabris.test.util.TabrisEnvironment; import com.eclipsesource.tabris.ui.ActionListener; import com.eclipsesource.tabris.ui.TransitionListener; public class UIDescriptorTest { @Rule public TabrisEnvironment environment = new TabrisEnvironment(); @Test public void testIsSerializable() { assertTrue( Serializable.class.isAssignableFrom( UIDescriptor.class ) ); } @Test( expected = IllegalStateException.class ) public void testFailsAddingPageDescriptorTwice() { UIDescriptor uiDescriptor = new UIDescriptor(); PageDescriptor descriptor = createDescriptor( "foo" ); uiDescriptor.add( descriptor ); uiDescriptor.add( descriptor ); } @Test public void testAddsPageDescriptor() { UIDescriptor uiDescriptor = new UIDescriptor(); PageDescriptor descriptor = createDescriptor( "foo" ); uiDescriptor.add( descriptor ); assertSame( descriptor, uiDescriptor.getPageDescriptor( "foo" ) ); } @Test public void testRemovesPageDescriptor() { UIDescriptor uiDescriptor = new UIDescriptor(); PageDescriptor descriptor = createDescriptor( "foo" ); uiDescriptor.add( descriptor ); uiDescriptor.removePageDescriptor( "foo" ); assertNull( uiDescriptor.getPageDescriptor( "foo" ) ); } private PageDescriptor createDescriptor( String id ) { return new PageDescriptor( id, TestPage.class ); } @Test public void testAddsAction() { UIDescriptor uiDescriptor = new UIDescriptor(); ActionDescriptor descriptor = new ActionDescriptor( "foo", new TestAction() ); uiDescriptor.add( descriptor ); assertSame( descriptor, uiDescriptor.getActionDescriptor( "foo" ) ); } @Test public void testRemovesAction() { UIDescriptor uiDescriptor = new UIDescriptor(); ActionDescriptor descriptor = new ActionDescriptor( "foo", new TestAction()); uiDescriptor.add( descriptor ); uiDescriptor.removeAction( "foo" ); assertNull( uiDescriptor.getActionDescriptor( "foo" ) ); } @Test public void testAddsTransistionListener() { UIDescriptor uiDescriptor = new UIDescriptor(); TransitionListener listener = mock( TransitionListener.class ); uiDescriptor.addTransitionListener( listener ); List<TransitionListener> transitionListeners = uiDescriptor.getTransitionListeners(); assertTrue( transitionListeners.contains( listener ) ); } @Test public void testRemovesTransistionListener() { UIDescriptor uiDescriptor = new UIDescriptor(); TransitionListener listener = mock( TransitionListener.class ); uiDescriptor.addTransitionListener( listener ); uiDescriptor.removeTransitionListener( listener ); List<TransitionListener> transitionListeners = uiDescriptor.getTransitionListeners(); assertFalse( transitionListeners.contains( listener ) ); } @Test public void testAddsActionListener() { UIDescriptor uiDescriptor = new UIDescriptor(); ActionListener listener = mock( ActionListener.class ); uiDescriptor.addActionListener( listener ); List<ActionListener> actionListeners = uiDescriptor.getActionListeners(); assertTrue( actionListeners.contains( listener ) ); } @Test public void testRemovesActionListener() { UIDescriptor uiDescriptor = new UIDescriptor(); ActionListener listener = mock( ActionListener.class ); uiDescriptor.addActionListener( listener ); uiDescriptor.removeActionListener( listener ); List<ActionListener> actionListeners = uiDescriptor.getActionListeners(); assertFalse( actionListeners.contains( listener ) ); } @Test public void testGetGlobalActions() { UIDescriptor uiDescriptor = new UIDescriptor(); ActionDescriptor descriptor = new ActionDescriptor( "foo", new TestAction() ); uiDescriptor.add( descriptor ); List<ActionDescriptor> actions = uiDescriptor.getGlobalActions(); assertEquals( 1, actions.size() ); assertSame( descriptor, actions.get( 0 ) ); } @Test( expected = IllegalStateException.class ) public void testAddsActionTwiceFails() { UIDescriptor uiDescriptor = new UIDescriptor(); ActionDescriptor descriptor = new ActionDescriptor( "foo", new TestAction() ); uiDescriptor.add( descriptor ); uiDescriptor.add( descriptor ); } @Test public void testGetRootPagesReturnsOnlyRootPages() { UIDescriptor uiDescriptor = new UIDescriptor(); PageDescriptor descriptor1 = createDescriptor( "foo1", true ); PageDescriptor descriptor2 = createDescriptor( "foo2", false ); PageDescriptor descriptor3 = createDescriptor( "foo3", true ); uiDescriptor.add( descriptor1 ); uiDescriptor.add( descriptor2 ); uiDescriptor.add( descriptor3 ); List<PageDescriptor> rootPages = uiDescriptor.getRootPages(); assertEquals( 2, rootPages.size() ); assertSame( descriptor1, rootPages.get( 0 ) ); assertSame( descriptor3, rootPages.get( 1 ) ); } @Test public void testGetRendererFactory_tabris() { environment.setClient( mock( TabrisClient.class ) ); UIDescriptor uiDescriptor = new UIDescriptor(); assertTrue( uiDescriptor.getRendererFactory() instanceof RemoteRendererFactory ); } @Test public void testGetRendererFactory_web() { environment.setClient( mock( WebClient.class ) ); UIDescriptor uiDescriptor = new UIDescriptor(); assertTrue( uiDescriptor.getRendererFactory() instanceof WebRendererFactory ); } private PageDescriptor createDescriptor( String id, boolean isRoot ) { return new PageDescriptor( id, TestPage.class ).setTopLevel( isRoot ); } }