Updated Branches:
  refs/heads/wicket-1.5.x 14f824be5 -> df1df0e43

WICKET-4629 AbstractLink does not call getBody to get its body


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/df1df0e4
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/df1df0e4
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/df1df0e4

Branch: refs/heads/wicket-1.5.x
Commit: df1df0e431e4f78c362bea8469085002d8adfd20
Parents: 14f824b
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Tue Jun 26 11:28:00 2012 +0300
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Tue Jun 26 11:28:53 2012 +0300

----------------------------------------------------------------------
 .../wicket/markup/html/link/AbstractLink.java      |    7 ++-
 .../wicket/markup/html/link/AbstractLinkTest.java  |   34 +++++++++++++++
 2 files changed, 39 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/df1df0e4/wicket-core/src/main/java/org/apache/wicket/markup/html/link/AbstractLink.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/link/AbstractLink.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/link/AbstractLink.java
index 62ac136..86c2c89 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/link/AbstractLink.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/link/AbstractLink.java
@@ -170,10 +170,13 @@ public abstract class AbstractLink extends 
WebMarkupContainer
                        getResponse().write(getBeforeDisabledLink());
                }
 
-               if ((bodyModel != null) && (bodyModel.getObject() != null))
+               // Get a copy of the body model from the getBody() method. This 
method could be overridden.
+               IModel<?> tmpBodyModel = getBody();
+
+               if ((tmpBodyModel != null) && (tmpBodyModel.getObject() != 
null))
                {
                        replaceComponentTagBody(markupStream, openTag,
-                               
getDefaultModelObjectAsString(bodyModel.getObject()));
+                               
getDefaultModelObjectAsString(tmpBodyModel.getObject()));
                }
                else
                {

http://git-wip-us.apache.org/repos/asf/wicket/blob/df1df0e4/wicket-core/src/test/java/org/apache/wicket/markup/html/link/AbstractLinkTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/link/AbstractLinkTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/link/AbstractLinkTest.java
index 83ac5da..cda714f 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/link/AbstractLinkTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/link/AbstractLinkTest.java
@@ -16,8 +16,11 @@
  */
 package org.apache.wicket.markup.html.link;
 
+import java.util.concurrent.atomic.AtomicInteger;
+
 import org.apache.wicket.MockPageWithLink;
 import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.util.tester.TagTester;
 import org.junit.Assert;
@@ -51,4 +54,35 @@ public class AbstractLinkTest extends WicketTestCase
                Assert.assertEquals(linkBody, tagTester.getValue());
        }
 
+       /**
+        * Tests that the {@link AbstractLink} uses the {@link 
AbstractLink#getBody()} to get its body. This
+        * method can be overridden to provide a dynamic model.
+        */
+       @Test
+       public void testRenderUsingGetBody()
+       {
+               final AtomicInteger counter = new AtomicInteger(0);
+
+               MockPageWithLink mockPageWithLink = new MockPageWithLink();
+               AbstractLink link = new AbstractLink("link")
+               {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       public IModel<?> getBody()
+                       {
+                               return Model.of(counter.getAndIncrement());
+                       }
+               };
+               link.setMarkupId("link");
+               mockPageWithLink.add(link);
+
+               tester.startPage(mockPageWithLink);
+               TagTester tagTester = tester.getTagById("link");
+               Assert.assertEquals("0", tagTester.getValue());
+
+               tester.startPage(mockPageWithLink);
+               tagTester = tester.getTagById("link");
+               Assert.assertEquals("1", tagTester.getValue());
+       }
 }

Reply via email to