Revision: 9314
Author: [email protected]
Date: Tue Nov 30 10:36:06 2010
Log: Merge r9309 and r9312 to GWT 2.1 branch.
UTF-8 fix and ProxyAutoBean hotspots.
http://code.google.com/p/google-web-toolkit/source/detail?r=9314
Added:
/releases/2.1/user/test/com/google/gwt/requestfactory/client/RequestFactoryUnicodeEscapingTest.java
/releases/2.1/user/test/com/google/gwt/requestfactory/server/RequestFactoryUnicodeEscapingJreTest.java
/releases/2.1/user/test/com/google/gwt/requestfactory/shared/UnicodeTestRequest.java
Modified:
/releases/2.1/user/src/com/google/gwt/autobean/server/MethodPropertyContext.java
/releases/2.1/user/src/com/google/gwt/autobean/server/ProxyAutoBean.java
/releases/2.1/user/src/com/google/gwt/autobean/shared/ValueCodex.java
/releases/2.1/user/src/com/google/gwt/autobean/shared/impl/StringQuoter.java
/releases/2.1/user/src/com/google/gwt/requestfactory/server/RequestFactoryServlet.java
/releases/2.1/user/test/com/google/gwt/requestfactory/RequestFactoryJreSuite.java
/releases/2.1/user/test/com/google/gwt/requestfactory/RequestFactorySuite.java
/releases/2.1/user/test/com/google/gwt/requestfactory/client/RequestFactoryTest.java
/releases/2.1/user/test/com/google/gwt/requestfactory/shared/SimpleRequestFactory.java
/releases/2.1/user/test/com/google/gwt/user/client/rpc/UnicodeEscapingTest.java
=======================================
--- /dev/null
+++
/releases/2.1/user/test/com/google/gwt/requestfactory/client/RequestFactoryUnicodeEscapingTest.java
Tue Nov 30 10:36:06 2010
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * 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.google.gwt.requestfactory.client;
+
+import com.google.gwt.requestfactory.shared.Receiver;
+import com.google.gwt.requestfactory.shared.ServerFailure;
+import
com.google.gwt.user.client.rpc.UnicodeEscapingService.InvalidCharacterException;
+import com.google.gwt.user.client.rpc.UnicodeEscapingTest;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Runs through a portion of the Basic Multilingual Plane.
+ */
+public class RequestFactoryUnicodeEscapingTest extends
RequestFactoryTestBase {
+ private static final int TEST_FINISH_DELAY_MS = 5000;
+ private final UnicodeEscapingTest test = new UnicodeEscapingTest() {
+
+ @Override
+ protected void clientToServerVerifyRange(int start, final int end,
+ final int size, final int step) throws InvalidCharacterException {
+ current = start;
+ int blockEnd = Math.min(end, current + size);
+
req.unicodeTestRequest().verifyStringContainingCharacterRange(current,
+ blockEnd, getStringContainingCharacterRange(start,
blockEnd)).fire(
+ new Receiver<Void>() {
+ List<ServerFailure> fails = new ArrayList<ServerFailure>();
+
+ @Override
+ public void onFailure(ServerFailure error) {
+ fails.add(error);
+ onSuccess(null);
+ }
+
+ @Override
+ public void onSuccess(Void response) {
+ current += step;
+ if (current < end) {
+ delayTestFinish(TEST_FINISH_DELAY_MS);
+ int blockEnd = Math.min(end, current + size);
+
req.unicodeTestRequest().verifyStringContainingCharacterRange(
+ current, blockEnd,
+ getStringContainingCharacterRange(current,
blockEnd)).fire(
+ this);
+ } else if (!fails.isEmpty()) {
+ StringBuilder msg = new StringBuilder();
+ for (ServerFailure error : fails) {
+ msg.append(error.getMessage()).append("\n");
+ }
+ throw new RuntimeException(msg.toString());
+ } else {
+ finishTest();
+ }
+ }
+ });
+ }
+
+ @Override
+ protected void serverToClientVerify(int start, final int end,
+ final int size, final int step) {
+ current = start;
+ req.unicodeTestRequest().getStringContainingCharacterRange(start,
+ Math.min(end, current + size)).fire(new Receiver<String>() {
+ List<ServerFailure> fails = new ArrayList<ServerFailure>();
+
+ @Override
+ public void onFailure(ServerFailure error) {
+ fails.add(error);
+ nextBatch();
+ }
+
+ @Override
+ public void onSuccess(String response) {
+ try {
+ verifyStringContainingCharacterRange(current,
+ Math.min(end, current + size), response);
+ } catch (InvalidCharacterException e) {
+ fails.add(new ServerFailure(e.getMessage(), null, null));
+ }
+ nextBatch();
+ }
+
+ private void nextBatch() {
+ current += step;
+ if (current < end) {
+ delayTestFinish(TEST_FINISH_DELAY_MS);
+
req.unicodeTestRequest().getStringContainingCharacterRange(current,
+ Math.min(end, current + size)).fire(this);
+ } else if (!fails.isEmpty()) {
+ StringBuilder msg = new StringBuilder();
+ for (ServerFailure t : fails) {
+ msg.append(t.getMessage()).append("\n");
+ }
+ throw new RuntimeException(msg.toString());
+ } else {
+ finishTest();
+ }
+ }
+ });
+ }
+ };
+
+ @Override
+ public String getModuleName() {
+ return "com.google.gwt.requestfactory.RequestFactorySuite";
+ }
+
+ public void testClientToServerBMPHigh() throws InvalidCharacterException
{
+ test.testClientToServerBMPHigh();
+ }
+
+ public void testClientToServerBMPLow() throws InvalidCharacterException {
+ test.testClientToServerBMPLow();
+ }
+
+ public void testClientToServerNonBMP() throws InvalidCharacterException {
+ test.testClientToServerNonBMP();
+ }
+
+ public void testServerToClientBMP() {
+ test.testServerToClientBMP();
+ }
+
+ public void testServerToClientNonBMP() {
+ test.testServerToClientNonBMP();
+ }
+
+}
=======================================
--- /dev/null
+++
/releases/2.1/user/test/com/google/gwt/requestfactory/server/RequestFactoryUnicodeEscapingJreTest.java
Tue Nov 30 10:36:06 2010
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * 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.google.gwt.requestfactory.server;
+
+import
com.google.gwt.requestfactory.client.RequestFactoryUnicodeEscapingTest;
+import com.google.gwt.requestfactory.shared.SimpleRequestFactory;
+
+/**
+ * A JRE implementation of {...@link RequestFactoryUnicodeEscapingTest}.
+ */
+public class RequestFactoryUnicodeEscapingJreTest extends
+ RequestFactoryUnicodeEscapingTest {
+ @Override
+ public String getModuleName() {
+ return null;
+ }
+
+ @Override
+ protected SimpleRequestFactory createFactory() {
+ return
RequestFactoryJreTest.createInProcess(SimpleRequestFactory.class);
+ }
+}
=======================================
--- /dev/null
+++
/releases/2.1/user/test/com/google/gwt/requestfactory/shared/UnicodeTestRequest.java
Tue Nov 30 10:36:06 2010
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * 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.google.gwt.requestfactory.shared;
+
+import com.google.gwt.user.client.rpc.UnicodeEscapingTest;
+
+/**
+ * Provides access to the static test methods in {...@link
UnicodeEscapingTes}.
+ */
+...@service(UnicodeEscapingTest.class)
+public interface UnicodeTestRequest extends RequestContext {
+ Request<String> getStringContainingCharacterRange(int start, int end);
+
+ Request<Void> verifyStringContainingCharacterRange(int start, int end,
+ String str);
+}
=======================================
---
/releases/2.1/user/src/com/google/gwt/autobean/server/MethodPropertyContext.java
Wed Nov 24 06:41:26 2010
+++
/releases/2.1/user/src/com/google/gwt/autobean/server/MethodPropertyContext.java
Tue Nov 30 10:36:06 2010
@@ -23,6 +23,7 @@
import java.lang.reflect.Type;
import java.util.Collection;
import java.util.Map;
+import java.util.WeakHashMap;
/**
* A base type to handle analyzing the return value of a getter method. The
@@ -30,47 +31,61 @@
*/
abstract class MethodPropertyContext implements CollectionPropertyContext,
MapPropertyContext {
- private final Class<?> keyType;
- private final Class<?> valueType;
- private final Class<?> elementType;
- private final Class<?> type;
+ private static class Data {
+ Class<?> keyType;
+ Class<?> valueType;
+ Class<?> elementType;
+ Class<?> type;
+ }
+
+ /**
+ * Save prior instances in order to decrease the amount of data computed.
+ */
+ private static final Map<Method, Data> cache = new WeakHashMap<Method,
Data>();
+
+ private final Data data;
public MethodPropertyContext(Method getter) {
- this.type = getter.getReturnType();
-
- // Compute collection element type
- if (Collection.class.isAssignableFrom(getType())) {
- elementType =
TypeUtils.ensureBaseType(TypeUtils.getSingleParameterization(
- Collection.class, getter.getGenericReturnType(),
- getter.getReturnType()));
- keyType = valueType = null;
- } else if (Map.class.isAssignableFrom(getType())) {
- Type[] types = TypeUtils.getParameterization(Map.class,
- getter.getGenericReturnType());
- keyType = TypeUtils.ensureBaseType(types[0]);
- valueType = TypeUtils.ensureBaseType(types[1]);
- elementType = null;
- } else {
- elementType = keyType = valueType = null;
+ synchronized (cache) {
+ Data previous = cache.get(getter);
+ if (previous != null) {
+ this.data = previous;
+ return;
+ }
+
+ this.data = new Data();
+ data.type = getter.getReturnType();
+ // Compute collection element type
+ if (Collection.class.isAssignableFrom(getType())) {
+ data.elementType =
TypeUtils.ensureBaseType(TypeUtils.getSingleParameterization(
+ Collection.class, getter.getGenericReturnType(),
+ getter.getReturnType()));
+ } else if (Map.class.isAssignableFrom(getType())) {
+ Type[] types = TypeUtils.getParameterization(Map.class,
+ getter.getGenericReturnType());
+ data.keyType = TypeUtils.ensureBaseType(types[0]);
+ data.valueType = TypeUtils.ensureBaseType(types[1]);
+ }
+ cache.put(getter, data);
}
}
public abstract boolean canSet();
public Class<?> getElementType() {
- return elementType;
+ return data.elementType;
}
public Class<?> getKeyType() {
- return keyType;
+ return data.keyType;
}
public Class<?> getType() {
- return type;
+ return data.type;
}
public Class<?> getValueType() {
- return valueType;
+ return data.valueType;
}
public abstract void set(Object value);
=======================================
---
/releases/2.1/user/src/com/google/gwt/autobean/server/ProxyAutoBean.java
Wed Nov 24 06:41:26 2010
+++
/releases/2.1/user/src/com/google/gwt/autobean/server/ProxyAutoBean.java
Tue Nov 30 10:36:06 2010
@@ -28,9 +28,10 @@
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.WeakHashMap;
/**
* An implementation of an AutoBean that uses reflection.
@@ -38,9 +39,60 @@
* @param <T> the type of interface being wrapped
*/
class ProxyAutoBean<T> extends AbstractAutoBean<T> {
+ private static class Data {
+ final List<Method> getters = new ArrayList<Method>();
+ final List<String> getterNames = new ArrayList<String>();
+ final List<PropertyType> propertyType = new ArrayList<PropertyType>();
+ }
+
+ private enum PropertyType {
+ VALUE, REFERENCE, COLLECTION, MAP;
+ }
+
+ private static final Map<Class<?>, Data> cache = new
WeakHashMap<Class<?>, Data>();
+
+ private static Data calculateData(Class<?> beanType) {
+ Data toReturn;
+ synchronized (cache) {
+ toReturn = cache.get(beanType);
+ if (toReturn == null) {
+ toReturn = new Data();
+ for (Method method : beanType.getMethods()) {
+ if (BeanMethod.GET.matches(method)) {
+ toReturn.getters.add(method);
+
+ String name;
+ PropertyName annotation =
method.getAnnotation(PropertyName.class);
+ if (annotation != null) {
+ name = annotation.value();
+ } else {
+ name = method.getName();
+ name = Character.toLowerCase(name.charAt(3))
+ + (name.length() >= 5 ? name.substring(4) : "");
+ }
+ toReturn.getterNames.add(name);
+
+ Class<?> returnType = method.getReturnType();
+ if (TypeUtils.isValueType(returnType)) {
+ toReturn.propertyType.add(PropertyType.VALUE);
+ } else if (Collection.class.isAssignableFrom(returnType)) {
+ toReturn.propertyType.add(PropertyType.COLLECTION);
+ } else if (Map.class.isAssignableFrom(returnType)) {
+ toReturn.propertyType.add(PropertyType.MAP);
+ } else {
+ toReturn.propertyType.add(PropertyType.REFERENCE);
+ }
+ }
+ }
+ cache.put(beanType, toReturn);
+ }
+ }
+ return toReturn;
+ }
+
private final Class<T> beanType;
private final Configuration configuration;
- private final List<Method> getters;
+ private final Data data;
private final T shim;
// These constructors mirror the generated constructors.
@@ -50,7 +102,7 @@
super(factory);
this.beanType = (Class<T>) beanType;
this.configuration = configuration;
- this.getters = calculateGetters();
+ this.data = calculateData(beanType);
this.shim = createShim();
}
@@ -63,7 +115,7 @@
}
this.beanType = (Class<T>) beanType;
this.configuration = configuration;
- this.getters = calculateGetters();
+ this.data = calculateData(beanType);
this.shim = createShim();
}
@@ -71,7 +123,7 @@
super(toClone, deep);
this.beanType = toClone.beanType;
this.configuration = toClone.configuration;
- this.getters = toClone.getters;
+ this.data = toClone.data;
this.shim = createShim();
}
@@ -156,16 +208,15 @@
// TODO: Port to model-based when class-based TypeOracle is available.
@Override
protected void traverseProperties(AutoBeanVisitor visitor,
OneShotContext ctx) {
- for (final Method getter : getters) {
- String name;
- PropertyName annotation = getter.getAnnotation(PropertyName.class);
- if (annotation != null) {
- name = annotation.value();
- } else {
- name = getter.getName();
- name = Character.toLowerCase(name.charAt(3))
- + (name.length() >= 5 ? name.substring(4) : "");
- }
+ assert data.getters.size() == data.getterNames.size()
+ && data.getters.size() == data.propertyType.size();
+ Iterator<Method> getterIt = data.getters.iterator();
+ Iterator<String> nameIt = data.getterNames.iterator();
+ Iterator<PropertyType> typeIt = data.propertyType.iterator();
+ while (getterIt.hasNext()) {
+ Method getter = getterIt.next();
+ String name = nameIt.next();
+ PropertyType propertyType = typeIt.next();
// Use the shim to handle automatic wrapping
Object value;
@@ -184,42 +235,51 @@
MethodPropertyContext x = isUsingSimplePeer() ? new
BeanPropertyContext(
this, getter) : new GetterPropertyContext(this, getter);
- if (TypeUtils.isValueType(x.getType())) {
- if (visitor.visitValueProperty(name, value, x)) {
- }
- visitor.endVisitValueProperty(name, value, x);
- } else if (Collection.class.isAssignableFrom(x.getType())) {
- // Workaround for generics bug in mac javac 1.6.0_22
- @SuppressWarnings("rawtypes")
- AutoBean temp = AutoBeanUtils.getAutoBean((Collection) value);
- @SuppressWarnings("unchecked")
- AutoBean<Collection<?>> bean = (AutoBean<Collection<?>>) temp;
- if (visitor.visitCollectionProperty(name, bean, x)) {
- if (value != null) {
- ((ProxyAutoBean<?>) bean).traverse(visitor, ctx);
- }
- }
- visitor.endVisitCollectionProperty(name, bean, x);
- } else if (Map.class.isAssignableFrom(x.getType())) {
- // Workaround for generics bug in mac javac 1.6.0_22
- @SuppressWarnings("rawtypes")
- AutoBean temp = AutoBeanUtils.getAutoBean((Map) value);
- @SuppressWarnings("unchecked")
- AutoBean<Map<?, ?>> bean = (AutoBean<Map<?, ?>>) temp;
- if (visitor.visitMapProperty(name, bean, x)) {
- if (value != null) {
- ((ProxyAutoBean<?>) bean).traverse(visitor, ctx);
- }
- }
- visitor.endVisitMapProperty(name, bean, x);
- } else {
- ProxyAutoBean<?> bean = (ProxyAutoBean<?>)
AutoBeanUtils.getAutoBean(value);
- if (visitor.visitReferenceProperty(name, bean, x)) {
- if (value != null) {
- bean.traverse(visitor, ctx);
- }
- }
- visitor.endVisitReferenceProperty(name, bean, x);
+ switch (propertyType) {
+ case VALUE: {
+ if (visitor.visitValueProperty(name, value, x)) {
+ }
+ visitor.endVisitValueProperty(name, value, x);
+ break;
+ }
+ case COLLECTION: {
+ // Workaround for generics bug in mac javac 1.6.0_22
+ @SuppressWarnings("rawtypes")
+ AutoBean temp = AutoBeanUtils.getAutoBean((Collection) value);
+ @SuppressWarnings("unchecked")
+ AutoBean<Collection<?>> bean = (AutoBean<Collection<?>>) temp;
+ if (visitor.visitCollectionProperty(name, bean, x)) {
+ if (value != null) {
+ ((ProxyAutoBean<?>) bean).traverse(visitor, ctx);
+ }
+ }
+ visitor.endVisitCollectionProperty(name, bean, x);
+ break;
+ }
+ case MAP: {
+ // Workaround for generics bug in mac javac 1.6.0_22
+ @SuppressWarnings("rawtypes")
+ AutoBean temp = AutoBeanUtils.getAutoBean((Map) value);
+ @SuppressWarnings("unchecked")
+ AutoBean<Map<?, ?>> bean = (AutoBean<Map<?, ?>>) temp;
+ if (visitor.visitMapProperty(name, bean, x)) {
+ if (value != null) {
+ ((ProxyAutoBean<?>) bean).traverse(visitor, ctx);
+ }
+ }
+ visitor.endVisitMapProperty(name, bean, x);
+ break;
+ }
+ case REFERENCE: {
+ ProxyAutoBean<?> bean = (ProxyAutoBean<?>)
AutoBeanUtils.getAutoBean(value);
+ if (visitor.visitReferenceProperty(name, bean, x)) {
+ if (value != null) {
+ bean.traverse(visitor, ctx);
+ }
+ }
+ visitor.endVisitReferenceProperty(name, bean, x);
+ break;
+ }
}
}
}
@@ -231,16 +291,6 @@
Map<String, Object> getPropertyMap() {
return values;
}
-
- private List<Method> calculateGetters() {
- List<Method> toReturn = new ArrayList<Method>();
- for (Method method : beanType.getMethods()) {
- if (BeanMethod.GET.matches(method)) {
- toReturn.add(method);
- }
- }
- return Collections.unmodifiableList(toReturn);
- }
private T createShim() {
T toReturn = AutoBeanFactoryMagic.makeProxy(beanType, new
ShimHandler<T>(
=======================================
--- /releases/2.1/user/src/com/google/gwt/autobean/shared/ValueCodex.java
Wed Nov 24 06:41:26 2010
+++ /releases/2.1/user/src/com/google/gwt/autobean/shared/ValueCodex.java
Tue Nov 30 10:36:06 2010
@@ -237,8 +237,7 @@
private static <T> Type findType(Class<T> clazz) {
Type type = typesByClass.get(clazz);
if (type == null) {
- // Necessary due to lack of Class.isAssignable() in client-side
- if (clazz.getEnumConstants() != null) {
+ if (clazz.isEnum()) {
return Type.ENUM;
}
}
=======================================
---
/releases/2.1/user/src/com/google/gwt/autobean/shared/impl/StringQuoter.java
Wed Nov 24 06:41:26 2010
+++
/releases/2.1/user/src/com/google/gwt/autobean/shared/impl/StringQuoter.java
Tue Nov 30 10:36:06 2010
@@ -17,7 +17,8 @@
import com.google.gwt.autobean.server.impl.JsonSplittable;
import com.google.gwt.autobean.shared.Splittable;
-import com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter;
+
+import org.json.JSONObject;
/**
* This class has a super-source version with a client-only implementation.
@@ -27,7 +28,7 @@
* Create a quoted JSON string.
*/
public static String quote(String raw) {
- return ServerSerializationStreamWriter.escapeString(raw);
+ return JSONObject.quote(raw);
}
public static Splittable split(String payload) {
=======================================
---
/releases/2.1/user/src/com/google/gwt/requestfactory/server/RequestFactoryServlet.java
Wed Nov 24 06:41:26 2010
+++
/releases/2.1/user/src/com/google/gwt/requestfactory/server/RequestFactoryServlet.java
Tue Nov 30 10:36:06 2010
@@ -130,7 +130,6 @@
if (DUMP_PAYLOAD) {
System.out.println(">>> " + jsonRequestString);
}
- PrintWriter writer = response.getWriter();
try {
// Check that user is logged in before proceeding
@@ -146,6 +145,8 @@
response.setHeader("userId", String.format("%s",
userInfo.getId()));
response.setStatus(HttpServletResponse.SC_OK);
response.setContentType(RequestFactory.JSON_CONTENT_TYPE_UTF8);
+ // The Writer must be obtained after setting the content type
+ PrintWriter writer = response.getWriter();
writer.print(payload);
writer.flush();
}
=======================================
---
/releases/2.1/user/test/com/google/gwt/requestfactory/RequestFactoryJreSuite.java
Wed Nov 24 06:41:26 2010
+++
/releases/2.1/user/test/com/google/gwt/requestfactory/RequestFactoryJreSuite.java
Tue Nov 30 10:36:06 2010
@@ -21,6 +21,7 @@
import com.google.gwt.requestfactory.server.LocatorJreTest;
import
com.google.gwt.requestfactory.server.RequestFactoryInterfaceValidatorTest;
import com.google.gwt.requestfactory.server.RequestFactoryJreTest;
+import
com.google.gwt.requestfactory.server.RequestFactoryUnicodeEscapingJreTest;
import com.google.gwt.requestfactory.shared.impl.SimpleEntityProxyIdTest;
import junit.framework.Test;
@@ -40,6 +41,7 @@
suite.addTestSuite(SimpleEntityProxyIdTest.class);
suite.addTestSuite(RequestFactoryInterfaceValidatorTest.class);
suite.addTestSuite(RequestFactoryModelTest.class);
+ suite.addTestSuite(RequestFactoryUnicodeEscapingJreTest.class);
return suite;
}
}
=======================================
---
/releases/2.1/user/test/com/google/gwt/requestfactory/RequestFactorySuite.java
Wed Nov 24 06:41:26 2010
+++
/releases/2.1/user/test/com/google/gwt/requestfactory/RequestFactorySuite.java
Tue Nov 30 10:36:06 2010
@@ -20,6 +20,7 @@
import
com.google.gwt.requestfactory.client.RequestFactoryExceptionHandlerTest;
import com.google.gwt.requestfactory.client.RequestFactoryPolymorphicTest;
import com.google.gwt.requestfactory.client.RequestFactoryTest;
+import
com.google.gwt.requestfactory.client.RequestFactoryUnicodeEscapingTest;
import com.google.gwt.requestfactory.client.ui.EditorTest;
import com.google.gwt.requestfactory.shared.ComplexKeysTest;
import com.google.gwt.requestfactory.shared.LocatorTest;
@@ -40,6 +41,7 @@
suite.addTestSuite(RequestFactoryTest.class);
suite.addTestSuite(RequestFactoryExceptionHandlerTest.class);
suite.addTestSuite(RequestFactoryPolymorphicTest.class);
+ suite.addTestSuite(RequestFactoryUnicodeEscapingTest.class);
return suite;
}
}
=======================================
---
/releases/2.1/user/test/com/google/gwt/requestfactory/client/RequestFactoryTest.java
Wed Nov 24 12:53:58 2010
+++
/releases/2.1/user/test/com/google/gwt/requestfactory/client/RequestFactoryTest.java
Tue Nov 30 10:36:06 2010
@@ -730,6 +730,7 @@
* Make sure our stock RF logging service keeps receiving.
*/
public void testLoggingService() {
+ delayTestFinish(DELAY_TEST_FINISH);
String logRecordJson = new StringBuilder("{") //
.append("\"level\": \"ALL\", ") //
.append("\"loggerName\": \"logger\", ") //
@@ -2041,6 +2042,7 @@
* in a static method on UserInformation).
*/
public void testUserInfo() {
+ delayTestFinish(DELAY_TEST_FINISH);
req.userInformationRequest().getCurrentUserInformation("").fire(
new Receiver<UserInformationProxy>() {
@Override
@@ -2050,6 +2052,7 @@
assertEquals("Dummy User", response.getName());
assertEquals("", response.getLoginUrl());
assertEquals("", response.getLogoutUrl());
+ finishTestAndReset();
}
});
}
=======================================
---
/releases/2.1/user/test/com/google/gwt/requestfactory/shared/SimpleRequestFactory.java
Wed Nov 24 06:41:26 2010
+++
/releases/2.1/user/test/com/google/gwt/requestfactory/shared/SimpleRequestFactory.java
Tue Nov 30 10:36:06 2010
@@ -24,4 +24,6 @@
SimpleBarRequest simpleBarRequest();
SimpleFooRequest simpleFooRequest();
-}
+
+ UnicodeTestRequest unicodeTestRequest();
+}
=======================================
---
/releases/2.1/user/test/com/google/gwt/user/client/rpc/UnicodeEscapingTest.java
Thu Apr 1 18:18:56 2010
+++
/releases/2.1/user/test/com/google/gwt/user/client/rpc/UnicodeEscapingTest.java
Tue Nov 30 10:36:06 2010
@@ -108,7 +108,7 @@
}
/** start of current block being tested. */
- private int current;
+ protected int current;
@Override
public String getModuleName() {
@@ -234,7 +234,7 @@
NON_BMP_TEST_INCREMENT);
}
- private void clientToServerVerifyRange(final int start, final int end,
+ protected void clientToServerVerifyRange(final int start, final int end,
final int size, final int step) throws InvalidCharacterException {
current = start;
int blockEnd = Math.min(end, current + size);
@@ -274,7 +274,7 @@
});
}
- private void serverToClientVerify(final int start, final int end,
+ protected void serverToClientVerify(final int start, final int end,
final int size, final int step) {
current = start;
getService().getStringContainingCharacterRange(start,
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors