/******************************************************************************* * Copyright (c) 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.protocol; import static org.eclipse.rap.rwt.testfixture.internal.SerializationTestUtil.serializeAndDeserialize; import static org.junit.Assert.assertEquals; import org.eclipse.rap.json.JsonArray; import org.eclipse.rap.json.JsonObject; import org.eclipse.rap.json.JsonValue; import org.eclipse.rap.rwt.internal.protocol.Operation.CallOperation; import org.eclipse.rap.rwt.internal.protocol.Operation.CreateOperation; import org.eclipse.rap.rwt.internal.protocol.Operation.DestroyOperation; import org.eclipse.rap.rwt.internal.protocol.Operation.ListenOperation; import org.eclipse.rap.rwt.internal.protocol.Operation.NotifyOperation; import org.eclipse.rap.rwt.internal.protocol.Operation.SetOperation; import org.junit.Test; public class Operation_Test { @Test public void testCreateOperation() { CreateOperation operation = new CreateOperation( "target", "type" ); assertEquals( "target", operation.getTarget() ); assertEquals( JsonArray.readFrom( "[\"create\", \"target\", \"type\", {}]" ), operation.toJson() ); } @Test public void testCreateOperation_putProperty() { CreateOperation operation = new CreateOperation( "target", "type" ); operation.putProperty( "prop", JsonValue.TRUE ); assertEquals( JsonArray.readFrom( "[\"create\", \"target\", \"type\", {\"prop\": true}]" ), operation.toJson() ); } @Test public void testCreateOperation_putProperty_overwrites() { CreateOperation operation = new CreateOperation( "target", "type" ); operation.putProperty( "prop", JsonValue.TRUE ); operation.putProperty( "prop", JsonValue.FALSE ); assertEquals( JsonArray.readFrom( "[\"create\", \"target\", \"type\", {\"prop\": false}]" ), operation.toJson() ); } @Test public void testDestroyOperation() { DestroyOperation operation = new DestroyOperation( "target" ); assertEquals( "target", operation.getTarget() ); assertEquals( JsonArray.readFrom( "[\"destroy\", \"target\"]" ), operation.toJson() ); } @Test public void testSetOperation() { SetOperation operation = new SetOperation( "target" ); assertEquals( "target", operation.getTarget() ); assertEquals( new JsonObject(), operation.getProperties() ); assertEquals( JsonArray.readFrom( "[\"set\", \"target\", {}]" ), operation.toJson() ); } @Test public void testSetOperation_putProperty() { SetOperation operation = new SetOperation( "target" ); operation.putProperty( "prop", JsonValue.TRUE ); assertEquals( new JsonObject().add( "prop", true ), operation.getProperties() ); assertEquals( JsonArray.readFrom( "[\"set\", \"target\", {\"prop\": true}]" ), operation.toJson() ); } @Test public void testSetOperation_putProperty_overwrites() { SetOperation operation = new SetOperation( "target" ); operation.putProperty( "prop", JsonValue.TRUE ); operation.putProperty( "prop", JsonValue.FALSE ); assertEquals( new JsonObject().add( "prop", false ), operation.getProperties() ); } @Test public void testCallOperation() { CallOperation operation = new CallOperation( "target", "method", null ); assertEquals( "target", operation.getTarget() ); assertEquals( "method", operation.getMethodName() ); assertEquals( new JsonObject(), operation.getParameters() ); assertEquals( JsonArray.readFrom( "[\"call\", \"target\", \"method\", {}]" ), operation.toJson() ); } @Test public void testCallOperation_withParameters() { JsonObject parameters = new JsonObject().add( "param", 23 ); CallOperation operation = new CallOperation( "target", "method", parameters ); assertEquals( parameters, operation.getParameters() ); assertEquals( JsonArray.readFrom( "[\"call\", \"target\", \"method\", {\"param\": 23}]" ), operation.toJson() ); } @Test public void testListenOperation() { ListenOperation operation = new ListenOperation( "target" ); assertEquals( "target", operation.getTarget() ); assertEquals( JsonArray.readFrom( "[\"listen\", \"target\", {}]" ), operation.toJson() ); } @Test public void testListenOperation_putListener() { ListenOperation operation = new ListenOperation( "target" ); operation.putListener( "event", true ); assertEquals( JsonArray.readFrom( "[\"listen\", \"target\", {\"event\": true}]" ), operation.toJson() ); } @Test public void testListenOperation_putListener_overwrites() { ListenOperation operation = new ListenOperation( "target" ); operation.putListener( "event", true ); operation.putListener( "event", false ); assertEquals( JsonArray.readFrom( "[\"listen\", \"target\", {\"event\": false}]" ), operation.toJson() ); } @Test public void testNotifyOperation() { NotifyOperation operation = new NotifyOperation( "target", "event" ); assertEquals( "target", operation.getTarget() ); assertEquals( "event", operation.getEventName() ); assertEquals( new JsonObject(), operation.getProperties() ); assertEquals( JsonArray.readFrom( "[\"notify\", \"target\", \"event\", {}]" ), operation.toJson() ); } @Test public void testNotifyOperation_putListener() { NotifyOperation operation = new NotifyOperation( "target", "event" ); operation.putProperty( "prop", JsonValue.TRUE ); assertEquals( new JsonObject().add( "prop", true ), operation.getProperties() ); assertEquals( JsonArray.readFrom( "[\"notify\", \"target\", \"event\", {\"prop\": true}]" ), operation.toJson() ); } @Test public void testNotifyOperation_putListener_overwrites() { NotifyOperation operation = new NotifyOperation( "target", "event" ); operation.putProperty( "prop", JsonValue.TRUE ); operation.putProperty( "prop", JsonValue.FALSE ); assertEquals( new JsonObject().add( "prop", false ), operation.getProperties() ); } @Test public void testOperationsAreSerializable() throws Exception { SetOperation operation = new SetOperation( "target", new JsonObject().add( "foo", 23 ) ); SetOperation deserialized = serializeAndDeserialize( operation ); assertEquals( operation.toJson(), deserialized.toJson() ); } }