File size: 3,250 Bytes
af6912c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
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))
	}
})