/*******************************************************************************
* Copyright (c) 2002, 2015 Innoopract Informationssysteme GmbH 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:
* Innoopract Informationssysteme GmbH - initial API and implementation
* EclipseSource - ongoing development
******************************************************************************/
package org.eclipse.swt.internal.widgets;
import static org.eclipse.rap.rwt.testfixture.internal.SerializationTestUtil.serializeAndDeserialize;
import static org.eclipse.swt.internal.events.EventLCAUtil.getEventMask;
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 org.eclipse.rap.rwt.internal.lifecycle.DisposedWidgets;
import org.eclipse.rap.rwt.internal.lifecycle.WidgetUtil;
import org.eclipse.rap.rwt.testfixture.TestContext;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Widget;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
public class WidgetRemoteAdapter_Test {
private Display display;
private WidgetRemoteAdapter adapter;
@Rule
public TestContext context = new TestContext();
@Before
public void setUp() {
display = new Display();
adapter = new WidgetRemoteAdapter( "id" );
}
@Test
public void testGetId() {
String id = adapter.getId();
assertEquals( "id", id );
}
@Test
public void testSetParent() {
Composite parent = mock( Composite.class );
adapter.setParent( parent );
assertSame( parent, adapter.getParent() );
}
@Test
public void testIsInitialized_isFalseByDefault() {
boolean initialized = adapter.isInitialized();
assertFalse( initialized );
}
@Test
public void testSetInitialized() {
adapter.setInitialized( true );
boolean initialized = adapter.isInitialized();
assertTrue( initialized );
}
@Test
public void testMarkPreserved() {
adapter.markPreserved( 3 );
// bit logic does not affect other properties
assertFalse( adapter.hasPreserved( 0 ) );
assertFalse( adapter.hasPreserved( 1 ) );
assertFalse( adapter.hasPreserved( 2 ) );
assertTrue( adapter.hasPreserved( 3 ) );
}
@Test
public void testMarkPreserved_isCleared() {
adapter.markPreserved( 3 );
adapter.clearPreserved();
assertFalse( adapter.hasPreserved( 3 ) );
}
@Test
public void testPreserveProperty() {
Object value = new Object();
adapter.preserve( "prop", value );
assertSame( value, adapter.getPreserved( "prop" ) );
}
@Test
public void testPreserveProperty_isCleared() {
adapter.preserve( "prop", new Object() );
adapter.clearPreserved();
assertNull( adapter.getPreserved( "prop" ) );
}
@Test
public void testPreserveProperty_isTransient() throws Exception {
adapter.preserve( "prop", new Object() );
adapter = serializeAndDeserialize( adapter );
assertNull( adapter.getPreserved( "prop" ) );
}
@Test
public void testGetRenderRunnables_initial() {
assertEquals( 0, adapter.getRenderRunnables().length );
}
@Test
public void testAddRenderRunnable_single() {
Runnable runnable = mock( Runnable.class );
adapter.addRenderRunnable( runnable );
Runnable[] renderRunnables = adapter.getRenderRunnables();
assertEquals( 1, renderRunnables.length );
assertSame( runnable, renderRunnables[ 0 ] );
}
@Test
public void testAddRenderRunnable_multiple() {
Runnable runnable1 = mock( Runnable.class );
Runnable runnable2 = mock( Runnable.class );
adapter.addRenderRunnable( runnable1 );
adapter.addRenderRunnable( runnable2 );
Runnable[] renderRunnables = adapter.getRenderRunnables();
assertEquals( 2, renderRunnables.length );
assertSame( runnable1, renderRunnables[ 0 ] );
assertSame( runnable2, renderRunnables[ 1 ] );
}
@Test
public void testRenderRunnable_isTransient() throws Exception {
adapter.addRenderRunnable( mock( Runnable.class ) );
adapter = serializeAndDeserialize( adapter );
assertEquals( 0, adapter.getRenderRunnables().length );
}
@Test
public void testMarkDisposed() {
// dispose un-initialized widget: must not occur in list of disposed widgets
Widget widget = new Shell( display );
widget.dispose();
assertTrue( widget.isDisposed() );
assertEquals( 0, DisposedWidgets.getAll().size() );
// dispose initialized widget: must be present in list of disposed widgets
widget = new Shell( display );
WidgetRemoteAdapter adapter = ( WidgetRemoteAdapter )WidgetUtil.getAdapter( widget );
adapter.setInitialized( true );
widget.dispose();
assertTrue( widget.isDisposed() );
assertEquals( 1, DisposedWidgets.getAll().size() );
}
@Test
public void testPreserveData() {
Object[] data = { "foo" };
adapter.preserveData( data );
assertTrue( adapter.hasPreservedData() );
assertSame( data, adapter.getPreservedData() );
}
@Test
public void testPreserveData_isCleared() {
adapter.preserveData( new Object[] { "foo" } );
adapter.clearPreserved();
assertFalse( adapter.hasPreservedData() );
assertNull( adapter.getPreservedData() );
}
@Test
public void testPreserveData_isTransient() throws Exception {
adapter.preserveData( new Object[] { "foo" } );
adapter = serializeAndDeserialize( adapter );
assertFalse( adapter.hasPreservedData() );
assertNull( adapter.getPreservedData() );
}
@Test
public void testPreserveListeners() {
adapter.preserveListeners( 23 );
assertTrue( adapter.hasPreservedListeners() );
assertEquals( 23, adapter.getPreservedListeners() );
}
@Test
public void testPreserveListeners_isCleared() {
adapter.preserveListeners( 23 );
adapter.clearPreserved();
assertFalse( adapter.hasPreservedListeners() );
assertEquals( 0, adapter.getPreservedListeners() );
}
@Test
public void testPreserveListeners_isTransient() throws Exception {
adapter.preserveListeners( getEventMask( 23 ) );
adapter = serializeAndDeserialize( adapter );
assertFalse( adapter.hasPreservedListeners() );
assertEquals( 0, adapter.getPreservedListeners() );
}
@Test
public void testPreserveVariant() {
adapter.preserveVariant( "foo" );
assertTrue( adapter.hasPreservedVariant() );
assertEquals( "foo", adapter.getPreservedVariant() );
}
@Test
public void testPreserveVariant_isCleared() {
adapter.preserveVariant( "foo" );
adapter.clearPreserved();
assertFalse( adapter.hasPreservedVariant() );
assertNull( adapter.getPreservedVariant() );
}
@Test
public void testPreserveVariant_isTransient() throws Exception {
adapter.preserveVariant( "foo" );
adapter = serializeAndDeserialize( adapter );
assertFalse( adapter.hasPreservedVariant() );
assertNull( adapter.getPreservedVariant() );
}
@Test
public void testSerializableFields() throws Exception {
adapter.setInitialized( true );
WidgetRemoteAdapter deserializedAdapter = serializeAndDeserialize( adapter );
assertEquals( adapter.getId(), deserializedAdapter.getId() );
assertTrue( deserializedAdapter.isInitialized() );
}
}