Browse Source

Avoid adding RpcInvocationHandler toString as invocations (#9802)

Change-Id: If6f378c0942132110adc748bd2c1cf87779924b6
tags/7.0.0.beta3
Artur Signell 11 years ago
parent
commit
d371ac4a4e

+ 5
- 0
server/src/com/vaadin/server/AbstractClientConnector.java View File

@@ -290,6 +290,11 @@ public abstract class AbstractClientConnector implements ClientConnector {
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if (method.getDeclaringClass() == Object.class) {
// Don't add Object methods such as toString and hashCode as
// invocations
return method.invoke(this, args);
}
addMethodInvocationToQueue(rpcInterfaceName, method, args);
return null;
}

+ 51
- 0
uitest/src/com/vaadin/tests/components/ui/RpcInvocationHandlerToString.html View File

@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head profile="http://selenium-ide.openqa.org/profiles/test-case">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="selenium.base" href="http://localhost:8888/" />
<title>New Test</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">New Test</td></tr>
</thead><tbody>
<tr>
<td>open</td>
<td>/run/com.vaadin.tests.components.ui.RpcInvocationHandlerToString?restartApplication</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>vaadin=runcomvaadintestscomponentsuiRpcInvocationHandlerToString::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VButton[0]/domChild[0]/domChild[0]</td>
<td></td>
</tr>
<tr>
<td>assertElementNotPresent</td>
<td>vaadin=runcomvaadintestscomponentsuiRpcInvocationHandlerToString::Root/VNotification[0]/HTML[0]</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>vaadin=runcomvaadintestscomponentsuiRpcInvocationHandlerToString::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[2]/VButton[0]/domChild[0]/domChild[0]</td>
<td></td>
</tr>
<tr>
<td>assertElementNotPresent</td>
<td>vaadin=runcomvaadintestscomponentsuiRpcInvocationHandlerToString::Root/VNotification[0]/HTML[0]</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>vaadin=runcomvaadintestscomponentsuiRpcInvocationHandlerToString::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[3]/VButton[0]/domChild[0]/domChild[0]</td>
<td></td>
</tr>
<tr>
<td>assertElementNotPresent</td>
<td>vaadin=runcomvaadintestscomponentsuiRpcInvocationHandlerToString::Root/VNotification[0]/HTML[0]</td>
<td></td>
</tr>
</tbody></table>
</body>
</html>

+ 74
- 0
uitest/src/com/vaadin/tests/components/ui/RpcInvocationHandlerToString.java View File

@@ -0,0 +1,74 @@
/*
* Copyright 2011 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.components.ui;

import com.vaadin.server.VaadinRequest;
import com.vaadin.shared.ui.ui.PageClientRpc;
import com.vaadin.tests.components.AbstractTestUI;
import com.vaadin.tests.util.Log;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;

public class RpcInvocationHandlerToString extends AbstractTestUI {

private Log log = new Log(5);
PageClientRpc dummyProxy = getRpcProxy(PageClientRpc.class);

@Override
protected void setup(VaadinRequest request) {
addComponent(log);
Button b = new Button("Exec toString() for an invocation proxy",
new Button.ClickListener() {

@Override
public void buttonClick(ClickEvent event) {
log.log("An invoation proxy: " + dummyProxy.toString());
}
});
addComponent(b);
b = new Button("Exec hashCode() for an invocation proxy",
new Button.ClickListener() {

@Override
public void buttonClick(ClickEvent event) {
log.log("Invocation proxy.hashCode(): "
+ dummyProxy.hashCode());
}
});
addComponent(b);
b = new Button("Exec equals(false) for an invocation proxy",
new Button.ClickListener() {

@Override
public void buttonClick(ClickEvent event) {
log.log("Invocation proxy.equals(false): "
+ dummyProxy.equals(false));
}
});
addComponent(b);
}

@Override
protected String getTestDescription() {
return "Clicking on the buttons invokes Object methods on a dummy proxy instance. They should only cause log rows to appear and no client rpc to be sent";
}

@Override
protected Integer getTicketNumber() {
return 9802;
}

}

Loading…
Cancel
Save