Package com.eclipsesource.tabris.internal.ui

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

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

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

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.InOrder;

import com.eclipsesource.tabris.internal.ui.rendering.PageRenderer;
import com.eclipsesource.tabris.test.util.TabrisEnvironment;
import com.eclipsesource.tabris.ui.PageData;
import com.eclipsesource.tabris.ui.UI;


public class PageFlowTest {

  @Rule
  public TabrisEnvironment environment = new TabrisEnvironment();

  private Shell shell;

  @Before
  public void setUp() {
    Display display = new Display();
    shell = new Shell( display );
  }

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

  @Test( expected = IllegalArgumentException.class )
  public void testFailsWithNullRoot() {
    new PageFlow( null );
  }

  @Test
  public void testGetRootRenderer() {
    RemotePage rootPage = mock( RemotePage.class );
    PageFlow flow = new PageFlow( rootPage );

    assertSame( rootPage, flow.getRootRenderer() );
  }

  @Test
  public void testGetCurrentRenderer() {
    RemotePage rootPage = mock( RemotePage.class );
    PageFlow flow = new PageFlow( rootPage );
    RemotePage currentPage = mock( RemotePage.class );

    flow.add( currentPage );

    assertSame( currentPage, flow.getCurrentRenderer() );
  }

  @Test
  public void testGetPreviousRenderer() {
    RemotePage previousPage = mock( RemotePage.class );
    PageFlow flow = new PageFlow( previousPage );
    RemotePage currentPage = mock( RemotePage.class );

    flow.add( currentPage );

    assertSame( previousPage, flow.getPreviousRenderer() );
  }

  @Test
  public void testAddTwoRenderersSetsCurrentToLast() {
    PageFlow flow = new PageFlow( mock( RemotePage.class ) );
    RemotePage renderer1 = mock( RemotePage.class );
    RemotePage renderer2 = mock( RemotePage.class );

    flow.add( renderer1 );
    flow.add( renderer2 );

    assertSame( renderer2, flow.getCurrentRenderer() );
  }

  @Test
  public void testAddTwoRendererWithPopSetsCurrentToFirst() {
    PageFlow flow = new PageFlow( mock( RemotePage.class ) );
    RemotePage renderer1 = mock( RemotePage.class );
    RemotePage renderer2 = createPage();

    flow.add( renderer1 );
    flow.add( renderer2 );
    PageRenderer popedDescriptor = flow.pop();

    assertSame( renderer1, flow.getCurrentRenderer() );
    assertSame( renderer2, popedDescriptor );
  }

  @Test( expected = IllegalStateException.class )
  public void testPopFaislWithRootOnly() {
    PageFlow flow = new PageFlow( mock( RemotePage.class ) );

    flow.pop();
  }

  @Test
  public void testDestroyDisposesControls() {
    RemotePage root = mock( RemotePage.class );
    PageDescriptor descriptor = mock( PageDescriptor.class );
    doReturn( Boolean.TRUE ).when( descriptor ).isTopLevel();
    when( root.getDescriptor() ).thenReturn( descriptor );
    PageFlow flow = new PageFlow( root );
    RemotePage renderer1 = createPage();
    RemotePage renderer2 = createPage();
    flow.add( renderer1 );
    flow.add( renderer2 );

    flow.destroy();

    assertTrue( renderer1.getControl().isDisposed() );
    assertTrue( renderer2.getControl().isDisposed() );
  }

  @Test
  public void testDestroyDestroysPageRenderes() {
    RemotePage root = mock( RemotePage.class );
    PageDescriptor descriptor = mock( PageDescriptor.class );
    doReturn( Boolean.TRUE ).when( descriptor ).isTopLevel();
    when( root.getDescriptor() ).thenReturn( descriptor );
    PageFlow flow = new PageFlow( root );
    RemotePage renderer1 = createPage();
    RemotePage renderer2 = createPage();
    flow.add( renderer1 );
    flow.add( renderer2 );

    flow.destroy();

    InOrder order = inOrder( renderer1, renderer2 );
    order.verify( renderer1 ).destroy();
    order.verify( renderer2 ).destroy();
  }

  @Test
  public void testDestroyDoesNotDisposeRootControl() {
    RemotePage root = createPage();
    PageDescriptor descriptor = root.getDescriptor();
    doReturn( Boolean.TRUE ).when( descriptor ).isTopLevel();
    PageFlow flow = new PageFlow( root );

    flow.destroy();

    assertFalse( root.getControl().isDisposed() );
  }

  @Test
  public void testDestroyDoesNotDestroyRootPageRenderer() {
    RemotePage root = createPage();
    PageDescriptor descriptor = root.getDescriptor();
    doReturn( Boolean.TRUE ).when( descriptor ).isTopLevel();
    PageFlow flow = new PageFlow( root );

    flow.destroy();

    verify( root, never() ).destroy();
  }

  @Test
    public void testGetAllRenderers() {
      RemotePage root = mock( RemotePage.class );
      PageDescriptor descriptor = mock( PageDescriptor.class );
      doReturn( Boolean.TRUE ).when( descriptor ).isTopLevel();
      when( root.getDescriptor() ).thenReturn( descriptor );
      PageFlow flow = new PageFlow( root );
      RemotePage renderer1 = createPage();
      RemotePage renderer2 = createPage();
      flow.add( renderer1 );
      flow.add( renderer2 );

      List<PageRenderer> allPages = flow.getAllRenderers();

      assertEquals( 3, allPages.size() );
      assertSame( root, allPages.get( 0 ) );
      assertSame( renderer1, allPages.get( 1 ) );
      assertSame( renderer2, allPages.get( 2 ) );
    }

  private RemotePage createPage() {
    PageDescriptor descriptor = spy( new PageDescriptor( "foo", TestPage.class ) );
    UI ui = mock( UI.class );
    RemoteUI uiRenderer = mock( RemoteUI.class );
    when( uiRenderer.getRemoteUIId() ).thenReturn( "foo" );
    RemotePage renderer2 = new RemotePage( ui, uiRenderer , descriptor, mock( PageData.class ) );
    renderer2.createControl( shell );
    return spy( renderer2 );
  }
}
TOP

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

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.