/******************************************************************************* * Copyright (c) 2013, 2015 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: * Ralf Sternberg - initial API and implementation ******************************************************************************/ package org.eclipse.rap.addons.d3chart; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import java.util.Arrays; import org.eclipse.rap.json.JsonArray; import org.eclipse.rap.json.JsonValue; import org.eclipse.rap.rwt.remote.Connection; import org.eclipse.rap.rwt.remote.JsonMapping; import org.eclipse.rap.rwt.remote.RemoteObject; import org.eclipse.rap.rwt.testfixture.TestContext; import org.eclipse.swt.SWT; import org.eclipse.swt.SWTException; import org.eclipse.swt.graphics.Color; 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 static org.mockito.Mockito.mock; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; public class ChartItem_Test { private Display display; private Shell shell; private Chart chart; @Rule public TestContext context = new TestContext(); @Before public void setUp() { display = new Display(); shell = new Shell( display ); chart = new Chart( shell, SWT.NONE, "foo" ) {}; } @Test public void create_registersWithParent() { ChartItem chartItem = new ChartItem( chart ); assertTrue( Arrays.asList( chart.getItems() ).contains( chartItem ) ); } @Test public void create_createsRemoteObject() { RemoteObject remoteObject = mock( RemoteObject.class ); Connection connection = fakeConnection( remoteObject ); new ChartItem( chart ); verify( connection ).createRemoteObject( eq( "d3chart.ChartItem" ) ); } @Test public void create_setsRemoteParent() { RemoteObject remoteObject = mock( RemoteObject.class ); fakeConnection( remoteObject ); new ChartItem( chart ); verify( remoteObject ).set( eq( "parent" ), eq( chart.getRemoteId() ) ); } @Test public void dispose_deregistersFromParent() { ChartItem chartItem = new ChartItem( chart ); chartItem.dispose(); assertFalse( Arrays.asList( chart.getItems() ).contains( chartItem ) ); } @Test public void dispose_destroysRemoteObject() { RemoteObject remoteObject = mock( RemoteObject.class ); fakeConnection( remoteObject ); ChartItem chartItem = new ChartItem( chart ); chartItem.dispose(); verify( remoteObject ).destroy(); } @Test public void getValue_defaultsToZero() { ChartItem chartItem = new ChartItem( chart ); double result = chartItem.getValue(); assertEquals( 0, result, 0 ); } @Test( expected = SWTException.class ) public void getValue_checksWidget() { ChartItem chartItem = new ChartItem( chart ); chartItem.dispose(); chartItem.getValue(); } @Test public void setValue_changesValue() { ChartItem chartItem = new ChartItem( chart ); chartItem.setValue( 3.14f ); assertEquals( 3.14f, chartItem.getValue(), 0 ); } @Test( expected = SWTException.class ) public void setValue_checksWidget() { ChartItem chartItem = new ChartItem( chart ); chartItem.dispose(); chartItem.setValue( 3.14f ); } @Test public void setValue_isRendered() { RemoteObject remoteObject = mock( RemoteObject.class ); fakeConnection( remoteObject ); new ChartItem( chart ).setValue( 3.14f ); verify( remoteObject ).set( eq( "value" ), eq( (double)3.14f ) ); } @Test public void setValue_isNotRenderedIfUnchanged() { RemoteObject remoteObject = mock( RemoteObject.class ); fakeConnection( remoteObject ); ChartItem chartItem = new ChartItem( chart ); chartItem.setValue( 3.14f ); reset( remoteObject ); chartItem.setValue( 3.14f ); verifyZeroInteractions( remoteObject ); } @Test public void getValues_defaultsToNull() { ChartItem chartItem = new ChartItem( chart ); float[] values = chartItem.getValues(); assertNull( values ); } @Test( expected = SWTException.class ) public void getValues_checksWidget() { ChartItem chartItem = new ChartItem( chart ); chartItem.dispose(); chartItem.getValues(); } @Test public void setValues_changesValues() { ChartItem chartItem = new ChartItem( chart ); chartItem.setValues( 3.14f, 1.41f ); assertArrayEquals( new float[] { 3.14f, 1.41f }, chartItem.getValues(), 0 ); } @Test public void setValues_doesNotChangeValue() { ChartItem chartItem = new ChartItem( chart ); chartItem.setValue( 3.14f ); chartItem.setValues( 1.41f ); assertEquals( 3.14f, chartItem.getValue(), 0 ); } @Test( expected = SWTException.class ) public void setValues_checksWidget() { ChartItem chartItem = new ChartItem( chart ); chartItem.dispose(); chartItem.setValues( 3.14f, 1.41f ); } @Test public void setValues_isRendered() { RemoteObject remoteObject = mock( RemoteObject.class ); fakeConnection( remoteObject ); new ChartItem( chart ).setValues( 3.14f, 1.41f ); verify( remoteObject ).set( eq( "values" ), eq( new JsonArray().add( 3.14f ).add( 1.41f ) ) ); } @Test public void setValues_isNotRenderedIfUnchanged() { RemoteObject remoteObject = mock( RemoteObject.class ); fakeConnection( remoteObject ); ChartItem chartItem = new ChartItem( chart ); chartItem.setValues( 3.14f, 1.41f ); reset( remoteObject ); chartItem.setValues( 3.14f, 1.41f ); verifyZeroInteractions( remoteObject ); } @Test public void getColor_defaultsToBlack() { ChartItem chartItem = new ChartItem( chart ); Color result = chartItem.getColor(); assertEquals( new Color( display, 0, 0, 0 ), result ); } @Test( expected = SWTException.class ) public void getColor_checksWidget() { ChartItem chartItem = new ChartItem( chart ); chartItem.dispose(); chartItem.getColor(); } @Test public void setColor_changesColor() { ChartItem chartItem = new ChartItem( chart ); chartItem.setColor( new Color( display, 255, 128, 0 ) ); assertEquals( new Color( display, 255, 128, 0 ), chartItem.getColor() ); } @Test( expected = SWTException.class ) public void setColor_checksWidget() { ChartItem chartItem = new ChartItem( chart ); chartItem.dispose(); chartItem.setColor( null ); } @Test public void setColor_resetsColorWithNull() { ChartItem chartItem = new ChartItem( chart ); chartItem.setColor( new Color( display, 255, 128, 0 ) ); chartItem.setColor( null ); assertEquals( new Color( display, 0, 0, 0 ), chartItem.getColor() ); } @Test public void setColor_isRendered() { RemoteObject remoteObject = mock( RemoteObject.class ); fakeConnection( remoteObject ); new ChartItem( chart ).setColor( new Color( display, 255, 128, 0 ) ); JsonValue expected = JsonMapping.toJson( new Color( display, 255, 128, 0 ) ); verify( remoteObject ).set( eq( "color" ), eq( expected ) ); } @Test public void setColor_isNotRenderedIfUnchanged() { RemoteObject remoteObject = mock( RemoteObject.class ); fakeConnection( remoteObject ); ChartItem chartItem = new ChartItem( chart ); chartItem.setColor( new Color( display, 255, 128, 0 ) ); reset( remoteObject ); chartItem.setColor( new Color( display, 255, 128, 0 ) ); verifyZeroInteractions( remoteObject ); } private Connection fakeConnection( RemoteObject remoteObject ) { Connection connection = mock( Connection.class ); when( connection.createRemoteObject( anyString() ) ).thenReturn( remoteObject ); context.replaceConnection( connection ); return connection; } }