Reviewers: rjrjr, bobv,
Description:
Issue 6076: EditorDelegate's getPath wrong when subeditor referenced
with dotted @Path annotation
http://code.google.com/p/google-web-toolkit/issues/detail?id=6076
AbstractEditorDriverGenerator incorrectly used getPropertyName instead
of getDeclaredPath to generate the subdelegate's path.
Please review this at http://gwt-code-reviews.appspot.com/1364801/
Affected files:
M user/src/com/google/gwt/editor/rebind/AbstractEditorDriverGenerator.java
M user/test/com/google/gwt/editor/client/SimpleBeanEditorTest.java
M user/test/com/google/gwt/editor/client/impl/DelegateMapTest.java
Index:
user/src/com/google/gwt/editor/rebind/AbstractEditorDriverGenerator.java
diff --git
a/user/src/com/google/gwt/editor/rebind/AbstractEditorDriverGenerator.java
b/user/src/com/google/gwt/editor/rebind/AbstractEditorDriverGenerator.java
index
fdb0427f797ca5d013ec2f3668e437b4e0c1bee2..e0c8b23e8a10c0b6d871af50cf134c9a260b86f0
100644
---
a/user/src/com/google/gwt/editor/rebind/AbstractEditorDriverGenerator.java
+++
b/user/src/com/google/gwt/editor/rebind/AbstractEditorDriverGenerator.java
@@ -175,7 +175,7 @@ public abstract class AbstractEditorDriverGenerator
extends Generator {
sw.indent();
sw.println("%s = new %s();", delegateFields.get(d),
subDelegateType);
sw.println("addSubDelegate(%s, appendPath(\"%s\"), editor.%s);",
- delegateFields.get(d), d.getPropertyName(),
+ delegateFields.get(d), d.getDeclaredPath(),
d.getSimpleExpression());
sw.outdent();
sw.println("}");
Index: user/test/com/google/gwt/editor/client/SimpleBeanEditorTest.java
diff --git
a/user/test/com/google/gwt/editor/client/SimpleBeanEditorTest.java
b/user/test/com/google/gwt/editor/client/SimpleBeanEditorTest.java
index
66d7c9ff84c0074dfaef1d4a13d56b4e06b875b0..da3ae169978b6d2c610fa0b72ef10ea3bb80db4c
100644
--- a/user/test/com/google/gwt/editor/client/SimpleBeanEditorTest.java
+++ b/user/test/com/google/gwt/editor/client/SimpleBeanEditorTest.java
@@ -142,6 +142,16 @@ public class SimpleBeanEditorTest extends GWTTestCase {
SimpleBeanEditorDriver<Person, PersonEditorWithLeafAddressEditor> {
}
+ class PersonEditorWithManagerNameWithDelegate implements Editor<Person> {
+ @Path("manager.name")
+ SimpleEditorWithDelegate<String> managerName = new
SimpleEditorWithDelegate<String>(
+ UNINITIALIZED);
+ }
+
+ interface PersonEditorWithManagerNameWithDelegateDriver extends
+ SimpleBeanEditorDriver<Person,
PersonEditorWithManagerNameWithDelegate> {
+ }
+
class PersonEditorWithMultipleBindings implements Editor<Person> {
@Editor.Path("address")
AddressEditorPartOne one = new AddressEditorPartOne();
@@ -217,6 +227,20 @@ public class SimpleBeanEditorTest extends GWTTestCase {
SimpleBeanEditorDriver<PersonWithList, PersonWithListEditor> {
}
+ class SimpleEditorWithDelegate<T> extends SimpleEditor<T> implements
+ HasEditorDelegate<T> {
+ EditorDelegate<T> delegate;
+
+ public SimpleEditorWithDelegate(T value) {
+ super(value);
+ }
+
+ @Override
+ public void setDelegate(EditorDelegate<T> delegate) {
+ this.delegate = delegate;
+ }
+ }
+
class ValueAwareAddressEditor extends AddressEditor implements
ValueAwareEditor<Address> {
int flushCalled;
@@ -321,6 +345,15 @@ public class SimpleBeanEditorTest extends GWTTestCase {
assertEquals("Should see this", person.getName());
}
+ public void testDelegatePath() {
+ PersonEditorWithManagerNameWithDelegate editor = new
PersonEditorWithManagerNameWithDelegate();
+ PersonEditorWithManagerNameWithDelegateDriver driver =
GWT.create(PersonEditorWithManagerNameWithDelegateDriver.class);
+ driver.initialize(editor);
+ driver.edit(person);
+
+ assertEquals("manager.name", editor.managerName.delegate.getPath());
+ }
+
public void testEditorWithNullSubEditor() {
PersonEditor editor = new PersonEditor();
editor.addressEditor = null;
Index: user/test/com/google/gwt/editor/client/impl/DelegateMapTest.java
diff --git
a/user/test/com/google/gwt/editor/client/impl/DelegateMapTest.java
b/user/test/com/google/gwt/editor/client/impl/DelegateMapTest.java
index
7391e0544b9a10c9da8063b837fc69b75e9137c2..3b43c2115639505ecdc753e61cc3847183e13779
100644
--- a/user/test/com/google/gwt/editor/client/impl/DelegateMapTest.java
+++ b/user/test/com/google/gwt/editor/client/impl/DelegateMapTest.java
@@ -19,6 +19,8 @@ import com.google.gwt.core.client.GWT;
import com.google.gwt.editor.client.Address;
import com.google.gwt.editor.client.AddressEditor;
import com.google.gwt.editor.client.Editor;
+import com.google.gwt.editor.client.EditorDelegate;
+import com.google.gwt.editor.client.HasEditorDelegate;
import com.google.gwt.editor.client.IsEditor;
import com.google.gwt.editor.client.Person;
import com.google.gwt.editor.client.SimpleBeanEditorDriver;
@@ -46,13 +48,27 @@ public class DelegateMapTest extends GWTTestCase {
AddressCoEditorView addressEditor = new AddressCoEditorView();
SimpleEditor<String> name = SimpleEditor.of("uninitialized");
@Path("manager.name")
- SimpleEditor<String> managerName = SimpleEditor.of("uninitialized");
+ SimpleEditorWithDelegate<String> managerName = new
SimpleEditorWithDelegate<String>(
+ "uninitialized");
}
interface PersonEditorWithCoAddressEditorViewDriver extends
SimpleBeanEditorDriver<Person, PersonEditorWithCoAddressEditorView> {
}
+ class SimpleEditorWithDelegate<T> extends SimpleEditor<T> implements
+ HasEditorDelegate<T> {
+ EditorDelegate<T> delegate;
+
+ public SimpleEditorWithDelegate(T value) {
+ super(value);
+ }
+
+ public void setDelegate(EditorDelegate<T> delegate) {
+ this.delegate = delegate;
+ }
+ }
+
@Override
public String getModuleName() {
return "com.google.gwt.editor.Editor";
@@ -85,6 +101,7 @@ public class DelegateMapTest extends GWTTestCase {
map = DelegateMap.of(driver, DelegateMap.IDENTITY);
}
+ @SuppressWarnings("unchecked")
public void test() {
// Test by-object
assertEquals(Arrays.asList(editor), editors(map, person));
@@ -97,6 +114,7 @@ public class DelegateMapTest extends GWTTestCase {
assertEquals(
Arrays.asList(editor.addressEditor.addressEditor,
editor.addressEditor),
editors(map, "address"));
+ assertEquals(Arrays.asList(editor.managerName),
editors(map, "manager.name"));
}
public void testSimplePath() {
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors