Skip to content

Commit

Permalink
#575: update FacesConverterIT to also test resource dependencies and fix
Browse files Browse the repository at this point in the history
failing IT in TomEE, it was failing in MyFaces because of the converters
extending from Converter<String> instead of Converter<Object>.
  • Loading branch information
BalusC committed Aug 29, 2020
1 parent 1bed275 commit 29587f2
Show file tree
Hide file tree
Showing 13 changed files with 243 additions and 10 deletions.
5 changes: 5 additions & 0 deletions src/test/java/org/omnifaces/test/OmniFacesIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import static org.jboss.arquillian.graphene.Graphene.waitGui;
import static org.jboss.shrinkwrap.api.ShrinkWrap.create;
import static org.omnifaces.test.OmniFacesIT.FacesConfig.withMessageBundle;
import static org.omnifaces.util.Utils.isOneOf;

import java.io.File;
import java.net.URL;
Expand Down Expand Up @@ -112,6 +113,10 @@ protected static boolean isTomee() {
return "tomee".equals(System.getProperty("profile.id"));
}

protected static boolean isMojarra() {
return isOneOf(System.getProperty("profile.id"), "wildfly", "payara");
}

protected static <T extends OmniFacesIT> WebArchive createWebArchive(Class<T> testClass) {
return buildWebArchive(testClass).createDeployment();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,17 +29,69 @@ public class FacesConverterIT extends OmniFacesIT {
@FindBy(id="facesConverterITManagedConverter")
private WebElement facesConverterITManagedConverter;

@FindBy(id="facesConverterITConverterResourceDependency")
private WebElement facesConverterITConverterResourceDependency;

@FindBy(id="facesConverterITManagedConverterResourceDependency")
private WebElement facesConverterITManagedConverterResourceDependency;

@FindBy(id="facesConverterITExtendedConverter")
private WebElement facesConverterITExtendedConverter;

@FindBy(id="facesConverterITExtendedManagedConverter")
private WebElement facesConverterITExtendedManagedConverter;

@FindBy(id="facesConverterITExtendedConverterResourceDependency")
private WebElement facesConverterITExtendedConverterResourceDependency;

@FindBy(id="facesConverterITExtendedManagedConverterResourceDependency")
private WebElement facesConverterITExtendedManagedConverterResourceDependency;

@FindBy(id="loaded")
private WebElement loaded;

@Deployment(testable=false)
public static WebArchive createDeployment() {
return createWebArchive(FacesConverterIT.class);
}

@Test
public void test() {
waitUntilTextContent(loaded); // Wait until "load" event is finished because of resource dependencies.

assertTrue("EJB is injected in facesConverterITConverter", facesConverterITConverter.getText().startsWith("FacesConverterITSomeEJB"));
assertTrue("ResourceDependency is injected in facesConverterITConverter", facesConverterITConverterResourceDependency.getText().equals("facesConverterITConverterResourceDependency"));
assertTrue("EJB is injected in facesConverterITManagedConverter", facesConverterITManagedConverter.getText().startsWith("FacesConverterITSomeEJB"));

if (!isMojarra()) { // Mojarra bugs on this.
assertTrue("ResourceDependency is injected in facesConverterITManagedConverter", facesConverterITManagedConverterResourceDependency.getText().equals("facesConverterITManagedConverterResourceDependency"));
}

assertTrue("EJB is injected in facesConverterITExtendedConverter", facesConverterITExtendedConverter.getText().startsWith("FacesConverterITSomeEJB"));
assertTrue("ResourceDependency is injected in facesConverterITExtendedConverter", facesConverterITExtendedConverterResourceDependency.getText().equals("facesConverterITExtendedConverterResourceDependency"));
assertTrue("EJB is injected in facesConverterITExtendedManagedConverter", facesConverterITExtendedManagedConverter.getText().startsWith("FacesConverterITSomeEJB"));

if (!isMojarra()) { // Mojarra bugs on this.
assertTrue("ResourceDependency is injected in facesConverterITExtendedManagedConverter", facesConverterITExtendedManagedConverterResourceDependency.getText().equals("facesConverterITExtendedManagedConverterResourceDependency"));
}

init(); // This basically refreshes the page.
waitUntilTextContent(loaded);

assertTrue("EJB is still injected in facesConverterITConverter after page refresh", facesConverterITConverter.getText().startsWith("FacesConverterITSomeEJB"));
assertTrue("ResourceDependency is still injected in facesConverterITConverter after page refresh", facesConverterITConverterResourceDependency.getText().equals("facesConverterITConverterResourceDependency"));
assertTrue("EJB is still injected in facesConverterITManagedConverter after page refresh", facesConverterITManagedConverter.getText().startsWith("FacesConverterITSomeEJB"));

if (!isMojarra()) { // Mojarra bugs on this.
assertTrue("ResourceDependency is still injected in facesConverterITManagedConverter after page refresh", facesConverterITManagedConverterResourceDependency.getText().equals("facesConverterITManagedConverterResourceDependency"));
}

assertTrue("EJB is still injected in facesConverterITExtendedConverter after page refresh", facesConverterITExtendedConverter.getText().startsWith("FacesConverterITSomeEJB"));
assertTrue("ResourceDependency is still injected in facesConverterITExtendedConverter after page refresh", facesConverterITExtendedConverterResourceDependency.getText().equals("facesConverterITExtendedConverterResourceDependency"));
assertTrue("EJB is still injected in facesConverterITExtendedManagedConverter after page refresh", facesConverterITExtendedManagedConverter.getText().startsWith("FacesConverterITSomeEJB"));

if (!isTomee()) { // MyFaces bugs on this.
assertTrue("EJB is injected in facesConverterITManagedConverter", facesConverterITManagedConverter.getText().startsWith("FacesConverterITSomeEJB"));
if (!isMojarra()) { // Mojarra bugs on this.
assertTrue("ResourceDependency is still injected in facesConverterITExtendedManagedConverter after page refresh", facesConverterITExtendedManagedConverterResourceDependency.getText().equals("facesConverterITExtendedManagedConverterResourceDependency"));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;

public abstract class FacesConverterITBaseConverter implements Converter<String> {
public abstract class FacesConverterITBaseConverter implements Converter<Object> {

@Override
public String getAsString(FacesContext context, UIComponent component, String value) {
public String getAsString(FacesContext context, UIComponent component, Object value) {
return "";
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/*
* Copyright 2020 OmniFaces
*
* Licensed 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
*
* https://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.omnifaces.test.cdi.facesconverter;

import javax.faces.annotation.FacesConfig;
import javax.faces.annotation.FacesConfig.Version;

@FacesConfig(version = Version.JSF_2_3) // Else JSF 2.3-native @FacesConverter(managed=true) won't work in Mojarra.
public class FacesConverterITConfig {
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,28 @@
package org.omnifaces.test.cdi.facesconverter;

import javax.enterprise.context.Dependent;
import javax.faces.application.ResourceDependency;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import javax.inject.Inject;

@Dependent // OmniFaces-managed
@FacesConverter(value = "facesConverterITConverter")
public class FacesConverterITConverter extends FacesConverterITBaseConverter {
@ResourceDependency(library = "omnifaces.test", name = "facesConverterITConverterResourceDependency.js", target = "head")
public class FacesConverterITConverter implements Converter<Object> {

@Inject
private FacesConverterITSomeEJB ejb;

@Override
public String getAsString(FacesContext context, UIComponent component, String value) {
return ejb.getClass().getSimpleName();
public String getAsString(FacesContext context, UIComponent component, Object value) {
return ejb == null ? "null" : ejb.getClass().getSimpleName();
}

@Override
public String getAsObject(FacesContext context, UIComponent component, String value) {
return null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/*
* Copyright 2020 OmniFaces
*
* Licensed 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
*
* https://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.omnifaces.test.cdi.facesconverter;

import javax.enterprise.context.Dependent;
import javax.faces.application.ResourceDependency;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.FacesConverter;
import javax.inject.Inject;

@Dependent // OmniFaces-managed
@FacesConverter(value = "facesConverterITExtendedConverter")
@ResourceDependency(library = "omnifaces.test", name = "facesConverterITExtendedConverterResourceDependency.js", target = "head")
public class FacesConverterITExtendedConverter extends FacesConverterITBaseConverter {

@Inject
private FacesConverterITSomeEJB ejb;

@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
return ejb == null ? "null" : ejb.getClass().getSimpleName();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/*
* Copyright 2020 OmniFaces
*
* Licensed 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
*
* https://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.omnifaces.test.cdi.facesconverter;

import javax.faces.application.ResourceDependency;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.FacesConverter;
import javax.inject.Inject;

@FacesConverter(value = "facesConverterITExtendedManagedConverter", managed = true) // JSF 2.3-managed
@ResourceDependency(library = "omnifaces.test", name = "facesConverterITExtendedManagedConverterResourceDependency.js", target = "head")
public class FacesConverterITExtendedManagedConverter extends FacesConverterITBaseConverter {

@Inject
private FacesConverterITSomeEJB ejb;

@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
return ejb == null ? "null" : ejb.getClass().getSimpleName();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,27 @@
*/
package org.omnifaces.test.cdi.facesconverter;

import javax.faces.application.ResourceDependency;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import javax.inject.Inject;

@FacesConverter(value = "facesConverterITManagedConverter", managed = true) // JSF 2.3-managed
public class FacesConverterITManagedConverter extends FacesConverterITBaseConverter {
@ResourceDependency(library = "omnifaces.test", name = "facesConverterITManagedConverterResourceDependency.js", target = "head")
public class FacesConverterITManagedConverter implements Converter<Object> {

@Inject
private FacesConverterITSomeEJB ejb;

@Override
public String getAsString(FacesContext context, UIComponent component, String value) {
return ejb.getClass().getSimpleName();
public String getAsString(FacesContext context, UIComponent component, Object value) {
return ejb == null ? "null" : ejb.getClass().getSimpleName();
}

@Override
public String getAsObject(FacesContext context, UIComponent component, String value) {
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,19 @@
<h:body>
<h:outputText id="facesConverterITConverter" value="test" converter="facesConverterITConverter" />
<h:outputText id="facesConverterITManagedConverter" value="test" converter="facesConverterITManagedConverter" />
<h:outputText id="facesConverterITExtendedConverter" value="test" converter="facesConverterITExtendedConverter" />
<h:outputText id="facesConverterITExtendedManagedConverter" value="test" converter="facesConverterITExtendedManagedConverter" />

<h:outputText id="facesConverterITConverterResourceDependency" />
<h:outputText id="facesConverterITManagedConverterResourceDependency" />
<h:outputText id="facesConverterITExtendedConverterResourceDependency" />
<h:outputText id="facesConverterITExtendedManagedConverterResourceDependency" />

<h:outputText id="loaded" />

<script>
// This ensures that any resource dependency scripts are finished because they're also only executed on "load" event.
window.addEventListener("load", function() { document.getElementById("loaded").innerHTML = "true" });
</script>
</h:body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/*
* Copyright 2020 OmniFaces
*
* Licensed 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
*
* https://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.
*/
window.addEventListener("load", function() {
document.getElementById("facesConverterITConverterResourceDependency").innerHTML = "facesConverterITConverterResourceDependency";
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/*
* Copyright 2020 OmniFaces
*
* Licensed 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
*
* https://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.
*/
window.addEventListener("load", function() {
document.getElementById("facesConverterITExtendedConverterResourceDependency").innerHTML = "facesConverterITExtendedConverterResourceDependency";
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/*
* Copyright 2020 OmniFaces
*
* Licensed 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
*
* https://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.
*/
window.addEventListener("load", function() {
document.getElementById("facesConverterITExtendedManagedConverterResourceDependency").innerHTML = "facesConverterITExtendedManagedConverterResourceDependency";
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/*
* Copyright 2020 OmniFaces
*
* Licensed 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
*
* https://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.
*/
window.addEventListener("load", function() {
document.getElementById("facesConverterITManagedConverterResourceDependency").innerHTML = "facesConverterITManagedConverterResourceDependency";
});

0 comments on commit 29587f2

Please sign in to comment.