|
|
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)) |
|
|
|
|
|
} |
|
|
}) |
|
|
|