abcjs / tests /parse /start-char.test.js
KEXEL's picture
Upload 337 files
af6912c verified
describe("Start and End Char", function() {
var abcSlurs = 'M:4/4\n' +
'K:C\n' +
'L:1/16\n' +
'V: V0 clef=treble name="Sop."\n' +
'[V: V0].("^🚩""_II7"F4.(e4).(F4)e4)|';
var expectedSlurs = [
{"type":"clef"},
{"type":"timeSignature"},
{"type":"note","startChar":56,"endChar":69,"fragment":"\"^🚩\"\"_II7\"F4"},
{"type":"note","startChar":69,"endChar":74,"fragment":".(e4)"},
{"type":"note","startChar":74,"endChar":79,"fragment":".(F4)"},
{"type":"note","startChar":79,"endChar":82,"fragment":"e4)"},
{"type":"bar","startChar":82,"endChar":83,"fragment":"|"}
];
//////////////////////////////////////////////////////////
it("of slurs", function() {
doStartCharTest(abcSlurs, expectedSlurs);
});
});
//////////////////////////////////////////////////////////
function doStartCharTest(abc, expected) {
var visualObj = abcjs.renderAbc("paper", abc)[0];
// Remove all extraneous info so that just the start and end chars are considered.
var charPos = [];
for (var i = 0; i < visualObj.lines.length; i++) {
var line = visualObj.lines[i];
if (line.staffGroup) {
for (var j = 0; j < line.staffGroup.voices.length; j++) {
var voice = line.staffGroup.voices[j];
for (var k = 0; k < voice.children.length; k++) {
var element = voice.children[k];
var obj = { type: element.abcelem.el_type };
if (element.abcelem.startChar)
obj.startChar = element.abcelem.startChar;
if (element.abcelem.endChar)
obj.endChar = element.abcelem.endChar;
if (element.abcelem.startChar && element.abcelem.endChar)
obj.fragment = abc.substring(element.abcelem.startChar, element.abcelem.endChar)
charPos.push(obj);
}
}
}
}
console.log(JSON.stringify(charPos));
for (i = 0; i < expected.length; i++) {
var msg = "charPos\nRCV: " +
JSON.stringify(charPos[i]) + "\nEXP: " + JSON.stringify(expected[i]) + "\n";
chai.assert.deepStrictEqual(charPos[i], expected[i], msg);
}
}