/*******************************************************************************
* 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.web;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.InputStream;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.RowData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Shell;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import com.eclipsesource.tabris.internal.ui.ActionDescriptor;
import com.eclipsesource.tabris.internal.ui.ImageUtil;
import com.eclipsesource.tabris.internal.ui.RemoteActionTest;
import com.eclipsesource.tabris.internal.ui.TestAction;
import com.eclipsesource.tabris.test.util.TabrisEnvironment;
import com.eclipsesource.tabris.ui.ActionListener;
import com.eclipsesource.tabris.ui.UI;
import com.eclipsesource.tabris.ui.UIConfiguration;
public class WebActionTest {
@Rule
public TabrisEnvironment environment = new TabrisEnvironment();
private UI ui;
private WebUI webUI;
private ActionDescriptor actionDescriptor;
private WebAction webAction;
private Button control;
@Before
public void setUp() {
Shell shell = new Shell( new Display() );
ui = mock( UI.class );
actionDescriptor = mockDescriptor();
webUI = mock( WebUI.class );
webAction = new WebAction( ui, webUI, actionDescriptor );
webAction.createUi( shell );
control = webAction.getControl();
}
@Test
public void testGetUI() {
assertSame( ui, webAction.getUI() );
}
@Test
public void testGetDescriptor() {
assertSame( actionDescriptor, webAction.getDescriptor() );
}
@Test
public void testInitControl() {
assertFalse( control.isEnabled() );
assertFalse( control.isVisible() );
assertNotNull( control.getImage() );
assertEquals( "bar", control.getToolTipText() );
assertTrue( control.isListening( SWT.Selection ) );
}
@Test
public void testDestroy() {
webAction.destroy();
assertTrue( control.isDisposed() );
}
@Test
public void testSetVisible() {
webAction.setVisible( true );
assertTrue( control.getVisible() );
assertFalse( ( ( RowData )control.getLayoutData() ).exclude );
}
@Test
public void testSetVisible_makesInvisible() {
webAction.setVisible( false );
assertFalse( control.getVisible() );
assertTrue( ( ( RowData )control.getLayoutData() ).exclude );
}
@Test
public void testSetVisible_doesRelayout() {
webAction.setVisible( false );
verify( webUI ).layout();
}
@Test
public void testSetEnabled() {
webAction.setEnabled( true );
assertTrue( control.isEnabled() );
}
@Test
public void testSelectionEvent_executeAction() {
mockUI( mock( ActionListener.class ) );
control.notifyListeners( SWT.Selection, new Event() );
TestAction action = ( TestAction )actionDescriptor.getAction();
assertTrue( action.wasExecuted() );
}
@Test
public void testSelectionEventNotifiesListeners() {
ActionListener listener = mock( ActionListener.class );
mockUI( listener );
control.notifyListeners( SWT.Selection, new Event() );
TestAction action = ( TestAction )actionDescriptor.getAction();
verify( listener ).executed( ui, action );
}
private void mockUI( ActionListener listener ) {
UIConfiguration configuration = new UIConfiguration();
configuration.addActionListener( listener );
when( ui.getConfiguration() ).thenReturn( configuration );
}
private ActionDescriptor mockDescriptor() {
ActionDescriptor descriptor = mock( ActionDescriptor.class );
when( descriptor.getAction() ).thenReturn( new TestAction() );
InputStream image = RemoteActionTest.class.getResourceAsStream( "testImage.png" );
when( descriptor.getImage() ).thenReturn( ImageUtil.getBytes( image ) );
when( descriptor.getTitle() ).thenReturn( "bar" );
doReturn( Boolean.FALSE ).when( descriptor ).isEnabled();
doReturn( Boolean.FALSE ).when( descriptor ).isVisible();
return descriptor;
}
}