/*******************************************************************************
* 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.ui;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.Serializable;
import org.junit.Test;
import com.eclipsesource.tabris.internal.ui.PropertyChangeNotifier;
public class AbstractActionTest {
@Test
public void testIsSerializable() {
assertTrue( Serializable.class.isAssignableFrom( AbstractAction.class ) );
}
@Test
public void testRemembersUI() {
UI ui = mock( UI.class );
TestAbstractAction action = new TestAbstractAction();
action.execute( ui );
assertSame( ui, action.getUI() );
}
@Test
public void testUsesUIConfigurationOfUI() {
UI ui = mock( UI.class );
UIConfiguration config = mock( UIConfiguration.class );
when( ui.getConfiguration() ).thenReturn( config );
TestAbstractAction action = new TestAbstractAction();
action.execute( ui );
UIConfiguration actualConfiguration = action.getUIConfiguration();
assertSame( config, actualConfiguration );
}
@Test
public void testDelegatesExecuteCall() {
UI ui = mock( UI.class );
TestAbstractAction action = spy( new TestAbstractAction() );
action.execute( ui );
verify( action ).execute();
}
@Test
public void testSetsTitle() {
UI ui = mock( UI.class );
PageData data = new PageData();
PageOperator operator = mock( PageOperator.class );
Page page = mock( Page.class );
when( operator.getCurrentPage() ).thenReturn( page );
when( operator.getCurrentPageData() ).thenReturn( data );
when( ui.getPageOperator() ).thenReturn( operator );
TestAbstractAction action = spy( new TestAbstractAction() );
action.execute( ui );
action.setPageTitle( "foo" );
verify( operator ).setCurrentPageTitle( "foo" );
}
@Test
public void testCanCloseCurrentPagePage() {
UI ui = mock( UI.class );
PageData data = new PageData();
PageOperator operator = mock( PageOperator.class );
when( operator.getCurrentPageData() ).thenReturn( data );
when( ui.getPageOperator() ).thenReturn( operator );
TestAbstractAction action = spy( new TestAbstractAction() );
action.execute( ui );
action.closeCurrentPage();
verify( operator ).closeCurrentPage();
}
@Test
public void testCanOpenNewPage() {
UI ui = mock( UI.class );
PageData data = new PageData();
PageOperator operator = mock( PageOperator.class );
when( operator.getCurrentPageData() ).thenReturn( data );
when( ui.getPageOperator() ).thenReturn( operator );
TestAbstractAction action = spy( new TestAbstractAction() );
action.execute( ui );
action.openPage( "foo" );
verify( operator ).openPage( "foo" );
}
@Test
public void testCanOpenNewPageWithData() {
UI ui = mock( UI.class );
PageData data = new PageData();
PageOperator operator = mock( PageOperator.class );
when( operator.getCurrentPageData() ).thenReturn( data );
when( ui.getPageOperator() ).thenReturn( operator );
TestAbstractAction action = spy( new TestAbstractAction() );
action.execute( ui );
action.openPage( "foo", data );
verify( operator ).openPage( "foo", data );
}
@Test
public void testCanHideAction() {
UI ui = mock( UI.class );
PageData data = new PageData();
PageOperator operator = mock( PageOperator.class );
ActionOperator actionOperator = mock( ActionOperator.class );
when( operator.getCurrentPageData() ).thenReturn( data );
when( ui.getPageOperator() ).thenReturn( operator );
when( ui.getActionOperator() ).thenReturn( actionOperator );
TestAbstractAction action = spy( new TestAbstractAction() );
action.execute( ui );
action.setActionVisible( "foo", false );
verify( actionOperator ).setActionVisible( "foo", false );
}
@Test
public void testCanDisableAction() {
UI ui = mock( UI.class );
PageData data = new PageData();
PageOperator operator = mock( PageOperator.class );
ActionOperator actionOperator = mock( ActionOperator.class );
when( operator.getCurrentPageData() ).thenReturn( data );
when( ui.getPageOperator() ).thenReturn( operator );
when( ui.getActionOperator() ).thenReturn( actionOperator );
TestAbstractAction action = spy( new TestAbstractAction() );
action.execute( ui );
action.setActionEnabled( "foo", false );
verify( actionOperator ).setActionEnabled( "foo", false );
}
@Test
public void testHasChangeNotifier() {
TestAbstractAction action = new TestAbstractAction();
PropertyChangeNotifier changeNotifier = action.getAdapter( PropertyChangeNotifier.class );
assertNotNull( changeNotifier );
}
@Test
public void testHasOneChangeNotifier() {
TestAbstractAction action = new TestAbstractAction();
PropertyChangeNotifier changeNotifier = action.getAdapter( PropertyChangeNotifier.class );
PropertyChangeNotifier changeNotifier2 = action.getAdapter( PropertyChangeNotifier.class );
assertSame( changeNotifier, changeNotifier2 );
}
private static class TestAbstractAction extends AbstractAction {
@Override
public void execute() {
// nothing to do here
}
}
}