From a6e9f0aea0143a6b51f741b37d57c5feb1c8a240 Mon Sep 17 00:00:00 2001 From: Aurimas Vinckevicius Date: Tue, 24 Mar 2015 17:54:32 -0500 Subject: [PATCH] Add tests for ISSN/ISBN-related Zotero.Utilities functions --- test/tests/utilities.js | 155 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) diff --git a/test/tests/utilities.js b/test/tests/utilities.js index b71dcb517..e21aa6b9a 100644 --- a/test/tests/utilities.js +++ b/test/tests/utilities.js @@ -17,4 +17,159 @@ describe("Zotero.Utilities", function() { } }); }); + describe("cleanISBN", function() { + let cleanISBN = Zotero.Utilities.cleanISBN; + it("should return false for non-ISBN string", function() { + assert.isFalse(cleanISBN(''), 'returned false for empty string'); + assert.isFalse(cleanISBN('Random String 123'), 'returned false for non-ISBN string'); + assert.isFalse(cleanISBN('1234X67890'), 'returned false for ISBN10-looking string with X in the middle'); + assert.isFalse(cleanISBN('987123456789X'), 'returned false for ISBN13-looking string with X as check-digit'); + }); + it("should return false for invalid ISBN string", function() { + assert.isFalse(cleanISBN('1234567890'), 'returned false for invalid ISBN10'); + assert.isFalse(cleanISBN('9871234567890'), 'returned false for invalid ISBN13'); + }); + it("should return valid ISBN string given clean, valid ISBN string", function() { + assert.equal(cleanISBN('123456789X'), '123456789X', 'passed through valid ISBN10'); + assert.equal(cleanISBN('123456789x'), '123456789X', 'passed through valid ISBN10 with lower case input'); + assert.equal(cleanISBN('9781234567897'), '9781234567897', 'passed through valid ISBN13'); + assert.equal(cleanISBN('9791843123391'), '9791843123391', 'passed through valid ISBN13 in 979 range'); + }); + it("should strip off internal characters in ISBN string", function() { + let ignoredChars = '\x2D\xAD\u2010\u2011\u2012\u2013\u2014\u2015\u2043\u2212' // Dashes + + ' \xA0\r\n\t\x0B\x0C\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005' // Spaces + + '\u2006\u2007\u2008\u2009\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF'; + for (let i=0; iISBN:978-1 234\xA056789 - 7(print)\nISBN-10:123\x2D456789X (print)'), '9781234567897'); + }); + it("should not validate check digit when dontValidate is set", function() { + assert.equal(cleanISBN('9781234567890', true), '9781234567890', 'plain ISBN13 with wrong check digit'); + assert.equal(cleanISBN('1234567890', true), '1234567890', 'plain ISBN10 with wrong check digit'); + assert.equal(cleanISBN('1234567890 9781234567897', true), '1234567890', 'returned first ISBN10 (invalid) in the list with valid and invalid ISBNs'); + assert.equal(cleanISBN('9781234567890 123456789X', true), '9781234567890', 'returned first ISBN13 (invalid) in the list with valid and invalid ISBNs'); + }); + it("should not pass non-ISBN strings if dontValidate is set", function() { + assert.isFalse(cleanISBN('', true), 'returned false for empty string'); + assert.isFalse(cleanISBN('Random String 123', true), 'returned false for non-ISBN string'); + assert.isFalse(cleanISBN('1234X67890', true), 'returned false for ISBN10-looking string with X in the middle'); + assert.isFalse(cleanISBN('123456789Y', true), 'returned false for ISBN10-looking string with Y as check digit'); + assert.isFalse(cleanISBN('987123456789X', true), 'returned false for ISBN13-looking string with X as check-digit'); + assert.isFalse(cleanISBN('1239781234567897', true), 'did not ignore number prefix'); + assert.isFalse(cleanISBN('9781234567897123', true), 'did not ignore number suffix'); + assert.isFalse(cleanISBN('1239781234567897123', true), 'did not ignore surrounding numbers'); + }); + }); + describe("toISBN13", function() { + let toISBN13 = Zotero.Utilities.toISBN13; + it("should throw on invalid ISBN", function() { + let errorMsg = 'ISBN not found in "', + invalidStrings = ['', 'random string', '1234567890123']; + for (let i=0; iISSN:1234\xA0-\t5679(print)\neISSN (electronic):0028-0836'), '1234-5679'); + }); + }); });