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

thiagohp pushed a commit to branch feature/es-module-support
in repository https://gitbox.apache.org/repos/asf/tapestry-5.git


The following commit(s) were added to refs/heads/feature/es-module-support by 
this push:
     new cd121bc5e TAP5-2803: supporting Number and Boolean in ES module's 
.with()
cd121bc5e is described below

commit cd121bc5ecc276b0b3725806c3ad06c0a616c8ce
Author: Thiago H. de Paula Figueiredo <thi...@arsmachina.com.br>
AuthorDate: Wed Apr 2 18:06:55 2025 -0300

    TAP5-2803: supporting Number and Boolean in ES module's .with()
    
    plus tests to verify all values were passed correctly
---
 .../services/javascript/EsModuleManagerImpl.java         | 16 ++++++++++------
 .../services/javascript/EsModuleInitialization.java      |  4 +---
 .../apache/tapestry5/integration/app1/EsModuleTests.java | 12 ++++++++++++
 .../tapestry5/integration/app1/pages/EsModuleDemo.java   |  7 ++++++-
 .../services/javascript/EsModuleManagerImplTest.java     |  8 ++++++--
 .../assets/es-modules/parameter-type-default-export.js   | 14 ++++++++++++++
 .../tapestry5/integration/app1/pages/EsModuleDemo.tml    |  1 +
 7 files changed, 50 insertions(+), 12 deletions(-)

diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImpl.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImpl.java
index a36385c33..9f9bf5aea 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImpl.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImpl.java
@@ -31,7 +31,6 @@ import org.apache.tapestry5.ioc.annotations.PostInjection;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.services.ClasspathMatcher;
 import org.apache.tapestry5.ioc.services.ClasspathScanner;
-import org.apache.tapestry5.json.JSONArray;
 import org.apache.tapestry5.json.JSONCollection;
 import org.apache.tapestry5.json.JSONLiteral;
 import org.apache.tapestry5.json.JSONObject;
@@ -45,6 +44,8 @@ import 
org.apache.tapestry5.services.javascript.ImportPlacement;
 public class EsModuleManagerImpl implements EsModuleManager
 {
 
+    private static final String GENERIC_IMPORTED_VARIABLE = "m";
+
     /**
      * Name of the JSON object property containing the imports in an import 
map.
      */
@@ -242,15 +243,14 @@ public class EsModuleManagerImpl implements 
EsModuleManager
                         "import %s from '%s';\n"
                         + "%s(%s);";
                 
-                final String importName = functionName != null ? functionName 
: "m";
+                final String importName = functionName != null ? functionName 
: GENERIC_IMPORTED_VARIABLE;
                 final String importDeclaration = functionName != null ? 
                         "{ " + functionName + " }": 
-                            "m";
+                            GENERIC_IMPORTED_VARIABLE;
                 
-                final String code = String.format(moduleFunctionCallFormat, 
+                
moduleFunctionCall.text(String.format(moduleFunctionCallFormat, 
                         importDeclaration, moduleId, importName,
-                        convertToJsFunctionParameters(arguments, compactJSON));
-                moduleFunctionCall.text(code);
+                        convertToJsFunctionParameters(arguments, 
compactJSON)));
                 
                 writeAttributes(moduleFunctionCall, init);
                 
@@ -305,6 +305,10 @@ public class EsModuleManagerImpl implements EsModuleManager
         {
             result = "'" + object.toString() + "'";
         }
+        else if (object instanceof Number || object instanceof Boolean)
+        {
+            result = object.toString();
+        }
         else if (object instanceof JSONCollection)
         {
             result = ((JSONCollection) object).toString(compactJSON);
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/EsModuleInitialization.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/EsModuleInitialization.java
index 6647f2e21..f56479398 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/EsModuleInitialization.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/EsModuleInitialization.java
@@ -84,9 +84,7 @@ public interface EsModuleInitialization extends 
AbstractInitialization<EsModuleI
     
     /**
      * Specifies the arguments to be passed to the function. Often, just a 
single {@link org.apache.tapestry5.json.JSONObject}
-     * is passed. When multiple Initializations exist with the same function 
name (or no function name), and no arguments,
-     * they are coalesced into a single EsModuleInitialization: it is assumed 
that an initialization with no parameters needs to
-     * only be invoked once.
+     * is passed. 
      *
      * @param arguments
      *         any number of values. Each value may be one of: null, String, 
Boolean, Number,
diff --git 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/EsModuleTests.java
 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/EsModuleTests.java
index 32e5311de..786d9ce0b 100644
--- 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/EsModuleTests.java
+++ 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/EsModuleTests.java
@@ -178,6 +178,18 @@ public class EsModuleTests extends App1TestCase
                 "Parameterless default export!");
     }
     
+    /**
+     * Tests using whether parameter types are correctly passed to JS.
+     */
+    @Test
+    public void parameter_types() throws InterruptedException
+    {
+        openLinks(PAGE_NAME);
+        assertEquals(
+                getText("parameter-type-default-export-message"), 
+                "Parameter types passed correctly!");
+    }
+    
     private void assertModulesDefinedByGlobalCallbacks(JSONObject importMap) {
         assertModuleUrl(NON_OVERRIDDEN_ES_MODULE_ID, 
NON_OVERRIDDEN_ES_MODULE_URL, importMap);
         assertModuleUrl(OVERRIDDEN_ES_MODULE_ID, OVERRIDDEN_ES_MODULE_NEW_URL, 
importMap);
diff --git 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/EsModuleDemo.java
 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/EsModuleDemo.java
index bc69029e2..49c38710d 100644
--- 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/EsModuleDemo.java
+++ 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/EsModuleDemo.java
@@ -15,9 +15,10 @@ package org.apache.tapestry5.integration.app1.pages;
 import org.apache.tapestry5.annotations.Import;
 import org.apache.tapestry5.annotations.Property;
 import org.apache.tapestry5.annotations.SetupRender;
-import org.apache.tapestry5.integration.app1.EsModuleTests;
 import org.apache.tapestry5.integration.app1.services.AppModule;
 import org.apache.tapestry5.ioc.annotations.Inject;
+import org.apache.tapestry5.json.JSONArray;
+import org.apache.tapestry5.json.JSONObject;
 import org.apache.tapestry5.services.javascript.EsModuleConfigurationCallback;
 import org.apache.tapestry5.services.javascript.ImportPlacement;
 import org.apache.tapestry5.services.javascript.JavaScriptSupport;
@@ -67,6 +68,10 @@ public class EsModuleDemo
         javaScriptSupport.importEsModule("parameterless-default-export")
             .with();
 
+        javaScriptSupport.importEsModule("parameter-type-default-export")
+            .with(null, true, false, Math.PI * Math.E, "string", "jsonLiteral",
+                    new JSONObject("key", "value"), new JSONArray(1, "2"));
+
         if (overrideEsModuleImportAgain != null && overrideEsModuleImportAgain)
         {
             javaScriptSupport.addEsModuleConfigurationCallback(
diff --git 
a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImplTest.java
 
b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImplTest.java
index b357f9e41..0e41bc12e 100644
--- 
a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImplTest.java
+++ 
b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImplTest.java
@@ -27,7 +27,7 @@ public class EsModuleManagerImplTest
     private static final JSONArray JSON_ARRAY = new JSONArray("1", "true");
     private static JSONObject JSON_OBJECT = new JSONObject("something", 
"else", "array",
             JSON_ARRAY, "literal", JSON_LITERAL);
-    
+    private static Number NUMBER = Math.PI * Math.E;
 
     @Test
     public void test_null_arguments()
@@ -49,6 +49,10 @@ public class EsModuleManagerImplTest
         assertEquals(convert(new Object[] {null}, false), null);
         
         assertEquals(convert(new Object[] {STRING}, false), quote(STRING));
+        
+        assertEquals(convert(new Object[] {NUMBER}, false), NUMBER.toString());
+        assertEquals(convert(new Object[] {Boolean.TRUE}, false), 
Boolean.TRUE.toString());
+        assertEquals(convert(new Object[] {Boolean.FALSE}, false), 
Boolean.FALSE.toString());
 
         assertEquals(convert(new Object[] {JSON_LITERAL}, false), 
quote(JSON_LITERAL.toString()));
 
@@ -57,7 +61,7 @@ public class EsModuleManagerImplTest
 
         assertEquals(convert(new Object[] {JSON_OBJECT}, false), 
JSON_OBJECT.toString(false));
         assertEquals(convert(new Object[] {JSON_OBJECT}, true), 
JSON_OBJECT.toString(true));
-
+        
     }
     
     @Test
diff --git 
a/tapestry-core/src/test/resources/META-INF/assets/es-modules/parameter-type-default-export.js
 
b/tapestry-core/src/test/resources/META-INF/assets/es-modules/parameter-type-default-export.js
new file mode 100644
index 000000000..e4c3272e6
--- /dev/null
+++ 
b/tapestry-core/src/test/resources/META-INF/assets/es-modules/parameter-type-default-export.js
@@ -0,0 +1,14 @@
+export default function(nullValue, trueValue, falseValue, piTimesE, 
stringValue, jsonLiteralValue,
+       objectValue, arrayValue) {
+               
+       if (nullValue === null && (typeof trueValue === "boolean") && trueValue 
=== true &&
+               (typeof falseValue === "boolean") && falseValue === false &&
+               (typeof piTimesE === "number") && piTimesE === Math.PI * Math.E 
&&
+               (typeof jsonLiteralValue === "string") && jsonLiteralValue === 
"jsonLiteral" &&
+               (typeof objectValue === "object") && objectValue.key === 
"value" &&
+               arrayValue.constructor === Array && arrayValue[0] === 1 && 
arrayValue[1] === "2") {
+                       
+               
document.getElementById("parameter-type-default-export-message").innerHTML = 
"Parameter types passed correctly!";
+               
+       }
+}
\ No newline at end of file
diff --git 
a/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/pages/EsModuleDemo.tml
 
b/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/pages/EsModuleDemo.tml
index df08c79ed..702834fb8 100644
--- 
a/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/pages/EsModuleDemo.tml
+++ 
b/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/pages/EsModuleDemo.tml
@@ -22,6 +22,7 @@
        <p id="${DEFAULT_EXPORT_MESSAGE}"/>
        <p id="non-default-export-message"/>
        <p id="parameterless-default-export-message"/>
+       <p id="parameter-type-default-export-message"/>
        
        <p>
                Import map:

Reply via email to