123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- /*
- * Copyright 2000-2014 Vaadin Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
- package com.vaadin.tests.server;
-
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.io.Serializable;
- import java.lang.reflect.Method;
-
- import junit.framework.TestCase;
-
- import com.vaadin.server.ClientMethodInvocation;
- import com.vaadin.server.JavaScriptCallbackHelper;
- import com.vaadin.ui.JavaScript.JavaScriptCallbackRpc;
- import com.vaadin.util.ReflectTools;
-
- import elemental.json.Json;
- import elemental.json.JsonArray;
- import elemental.json.impl.JsonUtil;
-
- public class TestClientMethodSerialization extends TestCase {
-
- private static final Method JAVASCRIPT_CALLBACK_METHOD = ReflectTools
- .findMethod(JavaScriptCallbackRpc.class, "call", String.class,
- JsonArray.class);
-
- private static final Method BASIC_PARAMS_CALL_METHOD = ReflectTools
- .findMethod(TestClientMethodSerialization.class,
- "basicParamsMethodForTesting", String.class, Integer.class);
-
- private static final Method NO_PARAMS_CALL_METHOD = ReflectTools
- .findMethod(TestClientMethodSerialization.class,
- "noParamsMethodForTesting");
-
- public void basicParamsMethodForTesting(String stringParam,
- Integer integerParam) {
- }
-
- public void noParamsMethodForTesting() {
- }
-
- /**
- * Tests the {@link ClientMethodInvocation} serialization when using
- * {@link JavaScriptCallbackHelper#invokeCallback(String, Object...)}.
- * #12532
- */
- public void testClientMethodSerialization_WithJSONArray_ContentStaysSame()
- throws Exception {
- JsonArray originalArray = Json.createArray();
- originalArray.set(0, "callbackParameter1");
- originalArray.set(1, "callBackParameter2");
- originalArray.set(2, "12345");
- ClientMethodInvocation original = new ClientMethodInvocation(null,
- "interfaceName", JAVASCRIPT_CALLBACK_METHOD, new Object[] {
- "callBackMethodName", originalArray });
-
- ClientMethodInvocation copy = (ClientMethodInvocation) serializeAndDeserialize(original);
- JsonArray copyArray = (JsonArray) copy.getParameters()[1];
- assertEquals(JsonUtil.stringify(originalArray), JsonUtil.stringify(copyArray));
- }
-
- public void testClientMethodSerialization_WithBasicParams_NoChanges()
- throws Exception {
- String stringParam = "a string 123";
- Integer integerParam = 1234567890;
- ClientMethodInvocation original = new ClientMethodInvocation(null,
- "interfaceName", BASIC_PARAMS_CALL_METHOD, new Serializable[] {
- stringParam, integerParam });
- ClientMethodInvocation copy = (ClientMethodInvocation) serializeAndDeserialize(original);
- String copyString = (String) copy.getParameters()[0];
- Integer copyInteger = (Integer) copy.getParameters()[1];
- assertEquals(copyString, stringParam);
- assertEquals(copyInteger, integerParam);
- }
-
- public void testClientMethodSerialization_NoParams_NoExceptions() {
- ClientMethodInvocation original = new ClientMethodInvocation(null,
- "interfaceName", NO_PARAMS_CALL_METHOD, null);
- ClientMethodInvocation copy = (ClientMethodInvocation) serializeAndDeserialize(original);
- }
-
- private static Serializable serializeAndDeserialize(Serializable input) {
- Serializable output = null;
- try {
- ByteArrayOutputStream bs = new ByteArrayOutputStream();
- ObjectOutputStream out = new ObjectOutputStream(bs);
- out.writeObject(input);
- byte[] data = bs.toByteArray();
- ObjectInputStream in = new ObjectInputStream(
- new ByteArrayInputStream(data));
- output = (Serializable) in.readObject();
- } catch (Exception e) {
- fail("Exception during serialization/deserialization: "
- + e.getMessage());
- }
- return output;
- }
-
- }
|