abcjs / tests /visual /directives.test.js
KEXEL's picture
Upload 337 files
af6912c verified
describe("Directives", function() {
var stretchLastAbc1 = "M:4/4\ncdef cdef|";
var stretchLastFalse1 = [70.846, 100.846, 130.846, 160.846, 190.846, 220.846, 250.846, 280.846];
var stretchLastTrue1 = [70.846, 156.24025, 241.6345, 327.02875, 412.423, 497.81725, 583.2115, 668.60575];
it("stretchlast", function() {
allTests(stretchLastAbc1, "stretchlast", stretchLastFalse1,
[ false, true, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1],
[ stretchLastFalse1, stretchLastTrue1, stretchLastFalse1, stretchLastFalse1, stretchLastFalse1,
stretchLastFalse1, stretchLastFalse1, stretchLastFalse1, stretchLastTrue1, stretchLastTrue1, stretchLastTrue1,
stretchLastTrue1, stretchLastTrue1
]
);
})
var voiceColorAbc = 'K:C\nV:1\nC\nV:2\n%%voicecolor orange\nE\nV:3\n%%voicecolor "#f0a0f0"\nG\nV:4\nB\nV:1\n%%voicecolor blue\nC\nV:2\nE\nV:3\nG\nV:4\nB\n'
var voiceColorExpected = [ 'currentColor', 'orange', '#f0a0f0', 'currentColor', 'blue', 'orange', '#f0a0f0', 'currentColor', ]
var voiceColorAbc2 = '%%staves (1 2 3 4)\nK:C\nV:1\nC,\nV:2\n%%voicecolor "orange"\nE\nV:3\n%%voicecolor "#f0a0f0"\ne\nV:4\nb\'\nV:1\n%%voicecolor blue\nC,\nV:2\nE\nV:3\ne\nV:4\nb\'\n'
it("voicecolor", function() {
doColorTest(voiceColorAbc, voiceColorExpected)
doColorTest(voiceColorAbc2, voiceColorExpected)
})
var abcRemark = "DEF [r:and this is a remark] FED:|\n"
var abcRemarkExpected = ['note', 'note', 'note', 'note', 'note', 'note', 'bar']
it("remark", function() {
doNoteTest(abcRemark, abcRemarkExpected)
})
})
function allTests(abc, directive, blankExpected, values, expectedArray) {
doDirectiveTest(abc, {}, blankExpected, "undefined");
for (var i = 0; i < values.length; i++) {
var formatting = {};
formatting[directive] = values[i];
doDirectiveTest(abc, { format: formatting}, expectedArray[i], "[param]" + directive + '=' + values[i]);
var directiveAbc = "%%" + directive + " " + values[i] + "\n" + abc;
doDirectiveTest(directiveAbc, { }, expectedArray[i], "[%%]" + directive + '=' + values[i]);
}
}
function doDirectiveTest(abc, params, expected, comment) {
var visualObj = abcjs.renderAbc("paper", abc, params);
var selectables = visualObj[0].engraver.selectables;
var xes = [];
for (var i = 0; i < selectables.length; i++)
xes.push(selectables[i].absEl.x);
var msg = comment + "\nrcv: " + JSON.stringify(xes) + "\n" +
"exp: " + JSON.stringify(expected) + "\n";
chai.assert.deepStrictEqual(xes, expected, msg);
}
function doColorTest(abc, expected) {
var visualObj = abcjs.renderAbc("paper", abc);
console.log(visualObj[0].lines[0].staff)
var els = document.querySelectorAll('[data-name="note"]')
var colors = []
for (var i = 0; i < els.length; i++)
colors.push(els[i].attributes.fill.value)
chai.assert.deepStrictEqual(colors, expected)
}
function doNoteTest(abc, expected) {
var visualObj = abcjs.renderAbc("paper", abc);
chai.assert.equal(visualObj[0].warnings, undefined)
var elements = [ ]
for (var i = 0; i < visualObj[0].lines[0].staff[0].voices[0].length; i++) {
var item = visualObj[0].lines[0].staff[0].voices[0][i]
elements.push(item.el_type)
}
chai.assert.deepStrictEqual(elements, expected)
}