Author: nbelaevski
Date: 2010-10-24 21:02:43 -0400 (Sun, 24 Oct 2010)
New Revision: 19660
Added:
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/BaseConverterTestRunner.java
Removed:
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/BaseConverterTestRule.java
Modified:
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/BaseConverterTest.java
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/DateTimeConverterTest.java
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/NumberConverterTest.java
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/TestData.java
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/TestDataHolder.java
Log:
https://jira.jboss.org/browse/RF-9511
Modified:
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/BaseConverterTest.java
===================================================================
---
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/BaseConverterTest.java 2010-10-24
19:54:39 UTC (rev 19659)
+++
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/BaseConverterTest.java 2010-10-25
01:02:43 UTC (rev 19660)
@@ -21,6 +21,11 @@
*/
package org.richfaces.convert;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
import java.text.MessageFormat;
import java.util.Calendar;
import java.util.Date;
@@ -40,26 +45,23 @@
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
-import junit.framework.AssertionFailedError;
import net.sourceforge.htmlunit.corejs.javascript.Scriptable;
import org.ajax4jsf.javascript.JSFunction;
import org.ajax4jsf.javascript.ScriptUtils;
import org.jboss.test.faces.htmlunit.HtmlUnitEnvironment;
-import org.jboss.test.faces.jetty.JettyServer;
import org.junit.After;
-import org.junit.Assert;
import org.junit.Before;
-import org.junit.Rule;
+import org.junit.runner.RunWith;
import com.gargoylesoftware.htmlunit.ScriptResult;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.google.common.base.Strings;
/**
* @author Nick Belaevski
*
*/
+(a)RunWith(BaseConverterTestRunner.class)
public abstract class BaseConverterTest {
public static final String TEST_COMPONENT_LABEL = "input";
@@ -179,9 +181,6 @@
}
}
- @Rule
- public BaseConverterTestRule rule = new BaseConverterTestRule();
-
private TestBean testBean;
private HtmlUnitEnvironment environment;
@@ -200,7 +199,7 @@
public void setUp() throws Exception {
testBean = new TestBean();
- environment = new HtmlUnitEnvironment(new JettyServer());
+ environment = new HtmlUnitEnvironment();
environment.getServer().addResource("/test.xhtml",
BaseConverterTest.class.getResource("test.xhtml"));
environment.getServer().addResource("/resources/converter.js",
converterScriptName);
environment.getServer().addWebListener(new ServletRequestListener() {
@@ -227,42 +226,6 @@
environment = null;
}
- private String formattedParametersData() {
- StringBuilder sb = new StringBuilder();
-
- sb.append("TestData {");
-
- sb.append("submittedValue=\"");
- sb.append(submittedValue);
- sb.append("\"");
-
- if (!Strings.isNullOrEmpty(failureMessage)) {
- sb.append(", failureMessage=\"");
- sb.append(failureMessage);
- sb.append("\"");
- }
-
- sb.append("}");
-
- return sb.toString();
- }
-
- private void fail(String message) {
- Assert.fail(MessageFormat.format("{0}: {1}", formattedParametersData(),
message));
- }
-
- private void assertEquals(Object expected, Object actual) {
- if (expected == null && actual == null) {
- return;
- }
- if (expected != null && expected.equals(actual)) {
- return;
- }
-
- throw new AssertionFailedError(MessageFormat.format("{0}: expected {1} but
was {2}",
- formattedParametersData(), expected, actual));
- }
-
protected String serializeObjectToScript(Object object) {
if (object instanceof Date) {
Calendar calendar = Calendar.getInstance();
@@ -304,7 +267,7 @@
public void assertConversionOk() throws Exception {
HtmlPage page = environment.getPage("/test.jsf");
- Assert.assertTrue(page.getWebClient().isJavaScriptEnabled());
+ assertTrue(page.getWebClient().isJavaScriptEnabled());
ScriptResult conversionMessageResult =
page.executeJavaScript("verifyConversion()");
if (!ScriptResult.isUndefined(conversionMessageResult)) {
fail(conversionMessageResult.getJavaScriptResult().toString());
@@ -314,10 +277,9 @@
public void assertConversionFailure() throws Exception {
HtmlPage page = environment.getPage("/test.jsf");
- Assert.assertNotNull(testBean.getConverterException());
- Assert.assertEquals(testBean.getConverterException().getMessage(),
failureMessage);
+ assertNotNull(testBean.getConverterException());
- Assert.assertTrue(page.getWebClient().isJavaScriptEnabled());
+ assertTrue(page.getWebClient().isJavaScriptEnabled());
ScriptResult conversionErrorResult =
page.executeJavaScript("window.conversionError");
if (ScriptResult.isUndefined(conversionErrorResult)) {
@@ -325,9 +287,26 @@
return;
}
- Scriptable conversionError = (Scriptable)
conversionErrorResult.getJavaScriptResult();
- assertEquals(conversionError.get("message", conversionError),
failureMessage);
+ Object conversionErrorMessage;
+
+ Object scriptResult = conversionErrorResult.getJavaScriptResult();
+ if (scriptResult instanceof Scriptable) {
+ Scriptable scriptable = (Scriptable) scriptResult;
+ conversionErrorMessage = scriptable.get("message", scriptable);
+ } else {
+ conversionErrorMessage = scriptResult;
+ }
+ if (failureMessage != null) {
+ assertEquals(failureMessage, conversionErrorMessage);
+ } else {
+ assertEquals(testBean.getConverterException().getMessage(),
conversionErrorMessage);
+ }
}
+
+ public void setup(TestData testData) {
+ setSubmittedValue(testData.submittedValue());
+ setFailureMessage(testData.failureMessage());
+ }
}
Deleted:
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/BaseConverterTestRule.java
===================================================================
---
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/BaseConverterTestRule.java 2010-10-24
19:54:39 UTC (rev 19659)
+++
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/BaseConverterTestRule.java 2010-10-25
01:02:43 UTC (rev 19660)
@@ -1,72 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc. and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
- */
-package org.richfaces.convert;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.junit.rules.MethodRule;
-import org.junit.runners.model.FrameworkMethod;
-import org.junit.runners.model.Statement;
-
-import com.google.common.base.Strings;
-import com.google.common.collect.Lists;
-
-/**
- * @author Nick Belaevski
- *
- */
-public class BaseConverterTestRule implements MethodRule {
-
- public Statement apply(final Statement base, FrameworkMethod method, final Object
target) {
- final List<TestData> testDataList = Lists.newArrayList();
-
- TestDataHolder testDataHolder = method.getAnnotation(TestDataHolder.class);
- if (testDataHolder != null) {
- testDataList.addAll(Arrays.asList(testDataHolder.value()));
- }
-
- TestData testData = method.getAnnotation(TestData.class);
- if (testData != null) {
- testDataList.add(testData);
- }
-
- return new Statement() {
-
- @Override
- public void evaluate() throws Throwable {
- BaseConverterTest baseConverterTest = (BaseConverterTest) target;
-
- for (TestData testData : testDataList) {
- baseConverterTest.setSubmittedValue(testData.submittedValue());
-
- if (!Strings.isNullOrEmpty(testData.failureMessage())) {
- baseConverterTest.setFailureMessage(testData.failureMessage());
- }
-
- base.evaluate();
- }
- }
- };
- }
-
-}
Copied:
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/BaseConverterTestRunner.java
(from rev 19656,
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/BaseConverterTestRule.java)
===================================================================
---
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/BaseConverterTestRunner.java
(rev 0)
+++
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/BaseConverterTestRunner.java 2010-10-25
01:02:43 UTC (rev 19660)
@@ -0,0 +1,198 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.richfaces.convert;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.junit.Test;
+import org.junit.internal.runners.model.ReflectiveCallable;
+import org.junit.runner.Runner;
+import org.junit.runner.notification.RunNotifier;
+import org.junit.runners.BlockJUnit4ClassRunner;
+import org.junit.runners.Suite;
+import org.junit.runners.model.FrameworkMethod;
+import org.junit.runners.model.InitializationError;
+import org.junit.runners.model.Statement;
+import org.junit.runners.model.TestClass;
+
+import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+public class BaseConverterTestRunner extends Suite {
+
+ private static final class ParameterizedFrameworkMethod extends FrameworkMethod {
+
+ private TestData testData;
+
+ private boolean failure;
+
+ public ParameterizedFrameworkMethod(Method method, TestData testData, boolean
failure) {
+ super(method);
+ this.testData = testData;
+ this.failure = failure;
+ }
+
+ public String getFormattedParameters() {
+ if (testData == null) {
+ return "no test data";
+ }
+
+ StringBuilder sb = new StringBuilder();
+
+ if (failure) {
+ sb.append("<failure>");
+ } else {
+ sb.append("<success>");
+ }
+
+ sb.append(" @TestData {");
+
+ sb.append("submittedValue=" + testData.submittedValue());
+
+ if (!Strings.isNullOrEmpty(testData.failureMessage())) {
+ sb.append(", failureMessage=" + testData.failureMessage());
+ }
+
+ sb.append("}");
+
+ return sb.toString();
+ }
+
+ @Override
+ public Object invokeExplosively(final Object target, final Object... params)
throws Throwable {
+ return new ReflectiveCallable() {
+ @Override
+ protected Object runReflectiveCall() throws Throwable {
+ BaseConverterTest baseConverterTest = (BaseConverterTest) target;
+
+ baseConverterTest.setSubmittedValue(testData.submittedValue());
+
+ if (!Strings.isNullOrEmpty(testData.failureMessage())) {
+ baseConverterTest.setFailureMessage(testData.failureMessage());
+ }
+
+ Object returnValue = getMethod().invoke(target, params);
+
+ if (failure) {
+ baseConverterTest.assertConversionFailure();
+ } else {
+ baseConverterTest.assertConversionOk();
+ }
+
+ return returnValue;
+ }
+ }.run();
+ }
+ }
+
+ private class ParameterizedTestRunner extends BlockJUnit4ClassRunner {
+
+ private String testMethodName;
+
+ private List<FrameworkMethod> children = Lists.newArrayList();
+
+ public ParameterizedTestRunner(Class<?> klass, FrameworkMethod testMethod)
+ throws InitializationError {
+
+ super(klass);
+
+ this.testMethodName = testMethod.getName();
+
+ TestDataHolder testDataHolder =
testMethod.getAnnotation(TestDataHolder.class);
+ if (testDataHolder != null) {
+ for (TestData testData : testDataHolder.successes()) {
+ children.add(new ParameterizedFrameworkMethod(testMethod.getMethod(),
testData, false));
+ }
+
+ for (TestData testData : testDataHolder.failures()) {
+ children.add(new ParameterizedFrameworkMethod(testMethod.getMethod(),
testData, true));
+ }
+ } else {
+ children.add(testMethod);
+ }
+ }
+
+ @Override
+ public Object createTest() throws Exception {
+ return getTestClass().getOnlyConstructor().newInstance();
+ }
+
+ @Override
+ protected String getName() {
+ return testMethodName;
+ }
+
+ @Override
+ protected String testName(final FrameworkMethod method) {
+ if (method instanceof ParameterizedFrameworkMethod) {
+ String formattedParamsString = ((ParameterizedFrameworkMethod)
method).getFormattedParameters();
+
+ return String.format("%s %s", testMethodName,
formattedParamsString);
+ }
+
+ return testMethodName;
+ }
+
+ @Override
+ protected void validateConstructor(List<Throwable> errors) {
+ validateOnlyOneConstructor(errors);
+ }
+
+ @Override
+ protected Statement classBlock(RunNotifier notifier) {
+ return childrenInvoker(notifier);
+ }
+
+ @Override
+ protected List<FrameworkMethod> getChildren() {
+ return children;
+ }
+
+ }
+
+ private final ArrayList<Runner> runners = new ArrayList<Runner>();
+
+ /**
+ * Only called reflectively. Do not use programmatically.
+ */
+ public BaseConverterTestRunner(Class<?> klass) throws Throwable {
+ super(klass, Collections.<Runner>emptyList());
+
+ TestClass testClass = getTestClass();
+ List<FrameworkMethod> testMethods =
testClass.getAnnotatedMethods(Test.class);
+ for (FrameworkMethod testMethod: testMethods) {
+ runners.add(new ParameterizedTestRunner(klass, testMethod));
+ }
+ }
+
+ @Override
+ protected List<Runner> getChildren() {
+ return runners;
+ }
+}
Modified:
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/DateTimeConverterTest.java
===================================================================
---
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/DateTimeConverterTest.java 2010-10-24
19:54:39 UTC (rev 19659)
+++
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/DateTimeConverterTest.java 2010-10-25
01:02:43 UTC (rev 19660)
@@ -36,27 +36,23 @@
}
@Test
- @TestDataHolder({
- @TestData(submittedValue = "18-10-2010"),
- @TestData(submittedValue = "17-10-2010")
- })
- public void testSuccess() throws Exception {
+ @TestDataHolder(
+ successes = {
+ @TestData(submittedValue = "18-10-2010"),
+ @TestData(submittedValue = "17-10-2010")
+ },
+ failures = {
+ @TestData(submittedValue = "10/17/2010")
+ }
+ )
+ public void testPattern() throws Exception {
setClientConverterClassName("org.rf.DateTimeConverter");
setConverterId(DateTimeConverter.CONVERTER_ID);
setAttribute("pattern", "dd-MM-yyyy");
-
- assertConversionOk();
}
@Test
- @TestDataHolder({
- @TestData(submittedValue = "10/17/2010", failureMessage =
TEST_COMPONENT_LABEL + ": '10/17/2010' could not be understood as a
date.")
- })
- public void testFailures() throws Exception {
- setClientConverterClassName("org.rf.DateTimeConverter");
- setConverterId(DateTimeConverter.CONVERTER_ID);
- setAttribute("pattern", "dd-MM-yyyy");
+ public void testNoPattern() throws Exception {
- assertConversionFailure();
}
}
Modified:
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/NumberConverterTest.java
===================================================================
---
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/NumberConverterTest.java 2010-10-24
19:54:39 UTC (rev 19659)
+++
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/NumberConverterTest.java 2010-10-25
01:02:43 UTC (rev 19660)
@@ -21,8 +21,6 @@
*/
package org.richfaces.convert;
-import static org.junit.Assert.*;
-
import javax.faces.convert.NumberConverter;
import org.junit.Test;
@@ -38,27 +36,17 @@
}
@Test
- @TestDataHolder({
- @TestData(submittedValue = "111")
- })
+ @TestDataHolder(
+ successes = {
+ @TestData(submittedValue = "111")
+ },
+ failures = {
+ @TestData(submittedValue = "aaa")
+ }
+ )
public void testSuccess() throws Exception {
setClientConverterClassName("RichFaces.csv.getConverter('number')");
setConverterId(NumberConverter.CONVERTER_ID);
//setAttribute("pattern", "dd-MM-yyyy");
-
- assertConversionOk();
}
-
- @Test
- @TestDataHolder({
- @TestData(submittedValue = "aaa", failureMessage = TEST_COMPONENT_LABEL
+ ": 'aaa' could not be understood as a number.")
- })
- public void testFailures() throws Exception {
-
setClientConverterClassName("RichFaces.csv.getConverter('number')");
- setConverterId(NumberConverter.CONVERTER_ID);
- //setConversionErrorMessage("");
- //setAttribute("pattern", "dd-MM-yyyy");
-
- assertConversionFailure();
- }
}
Modified:
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/TestData.java
===================================================================
---
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/TestData.java 2010-10-24
19:54:39 UTC (rev 19659)
+++
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/TestData.java 2010-10-25
01:02:43 UTC (rev 19660)
@@ -38,5 +38,5 @@
public String submittedValue();
public String failureMessage() default "";
-
+
}
Modified:
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/TestDataHolder.java
===================================================================
---
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/TestDataHolder.java 2010-10-24
19:54:39 UTC (rev 19659)
+++
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/convert/TestDataHolder.java 2010-10-25
01:02:43 UTC (rev 19660)
@@ -35,6 +35,8 @@
@Target(ElementType.METHOD)
public @interface TestDataHolder {
- public TestData[] value();
+ public TestData[] successes();
+ public TestData[] failures();
+
}