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.
This commit is contained in:
Jeremy Wall (zaphar) 2013-11-16 16:18:36 -05:00
parent 9125607faf
commit 95e424f69f
4 changed files with 51 additions and 6 deletions

View File

@ -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
};
}
);

View File

@ -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"}
}

View File

@ -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);

View File

@ -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);
}