Package com.eclipsesource.tabris.internal.ui

Source Code of com.eclipsesource.tabris.internal.ui.RemotePageTest

/*******************************************************************************
* 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.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.eclipse.rap.json.JsonArray;
import org.eclipse.rap.rwt.internal.lifecycle.WidgetUtil;
import org.eclipse.rap.rwt.remote.RemoteObject;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.mockito.ArgumentCaptor;

import com.eclipsesource.tabris.internal.ui.rendering.ActionRenderer;
import com.eclipsesource.tabris.internal.ui.rendering.UIRenderer;
import com.eclipsesource.tabris.test.util.TabrisEnvironment;
import com.eclipsesource.tabris.ui.Page;
import com.eclipsesource.tabris.ui.PageData;
import com.eclipsesource.tabris.ui.PageStyle;
import com.eclipsesource.tabris.ui.UI;


@SuppressWarnings("restriction")
public class RemotePageTest {

  @Rule
  public TabrisEnvironment environment = new TabrisEnvironment();

  private RemoteObject remoteObject;
  private PageDescriptor descriptor;
  private UI ui;
  private RemoteUI uiRenderer;
  private Shell shell;

  @Before
  public void setUp() {
    shell = new Shell( new Display() );
    remoteObject = environment.getRemoteObject();
    ui = mock( UI.class );
    uiRenderer = mock( RemoteUI.class );
    when( uiRenderer.getRemoteUIId() ).thenReturn( "foo" );
    mockDescriptor();
  }

  @Test
  public void testIsSerializable() {
    assertTrue( Serializable.class.isAssignableFrom( RemotePage.class ) );
  }

  private void mockDescriptor() {
    descriptor = mock( PageDescriptor.class );
    when( descriptor.getId() ).thenReturn( "foo" );
    when( descriptor.getTitle() ).thenReturn( "bar" );
    doReturn( Boolean.TRUE ).when( descriptor ).isTopLevel();
    when( descriptor.getPageStyle() ).thenReturn( new PageStyle[] { PageStyle.DEFAULT } );
    List<ActionDescriptor> actions = new ArrayList<ActionDescriptor>();
    actions.add( new ActionDescriptor( "actionFoo", new TestAction() ) );
    when( descriptor.getActions() ).thenReturn( actions );
    when( descriptor.getImage() ).thenReturn( UITestUtil.getImageBytes() );
    doReturn( TestPage.class ).when( descriptor ).getPageType();
  }

  @Test
  public void testGetRemoteId() {
    RemotePage page = new RemotePage( ui, uiRenderer, descriptor, mock( PageData.class ) );

    assertEquals( remoteObject.getId(), page.getId() );
  }

  @Test
  public void testSetsDefaultAttributes() {
    when( uiRenderer.getRemoteUIId() ).thenReturn( "foo1" );
    RemotePage remotePage = new RemotePage( ui, uiRenderer, descriptor, mock( PageData.class ) );
    remotePage.createControl( shell );

    verify( remoteObject ).set( "parent", "foo1" );
    verify( remoteObject ).set( "title", "bar" );
    verify( remoteObject ).set( "control", WidgetUtil.getId( remotePage.getControl() ) );
    verify( remoteObject ).set( "style", new JsonArray().add( "DEFAULT" ) );
    verify( remoteObject ).set( "topLevel", true );
    ArgumentCaptor<JsonArray> captor = ArgumentCaptor.forClass( JsonArray.class );
    verify( remoteObject ).set( eq( "image" ), captor.capture() );
    assertTrue( captor.getValue().get( 0 ).isString() );
    assertEquals( 49, captor.getValue().get( 1 ).asInt() );
    assertEquals( 43, captor.getValue().get( 2 ).asInt() );
  }

  @Test
  public void testSetsFullScreenStyle() {
    PageDescriptor localDescriptor = new PageDescriptor( "foo", TestPage.class );
    localDescriptor.setPageStyle( PageStyle.FULLSCREEN );

    RemotePage remotePage = new RemotePage( ui, uiRenderer, localDescriptor, mock( PageData.class ) );
    remotePage.createControl( shell );

    verify( remoteObject ).set( "style", new JsonArray().add( "FULLSCREEN" ) );
  }

  @Test
  public void testSetsNoEmptyScreenStyle() {
    PageDescriptor localDescriptor = new PageDescriptor( "foo", TestPage.class );

    new RemotePage( ui, uiRenderer, localDescriptor, mock( PageData.class ) );

    verify( remoteObject, never() ).set( eq( "style" ), any( JsonArray.class ) );
  }

  @Test
  public void testGetActionRenderers() {
    RemotePage page = new RemotePage( ui, uiRenderer, descriptor, mock( PageData.class ) );
    ActionRenderer renderer = mock( ActionRenderer.class );
    RemoteRendererFactory factory = mock( RemoteRendererFactory.class );
    when( factory.createActionRenderer( any( UI.class ), any( UIRenderer.class ), any( ActionDescriptor.class ) ) )
    .thenReturn( renderer );

    page.createActions( factory, shell );

    verify( renderer ).createUi( shell );
  }

  @Test
  public void testCreateActionsCallsActionCreateUi() {
    RemotePage page = new RemotePage( ui, uiRenderer, descriptor, mock( PageData.class ) );
    page.createActions( RemoteRendererFactory.getInstance(), shell );

    List<ActionRenderer> actions = page.getActionRenderers();

    assertEquals( 1, actions.size() );
    assertEquals( "actionFoo", actions.get( 0 ).getDescriptor().getId() );
  }

  @Test
  public void testUpdateCreatesNewActionsCallsActionCreateUi() {
    List<ActionDescriptor> actions = new ArrayList<ActionDescriptor>();
    actions.add( new ActionDescriptor( "actionFoo", new TestAction() ) );
    when( descriptor.getActions() ).thenReturn( actions );
    RemotePage page = new RemotePage( ui, uiRenderer, descriptor, mock( PageData.class ) );
    page.createActions( RemoteRendererFactory.getInstance(), shell );
    actions.add( new ActionDescriptor( "actionFoo2", new TestAction() ) );

    page.update( descriptor, RemoteRendererFactory.getInstance(), shell );

    List<ActionRenderer> renderers = page.getActionRenderers();
    assertEquals( 2, renderers.size() );
    assertEquals( "actionFoo2", renderers.get( 1 ).getDescriptor().getId() );
  }

  @Test
  public void testUpdateDestroysOldActionsIfDeleted() {
    List<ActionDescriptor> actions = new ArrayList<ActionDescriptor>();
    actions.add( new ActionDescriptor( "actionFoo", new TestAction() ) );
    actions.add( new ActionDescriptor( "actionFoo2", new TestAction() ) );
    when( descriptor.getActions() ).thenReturn( actions );
    RemotePage page = new RemotePage( ui, uiRenderer, descriptor, mock( PageData.class ) );
    page.createActions( RemoteRendererFactory.getInstance(), shell );
    descriptor.getActions().remove( 1 );

    page.update( descriptor, RemoteRendererFactory.getInstance(), shell );

    List<ActionRenderer> renderers = page.getActionRenderers();
    assertEquals( 1, renderers.size() );
    assertEquals( "actionFoo", renderers.get( 0 ).getDescriptor().getId() );
  }

  @Test
  public void testSetTitle() {
    RemotePage page = new RemotePage( ui, uiRenderer, descriptor, mock( PageData.class ) );

    page.setTitle( "foo" );

    verify( remoteObject ).set( "title", "bar" );
  }

  @Test
  public void testGetData() {
    PageData data = mock( PageData.class );
    RemotePage page = new RemotePage( ui, uiRenderer, descriptor, data );

    assertSame( data, page.getData() );
  }

  @Test
  public void testDestroyDoesNotDestroyActions() {
    RemotePage page = new RemotePage( ui, uiRenderer, descriptor, mock( PageData.class ) );
    page.createControl( shell );

    page.destroy();

    verify( remoteObject ).destroy();
  }

  @Test
  public void testDestroyActionsSendsDestroy() {
    RemotePage remotePage = new RemotePage( ui, uiRenderer, descriptor, mock( PageData.class ) );
    remotePage.createControl( shell );

    remotePage.destroy();

    TestPage page = ( TestPage )remotePage.getPage();
    assertTrue( page.wasDestroyed() );
  }

  @Test
  public void testDestroyCallsDestroyOnPage() {
    RemotePage page = new RemotePage( ui, uiRenderer, descriptor, mock( PageData.class ) );
    page.createActions( RemoteRendererFactory.getInstance(), shell );

    page.destroyActions();

    verify( remoteObject ).destroy();
  }

  @Test
  public void testGetDescriptor() {
    RemotePage page = new RemotePage( ui, uiRenderer, descriptor, mock( PageData.class ) );

    assertSame( descriptor, page.getDescriptor() );
  }

  @Test
  public void testGetCreatesControl() {
    RemotePage page = new RemotePage( ui, uiRenderer, descriptor, mock( PageData.class ) );
    page.createControl( shell );

    assertNotNull( page.getControl() );
  }

  @Test
  public void testDestoyDisposesControl() {
    RemotePage page = new RemotePage( ui, uiRenderer, descriptor, mock( PageData.class ) );
    page.createControl( shell );

    page.destroy();

    assertTrue( page.getControl().isDisposed() );
  }

  @Test
  public void testCreatesPage() {
    RemotePage remotePage = new RemotePage( ui, uiRenderer, descriptor, mock( PageData.class ) );

    Page page = remotePage.getPage();

    assertNotNull( page );
    assertTrue( page instanceof TestPage );
  }
}
TOP

Related Classes of com.eclipsesource.tabris.internal.ui.RemotePageTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.