exercism/elixir/isbn-verifier/test/isbn_verifier_test.exs

131 lines
3.2 KiB
Elixir

defmodule IsbnVerifierTest do
use ExUnit.Case
test "valid isbn number" do
assert IsbnVerifier.isbn?("3-598-21508-8")
end
test "invalid isbn check digit" do
refute IsbnVerifier.isbn?("3-598-21508-9")
end
test "valid isbn number with a check digit of 10" do
assert IsbnVerifier.isbn?("3-598-21507-X")
end
test "check digit is a character other than X" do
refute IsbnVerifier.isbn?("3-598-21507-A")
end
test "check digit in isbn is not treated as zero" do
refute IsbnVerifier.isbn?("4-598-21507-B")
end
test "invalid character in isbn" do
refute IsbnVerifier.isbn?("3-598-P1581-X")
end
test "X is only valid as a check digit" do
refute IsbnVerifier.isbn?("3-598-2X507-9")
end
test "valid isbn without separating dashes" do
assert IsbnVerifier.isbn?("3598215088")
end
test "isbn without separating dashes and X as check digit" do
assert IsbnVerifier.isbn?("359821507X")
end
test "isbn without check digit and dashes" do
refute IsbnVerifier.isbn?("359821507")
end
test "too long isbn and no dashes" do
refute IsbnVerifier.isbn?("3598215078X")
end
test "too short isbn" do
refute IsbnVerifier.isbn?("00")
end
test "isbn without check digit" do
refute IsbnVerifier.isbn?("3-598-21507")
end
test "too long isbn" do
refute IsbnVerifier.isbn?("3-598-21507-XA")
end
test "check digit of X should not be used for 0" do
refute IsbnVerifier.isbn?("3-598-21515-X")
end
test "input is 9 characters" do
refute IsbnVerifier.isbn?("134456729")
end
test "invalid characters are not ignored" do
refute IsbnVerifier.isbn?("3132P34035")
end
test "invalid characters are not ignored before checking length" do
refute IsbnVerifier.isbn?("3598P215088")
end
test "input is too long but contains a valid isbn" do
refute IsbnVerifier.isbn?("98245726788")
end
# Test cases from international ISBN to test variable dash placement
# Adapted from https://en.wikipedia.org/wiki/International_Standard_Book_Number#Registrant_element
test "Qatar NCCAH, Doha" do
assert IsbnVerifier.isbn?("99921-58-10-7")
end
test "Singapore World Scientific" do
assert IsbnVerifier.isbn?("9971-5-0210-0")
end
test "Greece Sigma Publications" do
assert IsbnVerifier.isbn?("960-425-059-0")
end
test "Czech Republic; Slovakia Taita Publishers" do
assert IsbnVerifier.isbn?("80-902734-1-6")
end
test "Brazil Companhia das Letras" do
assert IsbnVerifier.isbn?("85-359-0277-5")
end
test "English-speaking area Simon Wallenberg Press" do
assert IsbnVerifier.isbn?("1-84356-028-3")
end
test "English-speaking area Scribner" do
assert IsbnVerifier.isbn?("0-684-84328-5")
end
test "English-speaking area Frederick Ungar" do
assert IsbnVerifier.isbn?("0-8044-2957-X")
end
test "English-speaking area J. A. Allen & Co." do
assert IsbnVerifier.isbn?("0-85131-041-9")
end
test "English-speaking area Edupedia Publications Pvt Ltd." do
assert IsbnVerifier.isbn?("93-86954-21-4")
end
test "English-speaking area Willmann-Bell" do
assert IsbnVerifier.isbn?("0-943396-04-2")
end
test "English-speaking area KT Publishing" do
assert IsbnVerifier.isbn?("0-9752298-0-X")
end
end