/******************************************************************************* * Copyright (c) 2012, 2014 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 org.eclipse.rap.rwt.internal.textsize; import static org.eclipse.rap.rwt.internal.protocol.RemoteObjectFactory.getRemoteObject; import static org.eclipse.rap.rwt.internal.service.ContextProvider.getApplicationContext; import static org.eclipse.rap.rwt.internal.textsize.MeasurementOperator.TYPE; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertSame; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import org.eclipse.rap.json.JsonArray; import org.eclipse.rap.json.JsonObject; import org.eclipse.rap.rwt.internal.protocol.ProtocolMessageWriter; import org.eclipse.rap.rwt.internal.remote.RemoteObjectImpl; import org.eclipse.rap.rwt.internal.remote.RemoteObjectRegistry; import org.eclipse.rap.rwt.internal.service.ContextProvider; import org.eclipse.rap.rwt.internal.service.UISessionImpl; import org.eclipse.rap.rwt.service.UISession; import org.eclipse.rap.rwt.testfixture.internal.Fixture; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.FontData; import org.junit.After; import org.junit.Before; import org.junit.Test; public class MeasurementUtil_Test { private static final FontData FONT_DATA = new FontData( "fontName", 1, SWT.NORMAL ); private static final String TEXT_TO_MEASURE = " text \"to\" measure "; @Before public void setUp() { Fixture.setUp(); } @After public void tearDown() { Fixture.tearDown(); } @Test public void testGetMeasurementOperator_returnsNonNullInstance() { assertNotNull( MeasurementUtil.getMeasurementOperator() ); } @Test public void testGetMeasurementOperator_returnsSameInstance() { MeasurementOperator operator1 = MeasurementUtil.getMeasurementOperator(); MeasurementOperator operator2 = MeasurementUtil.getMeasurementOperator(); assertSame( operator1, operator2 ); } @Test public void testInstallMeasurementOperator() { removeRemoteObject( TYPE ); UISession uiSession = mock( UISession.class ); MeasurementUtil.installMeasurementOperator( uiSession ); verify( uiSession ).setAttribute( anyString(), any( MeasurementOperator.class ) ); } @Test public void testCreateProbeParamObject() { Probe probe = createProbe(); JsonArray probeObject = MeasurementUtil.createProbeParamObject( probe ); JsonArray expected = new JsonArray() .add( MeasurementUtil.getId( probe ) ) .add( TEXT_TO_MEASURE ) .add( new JsonArray().add( "fontName" ) ) .add( 1 ) .add( false ) .add( false ) .add( -1 ) .add( true ); assertEquals( expected, probeObject ); } @Test public void testCreateItemParamObject() { MeasurementItem item = createMeasurementItem(); JsonArray itemObject = MeasurementUtil.createItemParamObject( item ); JsonArray expected = new JsonArray() .add( MeasurementUtil.getId( item ) ) .add( " text \"to\" measure " ) .add( new JsonArray().add( "fontName" ) ) .add( 1 ) .add( false ) .add( false ) .add( 17 ) .add( false ); assertEquals( expected, itemObject ); } @Test public void testAppendStartupTextSizeProbe_withoutUISession() { ( ( UISessionImpl )ContextProvider.getUISession() ).shutdown(); createStartupProbe(); ProtocolMessageWriter writer = mock( ProtocolMessageWriter.class ); MeasurementUtil.appendStartupTextSizeProbe( writer ); verify( writer ).appendCall( eq( "rwt.client.TextSizeMeasurement" ), eq( "measureItems" ), any( JsonObject.class ) ); } private void createStartupProbe() { getApplicationContext().getProbeStore().createProbe( FONT_DATA ); } private Probe createProbe() { return new Probe( TEXT_TO_MEASURE, FONT_DATA ); } private MeasurementItem createMeasurementItem() { return new MeasurementItem( TEXT_TO_MEASURE, FONT_DATA, 17, TextSizeUtil.STRING_EXTENT ); } private void removeRemoteObject( String type ) { RemoteObjectRegistry.getInstance().remove( ( RemoteObjectImpl )getRemoteObject( type ) ); } }