You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bval.apache.org by ta...@apache.org on 2023/02/08 15:00:02 UTC

[bval] branch master updated: fixed tests the right way

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

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


The following commit(s) were added to refs/heads/master by this push:
     new b89a633  fixed tests the right way
b89a633 is described below

commit b89a6331baffce920c87269f1b4e4b1f10a6a55a
Author: Thomas Andraschko <ta...@apache.org>
AuthorDate: Wed Feb 8 15:59:55 2023 +0100

    fixed tests the right way
---
 .../bval/jsr/DefaultMessageInterpolatorTest.java   |  9 ++-
 .../apache/bval/jsr/DelegateExpressionFactory.java | 93 ++++++++++++++++++++++
 .../META-INF/services/jakarta.el.ExpressionFactory | 17 ++++
 3 files changed, 115 insertions(+), 4 deletions(-)

diff --git a/bval-jsr/src/test/java/org/apache/bval/jsr/DefaultMessageInterpolatorTest.java b/bval-jsr/src/test/java/org/apache/bval/jsr/DefaultMessageInterpolatorTest.java
index 5ad3929..bd8e744 100644
--- a/bval-jsr/src/test/java/org/apache/bval/jsr/DefaultMessageInterpolatorTest.java
+++ b/bval-jsr/src/test/java/org/apache/bval/jsr/DefaultMessageInterpolatorTest.java
@@ -93,15 +93,16 @@ public class DefaultMessageInterpolatorTest {
         Thread.currentThread().setContextClassLoader(new URLClassLoader(new URL[] {}, originalClassLoader));
 
         try {
-            Class<?> elFactoryClass;
             if (elFactory == null) {
-                elFactoryClass = ExpressionFactory.class;
                 System.clearProperty(ExpressionFactory.class.getName());
             } else {
-                elFactoryClass = Class.forName(elFactory);
+                Class<?> elFactoryClass = Class.forName(elFactory);
                 System.setProperty(ExpressionFactory.class.getName(), elFactory);
+
+                Class<? extends ExpressionFactory> usedImpl =
+                        ((DelegateExpressionFactory) ExpressionFactory.newInstance()).getWrapped().getClass();
+                assertTrue(elFactoryClass == usedImpl);
             }
-            assertTrue(elFactoryClass.isInstance(ExpressionFactory.newInstance()));
             elAvailable = true;
         } catch (Exception e) {
             elAvailable = false;
diff --git a/bval-jsr/src/test/java/org/apache/bval/jsr/DelegateExpressionFactory.java b/bval-jsr/src/test/java/org/apache/bval/jsr/DelegateExpressionFactory.java
new file mode 100644
index 0000000..24742c3
--- /dev/null
+++ b/bval-jsr/src/test/java/org/apache/bval/jsr/DelegateExpressionFactory.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you 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 org.apache.bval.jsr;
+
+import jakarta.el.*;
+
+import java.lang.reflect.Method;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.ServiceLoader;
+
+/**
+ * EL5.0 ExpressionFactory lookups the ServiceLoader before the system property
+ * In our tests we have at least 2 EL impls and DefaultMessageInterpolatorTest needs a replaceable ExpressionFactory
+ * So this a wrapper, which checks the system property first and then asking the ServiceLoader
+ */
+public class DelegateExpressionFactory extends ExpressionFactory {
+
+    public DelegateExpressionFactory()  {
+
+    }
+
+    @Override
+    public ValueExpression createValueExpression(ELContext context, String expression, Class<?> expectedType) {
+        return getWrapped().createValueExpression(context, expression, expectedType);
+    }
+
+    @Override
+    public ValueExpression createValueExpression(Object instance, Class<?> expectedType) {
+        return getWrapped().createValueExpression(instance, expectedType);
+    }
+
+    @Override
+    public MethodExpression createMethodExpression(ELContext context, String expression, Class<?> expectedReturnType, Class<?>[] expectedParamTypes) {
+        return getWrapped().createMethodExpression(context, expression, expectedReturnType, expectedParamTypes);
+    }
+
+    @Override
+    public <T> T coerceToType(Object obj, Class<T> targetType) {
+        return getWrapped().coerceToType(obj, targetType);
+    }
+
+    @Override
+    public ELResolver getStreamELResolver() {
+        return getWrapped().getStreamELResolver();
+    }
+
+    @Override
+    public Map<String, Method> getInitFunctionMap() {
+        return getWrapped().getInitFunctionMap();
+    }
+
+    public ExpressionFactory getWrapped()
+    {
+        String systemProperty = System.getProperty(ExpressionFactory.class.getName());
+        if (systemProperty != null)  {
+            try {
+                return (ExpressionFactory) Class.forName(systemProperty).getConstructor().newInstance();
+            } catch (Exception e) {
+                return null;
+            }
+        }
+
+        try {
+            ServiceLoader<ExpressionFactory> serviceLoader = ServiceLoader.load(ExpressionFactory.class,
+                    Thread.currentThread().getContextClassLoader());
+            Iterator<ExpressionFactory> iter = serviceLoader.iterator();
+            while (iter.hasNext()) {
+                ExpressionFactory service = iter.next();
+                if (service != null && service.getClass() != this.getClass()) {
+                    return service;
+                }
+            }
+        } catch (Exception ex) {
+        }
+
+        return null;
+    }
+}
diff --git a/bval-jsr/src/test/resources/META-INF/services/jakarta.el.ExpressionFactory b/bval-jsr/src/test/resources/META-INF/services/jakarta.el.ExpressionFactory
new file mode 100644
index 0000000..8b1ad5e
--- /dev/null
+++ b/bval-jsr/src/test/resources/META-INF/services/jakarta.el.ExpressionFactory
@@ -0,0 +1,17 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.
+org.apache.bval.jsr.DelegateExpressionFactory