blob: 78a8bb21eeff160e341d4497a64740a20fb02b03 [file] [log] [blame]
/*
* 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.commons.validator.routines;
import org.apache.commons.validator.routines.checkdigit.CheckDigit;
import org.apache.commons.validator.routines.checkdigit.EAN13CheckDigit;
import junit.framework.TestCase;
/**
* CodeValidatorTest.java.
*
* @version $Revision$
* @since Validator 1.4
*/
public class CodeValidatorTest extends TestCase {
/**
* Construct a test with the specified name.
* @param name The name of the test
*/
public CodeValidatorTest(String name) {
super(name);
}
/**
* @see junit.framework.TestCase#setUp()
*/
@Override
protected void setUp() throws Exception {
super.setUp();
}
/**
* @see junit.framework.TestCase#tearDown()
*/
@Override
protected void tearDown() throws Exception {
super.tearDown();
}
/**
* Test Check Digit.
*/
public void testCheckDigit() {
CodeValidator validator = new CodeValidator((String)null, -1, -1, (CheckDigit)null);
String invalidEAN = "9781930110992";
String validEAN = "9781930110991";
// Test no CheckDigit (i.e. null)
assertNull("No CheckDigit", validator.getCheckDigit());
assertEquals("No CheckDigit invalid", invalidEAN, validator.validate(invalidEAN));
assertEquals("No CheckDigit valid", validEAN, validator.validate(validEAN));
assertEquals("No CheckDigit (is) invalid", true, validator.isValid(invalidEAN));
assertEquals("No CheckDigit (is) valid", true, validator.isValid(validEAN));
// Use the EAN-13 check digit routine
validator = new CodeValidator((String)null, -1, EAN13CheckDigit.EAN13_CHECK_DIGIT);
assertNotNull("EAN CheckDigit", validator.getCheckDigit());
assertEquals("EAN CheckDigit invalid", null, validator.validate(invalidEAN));
assertEquals("EAN CheckDigit valid", validEAN, validator.validate(validEAN));
assertEquals("EAN CheckDigit (is) invalid", false, validator.isValid(invalidEAN));
assertEquals("EAN CheckDigit (is) valid", true, validator.isValid(validEAN));
assertEquals("EAN CheckDigit ex", null, validator.validate("978193011099X"));
}
/**
* Test the minimum/maximum length
*/
public void testLength() {
CodeValidator validator = new CodeValidator((String)null, -1, -1, (CheckDigit)null);
String length_10 = "1234567890";
String length_11 = "12345678901";
String length_12 = "123456789012";
String length_20 = "12345678901234567890";
String length_21 = "123456789012345678901";
String length_22 = "1234567890123456789012";
assertEquals("No min", -1, validator.getMinLength());
assertEquals("No max", -1, validator.getMaxLength());
assertEquals("No Length 10", length_10, validator.validate(length_10));
assertEquals("No Length 11", length_11, validator.validate(length_11));
assertEquals("No Length 12", length_12, validator.validate(length_12));
assertEquals("No Length 20", length_20, validator.validate(length_20));
assertEquals("No Length 21", length_21, validator.validate(length_21));
assertEquals("No Length 22", length_22, validator.validate(length_22));
validator = new CodeValidator((String)null, 11, -1, (CheckDigit)null);
assertEquals("Min 11 - min", 11, validator.getMinLength());
assertEquals("Min 11 - max", -1, validator.getMaxLength());
assertEquals("Min 11 - 10", null, validator.validate(length_10));
assertEquals("Min 11 - 11", length_11, validator.validate(length_11));
assertEquals("Min 11 - 12", length_12, validator.validate(length_12));
assertEquals("Min 11 - 20", length_20, validator.validate(length_20));
assertEquals("Min 11 - 21", length_21, validator.validate(length_21));
assertEquals("Min 11 - 22", length_22, validator.validate(length_22));
validator = new CodeValidator((String)null, -1, 21, (CheckDigit)null);
assertEquals("Max 21 - min", -1, validator.getMinLength());
assertEquals("Max 21 - max", 21, validator.getMaxLength());
assertEquals("Max 21 - 10", length_10, validator.validate(length_10));
assertEquals("Max 21 - 11", length_11, validator.validate(length_11));
assertEquals("Max 21 - 12", length_12, validator.validate(length_12));
assertEquals("Max 21 - 20", length_20, validator.validate(length_20));
assertEquals("Max 21 - 21", length_21, validator.validate(length_21));
assertEquals("Max 21 - 22", null, validator.validate(length_22));
validator = new CodeValidator((String)null, 11, 21, (CheckDigit)null);
assertEquals("Min 11 / Max 21 - min", 11, validator.getMinLength());
assertEquals("Min 11 / Max 21 - max", 21, validator.getMaxLength());
assertEquals("Min 11 / Max 21 - 10", null, validator.validate(length_10));
assertEquals("Min 11 / Max 21 - 11", length_11, validator.validate(length_11));
assertEquals("Min 11 / Max 21 - 12", length_12, validator.validate(length_12));
assertEquals("Min 11 / Max 21 - 20", length_20, validator.validate(length_20));
assertEquals("Min 11 / Max 21 - 21", length_21, validator.validate(length_21));
assertEquals("Min 11 / Max 21 - 22", null, validator.validate(length_22));
validator = new CodeValidator((String)null, 11, 11, (CheckDigit)null);
assertEquals("Exact 11 - min", 11, validator.getMinLength());
assertEquals("Exact 11 - max", 11, validator.getMaxLength());
assertEquals("Exact 11 - 10", null, validator.validate(length_10));
assertEquals("Exact 11 - 11", length_11, validator.validate(length_11));
assertEquals("Exact 11 - 12", null, validator.validate(length_12));
}
/**
* Test Regular Expression.
*/
public void testRegex() {
CodeValidator validator = new CodeValidator((String)null, -1, -1, (CheckDigit)null);
String value2 = "12";
String value3 = "123";
String value4 = "1234";
String value5 = "12345";
String invalid = "12a4";
// No Regular Expression
assertNull("No Regex", validator.getRegexValidator());
assertEquals("No Regex 2", value2, validator.validate(value2));
assertEquals("No Regex 3", value3, validator.validate(value3));
assertEquals("No Regex 4", value4, validator.validate(value4));
assertEquals("No Regex 5", value5, validator.validate(value5));
assertEquals("No Regex invalid", invalid, validator.validate(invalid));
// Regular Expression
String regex = "^([0-9]{3,4})$";
validator = new CodeValidator(regex, -1, -1, (CheckDigit)null);
assertNotNull("No Regex", validator.getRegexValidator());
assertEquals("Regex 2", null, validator.validate(value2));
assertEquals("Regex 3", value3, validator.validate(value3));
assertEquals("Regex 4", value4, validator.validate(value4));
assertEquals("Regex 5", null, validator.validate(value5));
assertEquals("Regex invalid", null, validator.validate(invalid));
// Reformatted
regex = "^([0-9]{3})(?:[-\\s])([0-9]{3})$";
validator = new CodeValidator(new RegexValidator(regex), 6, (CheckDigit)null);
assertEquals("Reformat 123-456", "123456", validator.validate("123-456"));
assertEquals("Reformat 123 456", "123456", validator.validate("123 456"));
assertEquals("Reformat 123456", null, validator.validate("123456"));
assertEquals("Reformat 123.456", null, validator.validate("123.456"));
regex = "^(?:([0-9]{3})(?:[-\\s])([0-9]{3}))|([0-9]{6})$";
validator = new CodeValidator(new RegexValidator(regex), 6, (CheckDigit)null);
assertEquals("Reformat 2 Regex", "RegexValidator{" + regex + "}", validator.getRegexValidator().toString());
assertEquals("Reformat 2 123-456", "123456", validator.validate("123-456"));
assertEquals("Reformat 2 123 456", "123456", validator.validate("123 456"));
assertEquals("Reformat 2 123456", "123456", validator.validate("123456"));
}
/**
* Test Regular Expression.
*/
public void testNoInput() {
CodeValidator validator = new CodeValidator((String)null, -1, -1, (CheckDigit)null);
assertEquals("Null", null, validator.validate(null));
assertEquals("Zero Length", null, validator.validate(""));
assertEquals("Spaces", null, validator.validate(" "));
assertEquals("Trimmed", "A", validator.validate(" A "));
}
public void testValidator294_1() {
CodeValidator validator = new CodeValidator((String)null, 0, -1, (CheckDigit)null);
assertEquals("Null", null, validator.validate(null));
validator = new CodeValidator((String)null, -1, 0, (CheckDigit)null);
assertEquals("Null", null, validator.validate(null));
}
public void testValidator294_2() {
CodeValidator validator = new CodeValidator((String)null, -1, 0, (CheckDigit)null);
assertEquals("Null", null, validator.validate(null));
}
/**
* Test Regular Expression.
*/
public void testConstructors() {
CodeValidator validator;
RegexValidator regex = new RegexValidator("^[0-9]*$");
// Constructor 1
validator = new CodeValidator(regex, EAN13CheckDigit.EAN13_CHECK_DIGIT);
assertEquals("Constructor 1 - regex", regex, validator.getRegexValidator());
assertEquals("Constructor 1 - min length", -1, validator.getMinLength());
assertEquals("Constructor 1 - max length", -1, validator.getMaxLength());
assertEquals("Constructor 1 - check digit", EAN13CheckDigit.EAN13_CHECK_DIGIT, validator.getCheckDigit());
// Constructor 2
validator = new CodeValidator(regex, 13, EAN13CheckDigit.EAN13_CHECK_DIGIT);
assertEquals("Constructor 2 - regex", regex, validator.getRegexValidator());
assertEquals("Constructor 2 - min length", 13, validator.getMinLength());
assertEquals("Constructor 2 - max length", 13, validator.getMaxLength());
assertEquals("Constructor 2 - check digit", EAN13CheckDigit.EAN13_CHECK_DIGIT, validator.getCheckDigit());
// Constructor 3
validator = new CodeValidator(regex, 10, 20, EAN13CheckDigit.EAN13_CHECK_DIGIT);
assertEquals("Constructor 3 - regex", regex, validator.getRegexValidator());
assertEquals("Constructor 3 - min length", 10, validator.getMinLength());
assertEquals("Constructor 3 - max length", 20, validator.getMaxLength());
assertEquals("Constructor 3 - check digit", EAN13CheckDigit.EAN13_CHECK_DIGIT, validator.getCheckDigit());
// Constructor 4
validator = new CodeValidator("^[0-9]*$", EAN13CheckDigit.EAN13_CHECK_DIGIT);
assertEquals("Constructor 4 - regex", "RegexValidator{^[0-9]*$}", validator.getRegexValidator().toString());
assertEquals("Constructor 4 - min length", -1, validator.getMinLength());
assertEquals("Constructor 4 - max length", -1, validator.getMaxLength());
assertEquals("Constructor 4 - check digit", EAN13CheckDigit.EAN13_CHECK_DIGIT, validator.getCheckDigit());
// Constructor 5
validator = new CodeValidator("^[0-9]*$", 13, EAN13CheckDigit.EAN13_CHECK_DIGIT);
assertEquals("Constructor 5 - regex", "RegexValidator{^[0-9]*$}", validator.getRegexValidator().toString());
assertEquals("Constructor 5 - min length", 13, validator.getMinLength());
assertEquals("Constructor 5 - max length", 13, validator.getMaxLength());
assertEquals("Constructor 5 - check digit", EAN13CheckDigit.EAN13_CHECK_DIGIT, validator.getCheckDigit());
// Constructor 6
validator = new CodeValidator("^[0-9]*$", 10, 20, EAN13CheckDigit.EAN13_CHECK_DIGIT);
assertEquals("Constructor 6 - regex", "RegexValidator{^[0-9]*$}", validator.getRegexValidator().toString());
assertEquals("Constructor 6 - min length", 10, validator.getMinLength());
assertEquals("Constructor 6 - max length", 20, validator.getMaxLength());
assertEquals("Constructor 6 - check digit", EAN13CheckDigit.EAN13_CHECK_DIGIT, validator.getCheckDigit());
}
}