* Split core lib into multiple files * Refactor data encoding methods * Refactor data masking process * Improve qr code generation process * Increase minimum required node version to 0.10 * Add linter * Add tests and tests coverage * Update travis config to fix compilation issues * Add examples folder * Add missing license tag in package.json * Update build script and add sourcemap support * Publish only strictly needed files on npm * Update readme
136 lines
5.3 KiB
JavaScript
136 lines
5.3 KiB
JavaScript
var test = require('tap').test
|
|
var Version = require('core/version')
|
|
var ECLevel = require('core/error-correction-level')
|
|
var ByteData = require('core/byte-data')
|
|
|
|
var EXPECTED_CAPACITY = [
|
|
[17, 14, 11, 7],
|
|
[32, 26, 20, 14],
|
|
[53, 42, 32, 24],
|
|
[78, 62, 46, 34],
|
|
[106, 84, 60, 44],
|
|
[134, 106, 74, 58],
|
|
[154, 122, 86, 64],
|
|
[192, 152, 108, 84],
|
|
[230, 180, 130, 98],
|
|
[271, 213, 151, 119],
|
|
[321, 251, 177, 137],
|
|
[367, 287, 203, 155],
|
|
[425, 331, 241, 177],
|
|
[458, 362, 258, 194],
|
|
[520, 412, 292, 220],
|
|
[586, 450, 322, 250],
|
|
[644, 504, 364, 280],
|
|
[718, 560, 394, 310],
|
|
[792, 624, 442, 338],
|
|
[858, 666, 482, 382],
|
|
[929, 711, 509, 403],
|
|
[1003, 779, 565, 439],
|
|
[1091, 857, 611, 461],
|
|
[1171, 911, 661, 511],
|
|
[1273, 997, 715, 535],
|
|
[1367, 1059, 751, 593],
|
|
[1465, 1125, 805, 625],
|
|
[1528, 1190, 868, 658],
|
|
[1628, 1264, 908, 698],
|
|
[1732, 1370, 982, 742],
|
|
[1840, 1452, 1030, 790],
|
|
[1952, 1538, 1112, 842],
|
|
[2068, 1628, 1168, 898],
|
|
[2188, 1722, 1228, 958],
|
|
[2303, 1809, 1283, 983],
|
|
[2431, 1911, 1351, 1051],
|
|
[2563, 1989, 1423, 1093],
|
|
[2699, 2099, 1499, 1139],
|
|
[2809, 2213, 1579, 1219],
|
|
[2953, 2331, 1663, 1273]
|
|
]
|
|
|
|
var EXPECTED_VERSION_BITS = [
|
|
0x07C94, 0x085BC, 0x09A99, 0x0A4D3, 0x0BBF6, 0x0C762, 0x0D847, 0x0E60D,
|
|
0x0F928, 0x10B78, 0x1145D, 0x12A17, 0x13532, 0x149A6, 0x15683, 0x168C9,
|
|
0x177EC, 0x18EC4, 0x191E1, 0x1AFAB, 0x1B08E, 0x1CC1A, 0x1D33F, 0x1ED75,
|
|
0x1F250, 0x209D5, 0x216F0, 0x228BA, 0x2379F, 0x24B0B, 0x2542E, 0x26A64,
|
|
0x27541, 0x28C69
|
|
]
|
|
|
|
test('Version validity', function (t) {
|
|
t.notOk(Version.isValidVersion(), 'Should return false if no input')
|
|
t.notOk(Version.isValidVersion(''), 'Should return false if version is not a number')
|
|
t.notOk(Version.isValidVersion(0), 'Should return false if version is not in range')
|
|
t.notOk(Version.isValidVersion(41), 'Should return false if version is not in range')
|
|
|
|
t.end()
|
|
})
|
|
|
|
test('Version capacity', function (t) {
|
|
t.throws(function () { Version.getCapacity() }, 'Should throw if version is undefined')
|
|
t.throws(function () { Version.getCapacity('') }, 'Should throw if version is not a number')
|
|
t.throws(function () { Version.getCapacity(0) }, 'Should throw if version is not in range')
|
|
t.throws(function () { Version.getCapacity(41) }, 'Should throw if version is not in range')
|
|
|
|
for (var i = 1; i <= 40; i++) {
|
|
t.equal(Version.getCapacity(i, ECLevel.L), EXPECTED_CAPACITY[i - 1][0], 'Should return correct capacity')
|
|
t.equal(Version.getCapacity(i, ECLevel.M), EXPECTED_CAPACITY[i - 1][1], 'Should return correct capacity')
|
|
t.equal(Version.getCapacity(i, ECLevel.Q), EXPECTED_CAPACITY[i - 1][2], 'Should return correct capacity')
|
|
t.equal(Version.getCapacity(i, ECLevel.H), EXPECTED_CAPACITY[i - 1][3], 'Should return correct capacity')
|
|
}
|
|
|
|
t.end()
|
|
})
|
|
|
|
test('Version best match', function (t) {
|
|
var levels = [ECLevel.L, ECLevel.M, ECLevel.Q, ECLevel.H]
|
|
|
|
for (var v = 0; v < 40; v++) {
|
|
for (var l = 0; l < levels.length; l++) {
|
|
var capacity = EXPECTED_CAPACITY[v][l]
|
|
var dataArray = new Array(capacity)
|
|
var dataString = new Array(capacity + 1).join(' ')
|
|
var dataBuffer = new Buffer(capacity)
|
|
var byteData = new ByteData(new Array(capacity))
|
|
|
|
t.equal(Version.getBestVersionForData(dataArray, levels[l]), v + 1, 'Should return best version')
|
|
t.equal(Version.getBestVersionForData(dataString, levels[l]), v + 1, 'Should return best version')
|
|
t.equal(Version.getBestVersionForData(dataBuffer, levels[l]), v + 1, 'Should return best version')
|
|
t.equal(Version.getBestVersionForData(byteData, levels[l]), v + 1, 'Should return best version')
|
|
|
|
if (l === 3) {
|
|
t.deepEqual(Version.getBestVersionForData(dataArray), v + 1, 'Should return best version for ECLevel.H if error level is undefined')
|
|
t.deepEqual(Version.getBestVersionForData(dataString), v + 1, 'Should return best version for ECLevel.H if error level is undefined')
|
|
t.deepEqual(Version.getBestVersionForData(dataBuffer), v + 1, 'Should return best version for ECLevel.H if error level is undefined')
|
|
t.deepEqual(Version.getBestVersionForData(byteData), v + 1, 'Should return best version for ECLevel.H if error level is undefined')
|
|
}
|
|
}
|
|
}
|
|
|
|
for (var i = 0; i < levels.length; i++) {
|
|
var exceededCapacity = EXPECTED_CAPACITY[39][i] + 1
|
|
var tooBigDataArray = new Array(exceededCapacity)
|
|
var tooBigDataString = new Array(exceededCapacity + 1).join('-')
|
|
var tooBigDataBuffer = new Buffer(exceededCapacity)
|
|
var tooBigByteData = new ByteData(new Array(exceededCapacity))
|
|
|
|
t.notOk(Version.getBestVersionForData(tooBigDataArray, levels[i]), 'Should return undefined if data is too big')
|
|
t.notOk(Version.getBestVersionForData(tooBigDataString, levels[i]), 'Should return undefined if data is too big')
|
|
t.notOk(Version.getBestVersionForData(tooBigDataBuffer, levels[i]), 'Should return undefined if data is too big')
|
|
t.notOk(Version.getBestVersionForData(tooBigByteData, levels[i]), 'Should return undefined if data is too big')
|
|
}
|
|
|
|
t.end()
|
|
})
|
|
|
|
test('Version encoded info', function (t) {
|
|
var v
|
|
|
|
for (v = 0; v < 7; v++) {
|
|
t.throws(function () { Version.getEncodedBits(v) }, 'Should throw if version is invalid or less than 7')
|
|
}
|
|
|
|
for (v = 7; v <= 40; v++) {
|
|
var bch = Version.getEncodedBits(v)
|
|
t.equal(bch, EXPECTED_VERSION_BITS[v - 7], 'Should return correct bits')
|
|
}
|
|
|
|
t.end()
|
|
})
|