abcjs / tests /visual /svg.test.js
KEXEL's picture
Upload 337 files
af6912c verified
describe("SVG Creation", function() {
var abcSingleNote = "X:1\n" +
"L:1/4\n" +
"%%staffwidth 5\n" +
"%%musicspace 0\n" +
"K:C clef=none\n" +
"V:all stem=up\n" +
"B4\n"
var abcTimeSigList = "X:1\n" +
"L:1/4\n" +
"%%staffwidth 12\n" +
"%%musicspace 0\n" +
"K:C clef=none stafflines=0\n" +
"[M:2/4]y[M:3/4]y[M:4/4]\n"
var abc128Group = "X:1\n" +
"L:1/4\n" +
"M:12/8\n" +
"K:C clef=none\n" +
"A4\n"
var abc128Results = [
{"klass":"abcjs-staff-extra abcjs-time-signature abcjs-l0 abcjs-m0 abcjs-mm0 abcjs-v0","dataName":"staff-extra time-signature"},
{"klass":null,"dataName":"12"},
{"klass":null,"dataName":null},
{"klass":null,"dataName":null},
{"klass":null,"dataName":"8"}
]
it("single-note-compact", function() {
testSvg(abcSingleNote)
testCenter("note")
})
it("time-sig-list-compact", function() {
testSvg(abcTimeSigList)
testCenterGroup()
})
it("12-8-group", function() {
testSvg(abc128Group)
timeSigTest(abc128Results)
})
function testSvg(abc) {
abcjs.renderAbc("paper", abc, { add_classes: true, showDebug: [ 'box', 'grid' ], paddingleft: 0, paddingtop: 0, paddingright: 0, paddingbottom: 0 });
}
function testCenter(nameType) {
var svg = document.querySelector("#paper svg")
var width = svg.getAttribute("width")
var height = svg.getAttribute("height")
var svgXCenter = width/2
var svgYCenter = height/2
var item = svg.querySelector('[data-name="' + nameType + '"]')
var box = item.getBBox()
var xCenter = box.x + box.width / 2;
var yCenter = box.y + box.height / 2;
var xDiff = Math.abs(xCenter - svgXCenter)
var yDiff = Math.abs(yCenter - svgYCenter)
chai.assert.isBelow(xDiff,1, "X coordinate not centered (exp: " + svgXCenter + " act: " + xCenter + ")")
chai.assert.isBelow(yDiff,1, "Y coordinate not centered (exp: " + svgYCenter + " act: " + yCenter + ")")
}
function testCenterGroup() {
var svg = document.querySelector("#paper svg")
var width = svg.getAttribute("width")
var height = svg.getAttribute("height")
var svgXCenter = Math.round(width/2)
var svgYCenter = Math.round(height/2)
var items = svg.querySelectorAll('g')
var box1 = items[0].getBBox()
var box2 = items[items.length-1].getBBox()
var xCenter = Math.round(box1.x + (box1.x + box2.x + box2.width) / 2);
var yCenter = Math.round(box1.y + box1.height / 2);
chai.assert.equal(xCenter,svgXCenter, "X coordinate not centered")
chai.assert.equal(yCenter,svgYCenter, "Y coordinate not centered")
}
function getDataNameAndClass(el) {
var klass = el.getAttribute("class")
var dataName = el.getAttribute("data-name")
return { klass: klass, dataName: dataName }
}
function timeSigTest(expected) {
var timeSig = document.querySelector("#paper .abcjs-time-signature")
var actual = [];
actual.push(getDataNameAndClass(timeSig))
var children = timeSig.children
for (var i = 0; i < children.length; i++) {
var child = children[i]
actual.push(getDataNameAndClass(child))
for (var j = 0; j < child.children.length; j++) {
var grandChild = child.children[j]
actual.push(getDataNameAndClass(grandChild))
}
}
chai.assert.deepEqual(actual, expected, JSON.stringify(actual))
//console.log(JSON.stringify(actual))
}
})