/grails-test-suite-uber/src/test/groovy/org/codehaus/groovy/grails/validation/routines/UrlValidatorTests.java
Java | 310 lines | 239 code | 30 blank | 41 comment | 28 complexity | 0b79d2088da2215929b5143e3fc8242e MD5 | raw file
- /*
- * 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.codehaus.groovy.grails.validation.routines;
-
- import junit.framework.Test;
- import junit.framework.TestCase;
- import junit.framework.TestSuite;
-
- /**
- * Performs Validation Test for url validations.
- */
- public class UrlValidatorTests extends TestCase {
-
- private boolean printStatus = false;
- private boolean printIndex = false;//print index that indicates current scheme,host,port,path, query test were using.
-
- public UrlValidatorTests(String testName) {
- super(testName);
- }
-
- public static Test suite() {
- return new TestSuite(UrlValidatorTests.class);
- }
-
- @Override
- protected void setUp() {
- for (int index = 0; index < testPartsIndex.length - 1; index++) {
- testPartsIndex[index] = 0;
- }
- }
-
- public void testIsValid() {
- testIsValid(testUrlParts, UrlValidator.ALLOW_ALL_SCHEMES);
- setUp();
- long options = UrlValidator.ALLOW_2_SLASHES +
- UrlValidator.ALLOW_ALL_SCHEMES +
- UrlValidator.NO_FRAGMENTS;
-
- testIsValid(testUrlPartsOptions, options);
- }
-
- public void testIsValidScheme() {
- if (printStatus) {
- System.out.print("\n testIsValidScheme() ");
- }
- String[] schemes = {"http", "gopher"};
- //UrlValidator urlVal = new UrlValidator(schemes,false,false,false);
- UrlValidator urlVal = new UrlValidator(schemes, 0);
- for (int sIndex = 0; sIndex < testScheme.length; sIndex++) {
- ResultPair testPair = testScheme[sIndex];
- boolean result = urlVal.isValidScheme(testPair.item);
- assertEquals(testPair.item, testPair.valid, result);
- if (printStatus) {
- if (result == testPair.valid) {
- System.out.print('.');
- }
- else {
- System.out.print('X');
- }
- }
- }
- if (printStatus) {
- System.out.println();
- }
- }
-
- /**
- * Create set of tests by taking the testUrlXXX arrays and
- * running through all possible permutations of their combinations.
- *
- * @param testObjects Used to create a url.
- */
- public void testIsValid(Object[] testObjects, long options) {
- UrlValidator urlVal = new UrlValidator(null, null, options);
- assertTrue(urlVal.isValid("http://www.google.com"));
- assertTrue(urlVal.isValid("http://www.google.com/"));
- int statusPerLine = 60;
- int printed = 0;
- if (printIndex) {
- statusPerLine = 6;
- }
- do {
- StringBuilder testBuffer = new StringBuilder();
- boolean expected = true;
- for (int testPartsIndexIndex = 0; testPartsIndexIndex < testPartsIndex.length; ++testPartsIndexIndex) {
- int index = testPartsIndex[testPartsIndexIndex];
- ResultPair[] part = (ResultPair[]) testObjects[testPartsIndexIndex];
- testBuffer.append(part[index].item);
- expected &= part[index].valid;
- }
- String url = testBuffer.toString();
- boolean result = urlVal.isValid(url);
- assertEquals(url, expected, result);
- if (printStatus) {
- if (printIndex) {
- System.out.print(testPartsIndextoString());
- } else {
- if (result == expected) {
- System.out.print('.');
- } else {
- System.out.print('X');
- }
- }
- printed++;
- if (printed == statusPerLine) {
- System.out.println();
- printed = 0;
- }
- }
- } while (incrementTestPartsIndex(testPartsIndex, testObjects));
- if (printStatus) {
- System.out.println();
- }
- }
-
- public void testValidator202() {
- String[] schemes = {"http","https"};
- UrlValidator urlValidator = new UrlValidator(schemes, UrlValidator.NO_FRAGMENTS);
- assertTrue(urlValidator.isValid("http://www.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.logoworks.comwww.org"));
- }
-
- public void testValidator204() {
- String[] schemes = {"http","https"};
- UrlValidator urlValidator = new UrlValidator(schemes);
- assertTrue(urlValidator.isValid("http://tech.yahoo.com/rc/desktops/102;_ylt=Ao8yevQHlZ4On0O3ZJGXLEQFLZA5"));
- }
-
- public void testValidator218() {
- UrlValidator validator = new UrlValidator(UrlValidator.ALLOW_2_SLASHES);
- assertTrue("parentheses should be valid in URLs",
- validator.isValid("http://somewhere.com/pathxyz/file(1).html"));
- }
-
- public void testValidator248() {
- RegexValidator regex = new RegexValidator(new String[] {"localhost", ".*\\.my-testing"});
- UrlValidator validator = new UrlValidator(regex, 0);
-
- assertTrue("localhost URL should validate",
- validator.isValid("http://localhost/test/index.html"));
- assertTrue("first.my-testing should validate",
- validator.isValid("http://first.my-testing/test/index.html"));
- assertTrue("sup3r.my-testing should validate",
- validator.isValid("http://sup3r.my-testing/test/index.html"));
-
- assertFalse("broke.my-test should not validate",
- validator.isValid("http://broke.my-test/test/index.html"));
-
- assertTrue("www.apache.org should still validate",
- validator.isValid("http://www.apache.org/test/index.html"));
- }
-
- static boolean incrementTestPartsIndex(int[] testPartsIndex, Object[] testParts) {
- boolean carry = true; //add 1 to lowest order part.
- boolean maxIndex = true;
- for (int testPartsIndexIndex = testPartsIndex.length - 1; testPartsIndexIndex >= 0; --testPartsIndexIndex) {
- int index = testPartsIndex[testPartsIndexIndex];
- ResultPair[] part = (ResultPair[]) testParts[testPartsIndexIndex];
- if (carry) {
- if (index < part.length - 1) {
- index++;
- testPartsIndex[testPartsIndexIndex] = index;
- carry = false;
- } else {
- testPartsIndex[testPartsIndexIndex] = 0;
- carry = true;
- }
- }
- maxIndex &= (index == (part.length - 1));
- }
-
- return (!maxIndex);
- }
-
- private String testPartsIndextoString() {
- StringBuilder carryMsg = new StringBuilder("{");
- for (int testPartsIndexIndex = 0; testPartsIndexIndex < testPartsIndex.length; ++testPartsIndexIndex) {
- carryMsg.append(testPartsIndex[testPartsIndexIndex]);
- if (testPartsIndexIndex < testPartsIndex.length - 1) {
- carryMsg.append(',');
- }
- else {
- carryMsg.append('}');
- }
- }
- return carryMsg.toString();
- }
-
- public void testValidateUrl() {
- assertTrue(true);
- }
-
- /**
- * Only used to debug the unit tests.
- * @param argv
- */
- public static void main(String[] argv) {
- UrlValidatorTests fct = new UrlValidatorTests("url test");
- fct.setUp();
- fct.testIsValid();
- fct.testIsValidScheme();
- }
-
- //-------------------- Test data for creating a composite URL
- /**
- * The data given below approximates the 4 parts of a URL
- * <scheme>://<authority><path>?<query> except that the port number
- * is broken out of authority to increase the number of permutations.
- * A complete URL is composed of a scheme+authority+port+path+query,
- * all of which must be individually valid for the entire URL to be considered
- * valid.
- */
- ResultPair[] testUrlScheme = { new ResultPair("http://", true),
- new ResultPair("ftp://", true),
- new ResultPair("h3t://", true),
- new ResultPair("3ht://", false),
- new ResultPair("http:/", false),
- new ResultPair("http:", false),
- new ResultPair("http/", false),
- new ResultPair("://", false),
- new ResultPair("", true)};
-
- ResultPair[] testUrlAuthority = { new ResultPair("www.google.com", true),
- new ResultPair("go.com", true),
- new ResultPair("go.au", true),
- new ResultPair("0.0.0.0", true),
- new ResultPair("255.255.255.255", true),
- new ResultPair("256.256.256.256", false),
- new ResultPair("255.com", true),
- new ResultPair("1.2.3.4.5", false),
- new ResultPair("1.2.3.4.", false),
- new ResultPair("1.2.3", false),
- new ResultPair(".1.2.3.4", false),
- new ResultPair("go.a", false),
- new ResultPair("go.a1a", false),
- new ResultPair("go.cc", true),
- new ResultPair("go.1aa", false),
- new ResultPair("aaa.", false),
- new ResultPair(".aaa", false),
- new ResultPair("aaa", false),
- new ResultPair("", false)
- };
-
- ResultPair[] testUrlPort = { new ResultPair(":80", true),
- new ResultPair(":65535", true),
- new ResultPair(":0", true),
- new ResultPair("", true),
- new ResultPair(":-1", false),
- new ResultPair(":65636", true),
- new ResultPair(":65a", false)
- };
-
- ResultPair[] testPath = { new ResultPair("/test1", true),
- new ResultPair("/t123", true),
- new ResultPair("/$23", true),
- new ResultPair("/..", false),
- new ResultPair("/../", false),
- new ResultPair("/test1/", true),
- new ResultPair("", true),
- new ResultPair("/test1/file", true),
- new ResultPair("/..//file", false),
- new ResultPair("/test1//file", false)
- };
-
- //Test allow2slash, noFragment
- ResultPair[] testUrlPathOptions = { new ResultPair("/test1", true),
- new ResultPair("/t123", true),
- new ResultPair("/$23", true),
- new ResultPair("/..", false),
- new ResultPair("/../", false),
- new ResultPair("/test1/", true),
- new ResultPair("/#", false),
- new ResultPair("", true),
- new ResultPair("/test1/file", true),
- new ResultPair("/t123/file", true),
- new ResultPair("/$23/file", true),
- new ResultPair("/../file", false),
- new ResultPair("/..//file", false),
- new ResultPair("/test1//file", true),
- new ResultPair("/#/file", false)
- };
-
- ResultPair[] testUrlQuery = { new ResultPair("?action=view", true),
- new ResultPair("?action=edit&mode=up", true),
- new ResultPair("", true)
- };
-
- Object[] testUrlParts = {testUrlScheme, testUrlAuthority, testUrlPort, testPath, testUrlQuery};
- Object[] testUrlPartsOptions = {testUrlScheme, testUrlAuthority, testUrlPort, testUrlPathOptions, testUrlQuery};
- int[] testPartsIndex = {0, 0, 0, 0, 0};
-
- //---------------- Test data for individual url parts ----------------
- ResultPair[] testScheme = { new ResultPair("http", true),
- new ResultPair("ftp", false),
- new ResultPair("httpd", false),
- new ResultPair("telnet", false)};
- }