blob: a0872d4ee469049943e5c8555a6565688cf62522 [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 static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
import java.util.Random;
import org.apache.commons.validator.routines.checkdigit.CheckDigit;
import org.apache.commons.validator.routines.checkdigit.EAN13CheckDigit;
import org.junit.jupiter.api.Test;
/**
* Tests {@link ISSNValidator}.
*/
public class ISSNValidatorTest {
private static final ISSNValidator VALIDATOR = ISSNValidator.getInstance();
private final String[] validFormat = { "ISSN 0317-8471", "1050-124X", "ISSN 1562-6865", "1063-7710", "1748-7188", "ISSN 0264-2875", "1750-0095",
"1188-1534", "1911-1479", "ISSN 1911-1460", "0001-6772", "1365-201X", "0264-3596", "1144-875X", };
private final String[] invalidFormat = { "", // empty
" ", // empty
"ISBN 0317-8471", // wrong prefix
"'1050-124X", // leading garbage
"ISSN1562-6865", // missing separator
"10637710", // missing separator
"1748-7188'", // trailing garbage
"ISSN 0264-2875", // extra space
"1750 0095", // invalid separator
"1188_1534", // invalid separator
"1911-1478", // invalid checkdigit
};
/**
* Test Invalid EAN-13 ISSN prefix codes Test Input length
*/
@Test
public void testConversionErrors() {
String input = null;
try {
input = "9780072129519";
VALIDATOR.extractFromEAN13(input);
fail("Expected IllegalArgumentException for '" + input + "'");
} catch (final IllegalArgumentException e) {
// expected result
}
try {
input = "9791090636071";
VALIDATOR.extractFromEAN13(input);
fail("Expected IllegalArgumentException for '" + input + "'");
} catch (final IllegalArgumentException e) {
// expected result
}
try {
input = "03178471";
VALIDATOR.extractFromEAN13(input);
fail("Expected IllegalArgumentException for '" + input + "'");
} catch (final IllegalArgumentException e) {
// expected result
}
}
/**
* Test Invalid ISSN codes
*/
@Test
public void testInvalid() {
for (final String f : invalidFormat) {
assertFalse(VALIDATOR.isValid(f), f);
}
}
/**
* Test valid EAN-13 ISSN codes and extract the ISSN
*/
@Test
public void testIsValidExtract() {
assertEquals("12345679", VALIDATOR.extractFromEAN13("9771234567003"));
assertEquals("00014664", VALIDATOR.extractFromEAN13("9770001466006"));
assertEquals("03178471", VALIDATOR.extractFromEAN13("9770317847001"));
assertEquals("1144875X", VALIDATOR.extractFromEAN13("9771144875007"));
}
/**
* Test isValid() ISSN codes
*/
@Test
public void testIsValidISSN() {
for (final String f : validFormat) {
assertTrue(VALIDATOR.isValid(f), f);
}
}
/**
* Test isValid() ISSN codes and convert them
*/
@Test
public void testIsValidISSNConvert() {
final CheckDigit ean13cd = EAN13CheckDigit.EAN13_CHECK_DIGIT;
final Random r = new Random();
for (final String f : validFormat) {
final String suffix = String.format("%02d", r.nextInt(100));
final String ean13 = VALIDATOR.convertToEAN13(f, suffix);
assertTrue(ean13cd.isValid(ean13), ean13);
}
// internet samples
assertEquals(VALIDATOR.convertToEAN13("1144-875X", "00"), "9771144875007");
assertEquals(VALIDATOR.convertToEAN13("0264-3596", "00"), "9770264359008");
assertEquals(VALIDATOR.convertToEAN13("1234-5679", "00"), "9771234567003");
}
@Test
public void testIsValidISSNConvertNull() {
assertNull(VALIDATOR.convertToEAN13(null, "00"));
}
@Test
public void testIsValidISSNConvertSuffix() {
try {
assertNull(VALIDATOR.convertToEAN13(null, null));
fail("Expected IllegalArgumentException");
} catch (final IllegalArgumentException expected) {
}
try {
assertNull(VALIDATOR.convertToEAN13(null, ""));
fail("Expected IllegalArgumentException");
} catch (final IllegalArgumentException expected) {
}
try {
assertNull(VALIDATOR.convertToEAN13(null, "0"));
fail("Expected IllegalArgumentException");
} catch (final IllegalArgumentException expected) {
}
try {
assertNull(VALIDATOR.convertToEAN13(null, "A"));
fail("Expected IllegalArgumentException");
} catch (final IllegalArgumentException expected) {
}
try {
assertNull(VALIDATOR.convertToEAN13(null, "AA"));
fail("Expected IllegalArgumentException");
} catch (final IllegalArgumentException expected) {
}
try {
assertNull(VALIDATOR.convertToEAN13(null, "999"));
fail("Expected IllegalArgumentException");
} catch (final IllegalArgumentException expected) {
}
}
/**
* Test null values
*/
@Test
public void testNull() {
assertFalse(VALIDATOR.isValid(null), "isValid");
}
/**
* Test Invalid EAN-13 ISSN codes
*/
@Test
public void testValidCheckDigitEan13() {
assertNull(VALIDATOR.extractFromEAN13("9771234567001"));
assertNull(VALIDATOR.extractFromEAN13("9771234567002"));
assertNotNull(VALIDATOR.extractFromEAN13("9771234567003")); // valid check digit
assertNull(VALIDATOR.extractFromEAN13("9771234567004"));
assertNull(VALIDATOR.extractFromEAN13("9771234567005"));
assertNull(VALIDATOR.extractFromEAN13("9771234567006"));
assertNull(VALIDATOR.extractFromEAN13("9771234567007"));
assertNull(VALIDATOR.extractFromEAN13("9771234567008"));
assertNull(VALIDATOR.extractFromEAN13("9771234567009"));
assertNull(VALIDATOR.extractFromEAN13("9771234567000"));
}
}