128 lines
3.8 KiB
JavaScript
128 lines
3.8 KiB
JavaScript
const test = require('tap').test
|
|
const Mode = require('core/mode')
|
|
|
|
test('Mode bits', function (t) {
|
|
const EXPECTED_BITS = {
|
|
numeric: 1,
|
|
alphanumeric: 2,
|
|
byte: 4,
|
|
kanji: 8,
|
|
mixed: -1
|
|
}
|
|
|
|
t.equal(Mode.NUMERIC.bit, EXPECTED_BITS.numeric)
|
|
t.equal(Mode.ALPHANUMERIC.bit, EXPECTED_BITS.alphanumeric)
|
|
t.equal(Mode.BYTE.bit, EXPECTED_BITS.byte)
|
|
t.equal(Mode.KANJI.bit, EXPECTED_BITS.kanji)
|
|
t.equal(Mode.MIXED.bit, EXPECTED_BITS.mixed)
|
|
|
|
t.end()
|
|
})
|
|
|
|
test('Char count bits', function (t) {
|
|
const EXPECTED_BITS = {
|
|
numeric: [10, 12, 14],
|
|
alphanumeric: [9, 11, 13],
|
|
byte: [8, 16, 16],
|
|
kanji: [8, 10, 12]
|
|
}
|
|
|
|
let v
|
|
for (v = 1; v < 10; v++) {
|
|
t.equal(Mode.getCharCountIndicator(Mode.NUMERIC, v), EXPECTED_BITS.numeric[0])
|
|
t.equal(Mode.getCharCountIndicator(Mode.ALPHANUMERIC, v), EXPECTED_BITS.alphanumeric[0])
|
|
t.equal(Mode.getCharCountIndicator(Mode.BYTE, v), EXPECTED_BITS.byte[0])
|
|
t.equal(Mode.getCharCountIndicator(Mode.KANJI, v), EXPECTED_BITS.kanji[0])
|
|
}
|
|
|
|
for (v = 10; v < 27; v++) {
|
|
t.equal(Mode.getCharCountIndicator(Mode.NUMERIC, v), EXPECTED_BITS.numeric[1])
|
|
t.equal(Mode.getCharCountIndicator(Mode.ALPHANUMERIC, v), EXPECTED_BITS.alphanumeric[1])
|
|
t.equal(Mode.getCharCountIndicator(Mode.BYTE, v), EXPECTED_BITS.byte[1])
|
|
t.equal(Mode.getCharCountIndicator(Mode.KANJI, v), EXPECTED_BITS.kanji[1])
|
|
}
|
|
|
|
for (v = 27; v <= 40; v++) {
|
|
t.equal(Mode.getCharCountIndicator(Mode.NUMERIC, v), EXPECTED_BITS.numeric[2])
|
|
t.equal(Mode.getCharCountIndicator(Mode.ALPHANUMERIC, v), EXPECTED_BITS.alphanumeric[2])
|
|
t.equal(Mode.getCharCountIndicator(Mode.BYTE, v), EXPECTED_BITS.byte[2])
|
|
t.equal(Mode.getCharCountIndicator(Mode.KANJI, v), EXPECTED_BITS.kanji[2])
|
|
}
|
|
|
|
t.throw(function () { Mode.getCharCountIndicator({}, 1) },
|
|
'Should throw if mode is invalid')
|
|
|
|
t.throw(function () { Mode.getCharCountIndicator(Mode.BYTE, 0) },
|
|
'Should throw if version is invalid')
|
|
|
|
t.end()
|
|
})
|
|
|
|
test('Best mode', function (t) {
|
|
/* eslint-disable quote-props */
|
|
const EXPECTED_MODE = {
|
|
'12345': Mode.NUMERIC,
|
|
'abcde': Mode.BYTE,
|
|
'1234a': Mode.BYTE,
|
|
'ABCDa': Mode.BYTE,
|
|
'ABCDE': Mode.ALPHANUMERIC,
|
|
'12ABC': Mode.ALPHANUMERIC,
|
|
'乂ЁЖぞβ': Mode.KANJI,
|
|
'ΑΒΓψωЮЯабв': Mode.KANJI,
|
|
'皿a晒三': Mode.BYTE
|
|
}
|
|
|
|
Object.keys(EXPECTED_MODE).forEach(function (data) {
|
|
t.equal(Mode.getBestModeForData(data), EXPECTED_MODE[data],
|
|
'Should return mode ' + Mode.toString(EXPECTED_MODE[data]) + ' for data: ' + data)
|
|
})
|
|
|
|
t.end()
|
|
})
|
|
|
|
test('Is valid', function (t) {
|
|
t.ok(Mode.isValid(Mode.NUMERIC))
|
|
t.ok(Mode.isValid(Mode.ALPHANUMERIC))
|
|
t.ok(Mode.isValid(Mode.BYTE))
|
|
t.ok(Mode.isValid(Mode.KANJI))
|
|
|
|
t.notOk(Mode.isValid(undefined))
|
|
t.notOk(Mode.isValid({ bit: 1 }))
|
|
t.notOk(Mode.isValid({ ccBits: [] }))
|
|
|
|
t.end()
|
|
})
|
|
|
|
test('From value', function (t) {
|
|
const modes = [
|
|
{ name: 'numeric', mode: Mode.NUMERIC },
|
|
{ name: 'alphanumeric', mode: Mode.ALPHANUMERIC },
|
|
{ name: 'kanji', mode: Mode.KANJI },
|
|
{ name: 'byte', mode: Mode.BYTE }
|
|
]
|
|
|
|
for (let m = 0; m < modes.length; m++) {
|
|
t.equal(Mode.from(modes[m].name), modes[m].mode)
|
|
t.equal(Mode.from(modes[m].name.toUpperCase()), modes[m].mode)
|
|
t.equal(Mode.from(modes[m].mode), modes[m].mode)
|
|
}
|
|
|
|
t.equal(Mode.from('', Mode.NUMERIC), Mode.NUMERIC,
|
|
'Should return default value if mode is invalid')
|
|
|
|
t.equal(Mode.from(null, Mode.NUMERIC), Mode.NUMERIC,
|
|
'Should return default value if mode undefined')
|
|
|
|
t.end()
|
|
})
|
|
|
|
test('To string', function (t) {
|
|
t.equal(Mode.toString(Mode.NUMERIC), 'Numeric')
|
|
t.equal(Mode.toString(Mode.ALPHANUMERIC), 'Alphanumeric')
|
|
t.equal(Mode.toString(Mode.BYTE), 'Byte')
|
|
t.equal(Mode.toString(Mode.KANJI), 'Kanji')
|
|
|
|
t.throw(function () { Mode.toString({}) }, 'Should throw if mode is invalid')
|
|
|
|
t.end()
|
|
})
|