You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by ad...@apache.org on 2022/06/29 14:12:26 UTC

[wicket] branch master updated: WICKET-6991 using a separate StringBuilder for OnLoadHeaderItemS

This is an automated email from the ASF dual-hosted git repository.

adelbene pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git


The following commit(s) were added to refs/heads/master by this push:
     new 3e211ad8e9 WICKET-6991 using a separate StringBuilder for OnLoadHeaderItemS
3e211ad8e9 is described below

commit 3e211ad8e904fc1b38f8982d480d9b0b60153304
Author: Andrea Del Bene <ad...@apache.org>
AuthorDate: Wed Jun 29 16:07:18 2022 +0200

    WICKET-6991 using a separate StringBuilder for OnLoadHeaderItemS
---
 .../wicket/markup/head/ResourceAggregator.java     | 32 ++++++++++----------
 .../aggregator/ResourceAggregatorTest.java         | 34 ++++++++++++++++++++++
 2 files changed, 51 insertions(+), 15 deletions(-)

diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/head/ResourceAggregator.java b/wicket-core/src/main/java/org/apache/wicket/markup/head/ResourceAggregator.java
index 963a5d829b..614678431b 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/head/ResourceAggregator.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/head/ResourceAggregator.java
@@ -347,43 +347,45 @@ public class ResourceAggregator extends DecoratingHeaderResponse
 	private void renderCombinedEventScripts()
 	{
 		// make a rough estimate of the size to which this StringBuilder will grow
-		int length = domReadyItemsToBeRendered.size() * 256;
-		StringBuilder combinedScript = new StringBuilder(length);
+		int domReadyLength = domReadyItemsToBeRendered.size() * 256;
+		StringBuilder domReadScript = new StringBuilder(domReadyLength);
 		for (HeaderItem curItem : domReadyItemsToBeRendered)
 		{
 			if (markItemRendered(curItem))
 			{
-				combinedScript.append('\n');
+				domReadScript.append('\n');
 				if (curItem instanceof OnDomReadyHeaderItem)
 				{
-					combinedScript.append(((OnDomReadyHeaderItem)curItem).getJavaScript());
+					domReadScript.append(((OnDomReadyHeaderItem)curItem).getJavaScript());
 				} else if (curItem instanceof OnEventHeaderItem)
 				{
-					combinedScript.append(((OnEventHeaderItem)curItem).getCompleteJavaScript());
+					domReadScript.append(((OnEventHeaderItem)curItem).getCompleteJavaScript());
 				}
-				combinedScript.append(';');
+				domReadScript.append(';');
 			}
 		}
-		if (combinedScript.length() > 0)
+		if (domReadScript.length() > 0)
 		{
-			combinedScript.append("\nWicket.Event.publish(Wicket.Event.Topic.AJAX_HANDLERS_BOUND);\n");
-			getRealResponse().render(OnDomReadyHeaderItem.forScript(combinedScript));
+			domReadScript.append("\nWicket.Event.publish(Wicket.Event.Topic.AJAX_HANDLERS_BOUND);\n");
+			getRealResponse().render(OnDomReadyHeaderItem.forScript(domReadScript));
 		}
 
-		combinedScript.setLength(0);
+		int onLoadLength = loadItemsToBeRendered.size() * 256;
+        StringBuilder onLoadScript = new StringBuilder(onLoadLength);
+		
 		for (OnLoadHeaderItem curItem : loadItemsToBeRendered)
 		{
 			if (markItemRendered(curItem))
 			{
-				combinedScript.append('\n');
-				combinedScript.append(curItem.getJavaScript());
-				combinedScript.append(';');
+			    onLoadScript.append('\n');
+			    onLoadScript.append(curItem.getJavaScript());
+			    onLoadScript.append(';');
 			}
 		}
-		if (combinedScript.length() > 0)
+		if (onLoadScript.length() > 0)
 		{
 			getRealResponse().render(
-				OnLoadHeaderItem.forScript(combinedScript.append('\n')));
+				OnLoadHeaderItem.forScript(onLoadScript.append('\n')));
 		}
 	}
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/resource/aggregator/ResourceAggregatorTest.java b/wicket-core/src/test/java/org/apache/wicket/resource/aggregator/ResourceAggregatorTest.java
index 5bddd9c778..bc5e762416 100644
--- a/wicket-core/src/test/java/org/apache/wicket/resource/aggregator/ResourceAggregatorTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/resource/aggregator/ResourceAggregatorTest.java
@@ -19,6 +19,7 @@ package org.apache.wicket.resource.aggregator;
 import static org.apache.wicket.markup.head.JavaScriptHeaderItem.forReference;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -26,6 +27,8 @@ import java.util.List;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.markup.head.HeaderItem;
+import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
+import org.apache.wicket.markup.head.OnLoadHeaderItem;
 import org.apache.wicket.markup.head.PriorityHeaderItem;
 import org.apache.wicket.markup.head.ResourceAggregator;
 import org.apache.wicket.request.resource.ResourceReference;
@@ -274,4 +277,35 @@ class ResourceAggregatorTest extends WicketTestCase
 		aggregator.render(new PriorityHeaderItem(forReference(new ResourceReferenceA())));
 		assertItems(new PriorityHeaderItem(bundleAB), forReference(new ResourceReferenceX()));
 	}
+	
+	/**
+	 *  Test rendering for onDomReady and onLoad scripts
+	 */
+	
+	@Test
+	void testCombinedScripts()
+    {
+        String onLoadScript = ";alert('Hello!');";
+        String onReadyScript = ";alert('Ready!');";
+        
+        aggregator.render(OnDomReadyHeaderItem.forScript(onReadyScript));
+        aggregator.render(OnLoadHeaderItem.forScript(onLoadScript));
+        aggregator.close();
+        
+        List<HeaderItem> items = responseStub.getItems();
+        
+        OnDomReadyHeaderItem onDomReadyItem = (OnDomReadyHeaderItem) items.stream()
+            .filter(item -> (item instanceof OnDomReadyHeaderItem))
+            .findFirst().get();
+           
+        String onReadyItemScript = onDomReadyItem.getJavaScript().toString();
+        assertTrue(onReadyItemScript.contains(onReadyScript));
+        
+        OnLoadHeaderItem onLoadItem = (OnLoadHeaderItem) items.stream()
+            .filter(item -> (item instanceof OnLoadHeaderItem))
+            .findFirst().get();
+        
+        String onLoadItemScript = onLoadItem.getJavaScript().toString();
+        assertTrue(onLoadItemScript.contains(onLoadScript));
+    }
 }