From 95e424f69f6b6ba8fc346973f39c2ab0b54b63be Mon Sep 17 00:00:00 2001 From: "Jeremy Wall (zaphar)" Date: Sat, 16 Nov 2013 16:18:36 -0500 Subject: [PATCH] Add some data integrity tests. * Add new test suite test/data-quality-tests.js * Make ParseBook exported so I can use it to get data for each book This is suboptimal since really the data should be in a look up table somewhere but I don't want to tackle that in this change. * Actually load the json data for each book and test that number of chapters exists. --- js/reference.js | 12 ++++++----- package.json | 2 +- test/all.js | 1 + test/data-quality-tests.js | 42 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 test/data-quality-tests.js diff --git a/js/reference.js b/js/reference.js index 17aa94ff..e1dfa5b5 100644 --- a/js/reference.js +++ b/js/reference.js @@ -18,7 +18,7 @@ define("reference", }; function parseReference(ref, r) { - var rest = parseBook(ref, r.start, r); + var rest = ParseBook(ref, r.start, r); rest = parseFirstNum(rest, r.start, r); rest = maybeParseSecondNum(rest, r.start, r); rest = maybeParseRangeSep(rest, r, r); @@ -28,9 +28,10 @@ define("reference", return r; } - function parseBook(ref, data, errAcc) { + function ParseBook(ref, data, errAcc) { ref = ref.toLowerCase().trim(); var fbook = ref.substring(0, ref.search(/\w\s+\d/i)+1); + if (!fbook) fbook = ref; var rest = ref.slice(ref.search(/\w\s+\d/i)+1); if (fbook.search(/\b(genesis|gen|ge|gn)\b/i) != -1) { @@ -438,7 +439,7 @@ define("reference", return rest; } - function parseFirstNum(ref, r, errAcc) { + function parseFirstNum(ref, r, errAcr) { ref = ref.ltrim(); var found = false; for (var i = 0; i <= ref.length; i++) { @@ -498,7 +499,7 @@ define("reference", } function maybeParseBook(ref, r, errAcc) { - return maybeDo(ref, r, errAcc, parseBook); + return maybeDo(ref, r, errAcc, ParseBook); } function maybeParseSecondNum(ref, r, errAcc, skipColon) { @@ -670,7 +671,8 @@ define("reference", }; return { Parse: function(ref) {return new Reference(ref);}, - bookName: bookName + ParseBook: ParseBook, + BookName: bookName }; } ); diff --git a/package.json b/package.json index bbcb57f0..eb67df2e 100644 --- a/package.json +++ b/package.json @@ -4,5 +4,5 @@ "dependencies": {"requirejs": ">=2.1.9"}, "scripts": {"test": "node test/all.js"}, "files": ["./js"], - "devDependencies": {"test": ">=0.0.5"} + "devDependencies": {"test": ">=0.0.5", "cjson": ">=1.0.0"} } diff --git a/test/all.js b/test/all.js index ea897bda..7ddc010d 100644 --- a/test/all.js +++ b/test/all.js @@ -1,3 +1,4 @@ require('./ref-tests.js').init(exports); +require('./data-quality-tests.js').init(exports); if (module == require.main) require('test').run(exports); diff --git a/test/data-quality-tests.js b/test/data-quality-tests.js new file mode 100644 index 00000000..7678f704 --- /dev/null +++ b/test/data-quality-tests.js @@ -0,0 +1,42 @@ +var requirejs = require('./require-injector').requirejs; + +var cjson = require('cjson'); + +var loadBibleData = function(b, ch) { + return cjson.load('bibles/kjv_strongs/' + b.book + '-' + ch + ".json"); +}; + +var init = function(exports) { + exports['test data quality'] = function(assert, done) { + requirejs(['reference'], function(r) { + for (var i =1; i <= 66; i++) { + var b = {sentinel: true}; + var err = {}; + var bName = r.BookName(i); + r.ParseBook(bName, b, err); + if (!b.book) { + assert.error("Got undefined for book", bName); + } + if (err.err) { + assert.error(err.err); + continue; + } + for (var j = 1; j <= b.lastchapter; j++) { + var ch = loadBibleData(b, j); + if (!ch) { + assert.err("Got undefined for " + bName + " chapter " + j); + } + assert.equal(ch.ch, j, bName + " chapter " + ch.ch + "==" + j); + } + } + done(); + }); + }; +}; + +module.exports = {init: init}; + +if (module == require.main) { + init(exports); + require('test').run(exports); +}