package org.grails.validation;
import grails.validation.AbstractConstraintTests;
import grails.validation.ConstrainedProperty;
import grails.validation.TestClass;
import java.util.ArrayList;
import java.util.List;
/**
* Test cases for 'url' constraint.
*
* @author Sergey Nebolsin (<a href="mailto:nebolsin@gmail.com"/>)
*/
@SuppressWarnings({"unchecked","rawtypes"})
public class UrlConstraintTests extends AbstractConstraintTests {
@Override
protected Class<?> getConstraintClass() {
return UrlConstraint.class;
}
public void testValidation() {
testConstraintMessageCodes(
getConstraint("testURL", Boolean.TRUE),
"wrong_url",
new String[]{"testClass.testURL.url.error", "testClass.testURL.url.invalid"},
new Object[]{"testURL", TestClass.class, "wrong_url"});
testConstraintPassed(
getConstraint("testURL", Boolean.TRUE),
"http://www.google.com");
testConstraintPassed(
getConstraint("testURL", Boolean.TRUE),
"https://www.google.com/");
testConstraintPassed(
getConstraint("testURL", Boolean.TRUE),
"https://www.google.com/answers.py?test=1&second=2");
testConstraintFailed(
getConstraint("testURL", Boolean.TRUE),
"http://localhost/tau_gwi_00/clif/cb/19");
testConstraintPassed(
getConstraint("testURL", "localhost"),
"http://localhost/tau_gwi_00/clif/cb/19");
testConstraintPassed(
getConstraint("testURL", "localhost(:(\\d{1,5}))?"),
"http://localhost:8080/tau_gwi_00/clif/cb/19");
testConstraintPassed(
getConstraint("testURL", ".*\\.localdomain"),
"http://localhost.localdomain/myApp/?test=1&second=2");
testConstraintPassed(
getConstraint("testURL", ".*\\.localdomain"),
"http://mytest.localdomain/myApp/?test=1&second=2");
List regexps = new ArrayList();
regexps.add("localhost");
regexps.add("my-machine");
// now should pass for 'localhost' and 'my-machine'
testConstraintPassed(
getConstraint("testURL", regexps),
"https://localhost/myApp/?test=1&second=2");
testConstraintPassed(
getConstraint("testURL", regexps),
"https://my-machine/myApp/?test=1&second=2");
// and fail for 'another-machine'
testConstraintFailed(
getConstraint("testURL", regexps),
"https://another-machine/myApp/?test=1&second=2");
// but still pass for IANA TLD's
testConstraintPassed(
getConstraint("testURL", regexps),
"http://www.google.com/");
// must always pass when constraint is turned off
testConstraintPassed(
getConstraint("testURL", Boolean.FALSE),
"wrong_url");
// must always pass on null values
testConstraintPassed(
getConstraint("testURL", Boolean.TRUE),
null);
testConstraintDefaultMessage(
getConstraint("testURL", Boolean.TRUE),
"wrong_url",
"Property [{0}] of class [{1}] with value [{2}] is not a valid URL");
}
public void testCreation() {
UrlConstraint constraint = (UrlConstraint) getConstraint("testString", Boolean.FALSE);
assertEquals(ConstrainedProperty.URL_CONSTRAINT, constraint.getName());
assertTrue(constraint.supports(String.class));
assertFalse(constraint.supports(Float.class));
assertFalse(constraint.supports(Double.class));
assertFalse(constraint.supports(Object.class));
assertFalse(constraint.supports(null));
try {
getConstraint("testString", Boolean.TRUE);
} catch (IllegalArgumentException iae) {
fail("UrlConstraint should allow boolean parameters.");
}
try {
getConstraint("testString", "localhost");
} catch (IllegalArgumentException iae) {
fail("UrlConstraint should allow string parameters.");
}
try {
List regexps = new ArrayList();
regexps.add("aaa");
regexps.add("bbb");
getConstraint("testString", regexps);
} catch (IllegalArgumentException iae) {
fail("UrlConstraint should allow list parameters.");
}
try {
getConstraint("testString", 1d);
fail("UrlConstraint must throw an exception for non-boolean, non-string and non-list parameters.");
} catch (IllegalArgumentException iae) {
// Great
}
}
}