| describe("Tie Slur", function () { | |
| var abcMultipartTie = | |
| "X:1\n" + | |
| "%%staffwidth 200\n" + | |
| "M:C\n" + | |
| "K:E\n" + | |
| "[V:T1] G8-|\n" + | |
| "[V:B1] c8-|\n" + | |
| "[V:T1] G8-|\n" + | |
| "G8||\n" + | |
| "[V:B1] c8-|\n" + | |
| "c8||\n" | |
| var expectedMultipartTie = [ | |
| {line: 0, staff: 0, startTie: {}, endTie: undefined}, | |
| {line: 0, staff: 1, startTie: {}, endTie: undefined}, | |
| {line: 1, staff: 0, startTie: {}, endTie: true}, | |
| {line: 1, staff: 1, startTie: {}, endTie: true}, | |
| {line: 2, staff: 0, startTie: undefined, endTie: true}, | |
| {line: 2, staff: 1, startTie: undefined, endTie: true}, | |
| ] | |
| var abcMultipartChordTie = | |
| "X:1\n" + | |
| "%%staffwidth 200\n" + | |
| "M:C\n" + | |
| "K:E\n" + | |
| "[V:T1] [GB]8-|\n" + | |
| "[V:B1] [ce]8-|\n" + | |
| "[V:T1] [GB]8-|\n" + | |
| "[GB]8||\n" + | |
| "[V:B1] [ce]8-|\n" + | |
| "[ce]8||\n" | |
| var expectedMultipartChordTie = [ | |
| {line: 0, staff: 0, startTie: {}, endTie: undefined}, | |
| {line: 0, staff: 0, startTie: {}, endTie: undefined}, | |
| {line: 0, staff: 1, startTie: {}, endTie: undefined}, | |
| {line: 0, staff: 1, startTie: {}, endTie: undefined}, | |
| {line: 1, staff: 0, startTie: {}, endTie: true}, | |
| {line: 1, staff: 0, startTie: {}, endTie: true}, | |
| {line: 1, staff: 1, startTie: {}, endTie: true}, | |
| {line: 1, staff: 1, startTie: {}, endTie: true}, | |
| {line: 2, staff: 0, startTie: undefined, endTie: true}, | |
| {line: 2, staff: 0, startTie: undefined, endTie: true}, | |
| {line: 2, staff: 1, startTie: undefined, endTie: true}, | |
| {line: 2, staff: 1, startTie: undefined, endTie: true}, | |
| ] | |
| var abcMultipartOneStaffChordTie = | |
| "X:1\n" + | |
| "%%staffwidth 200\n" + | |
| "%%staves (T1 B1)\n" + | |
| "M:C\n" + | |
| "K:E\n" + | |
| "[V:T1] [GB]8-|\n" + | |
| "[V:B1] [ce]8-|\n" + | |
| "[V:T1] [GB]8-|\n" + | |
| "[GB]8||\n" + | |
| "[V:B1] [ce]8-|\n" + | |
| "[ce]8||\n" | |
| var expectedMultipartOneStaffChordTie = [ | |
| {line: 0, staff: 0, startTie: {}, endTie: undefined}, | |
| {line: 0, staff: 0, startTie: {}, endTie: undefined}, | |
| {line: 0, staff: 0, startTie: {}, endTie: undefined}, | |
| {line: 0, staff: 0, startTie: {}, endTie: undefined}, | |
| {line: 1, staff: 0, startTie: {}, endTie: true}, | |
| {line: 1, staff: 0, startTie: {}, endTie: true}, | |
| {line: 1, staff: 0, startTie: {}, endTie: true}, | |
| {line: 1, staff: 0, startTie: {}, endTie: true}, | |
| {line: 2, staff: 0, startTie: undefined, endTie: true}, | |
| {line: 2, staff: 0, startTie: undefined, endTie: true}, | |
| {line: 2, staff: 0, startTie: undefined, endTie: true}, | |
| {line: 2, staff: 0, startTie: undefined, endTie: true}, | |
| ] | |
| var abcMultipartTieHeight = | |
| "X:1\n" + | |
| "%%stretchlast 1\n" + | |
| "L:1/8\n" + | |
| "M:4/4\n" + | |
| "K:D\n" + | |
| "%%score (S A) (T B)\n" + | |
| "V:S clef=treble middle=B stem=up\n" + | |
| "V:A clef=treble middle=B stem=down\n" + | |
| "V:T clef=bass,, stem=up\n" + | |
| "V:B clef=bass,, stem=down\n" + | |
| "[V:S]\n" + | |
| "F2|F2 EF G2 E2|C6||\n" + | |
| "[V:A]\n" + | |
| "D2|D2 C=C B,2 B,2|A,6||\n" + | |
| "[V:T]\n" + | |
| "A,2|A,2(G,A,)G,2G,2|G,6||\n" + | |
| "[V:B]\n" + | |
| "D,2|D,2A,,A,,G,,2G,,2|A,,6||\n" | |
| var expectedMultipartTieHeight = [ 14, 20 ] | |
| it('multipart-tie', function() { | |
| doParseTest(abcMultipartTie, expectedMultipartTie) | |
| }) | |
| it('multipart-chord-tie', function() { | |
| doParseTest(abcMultipartChordTie, expectedMultipartChordTie) | |
| }) | |
| it('multipart-one-staff-chord-tie', function() { | |
| doParseTest(abcMultipartOneStaffChordTie, expectedMultipartOneStaffChordTie) | |
| }) | |
| it('multipart-tie-height', function() { | |
| doHeightTest(abcMultipartTieHeight, expectedMultipartTieHeight) | |
| }) | |
| function doHeightTest(abc, expected) { | |
| var visualObj = abcjs.renderAbc("paper", abc, {}); | |
| var actual = [] | |
| for (var i = 0; i < visualObj[0].lines.length; i++) { | |
| var line = visualObj[0].lines[i] | |
| for (var j = 0; j < line.staffGroup.staffs.length; j++) { | |
| var staff = line.staffGroup.staffs[j] | |
| actual.push(Math.round(staff.top)) | |
| } | |
| } | |
| chai.assert.deepStrictEqual(actual, expected); | |
| } | |
| function doParseTest(abc, expected) { | |
| var visualObj = abcjs.renderAbc("paper", abc, {}); | |
| var actual = [] | |
| for (var i = 0; i < visualObj[0].lines.length; i++) { | |
| var line = visualObj[0].lines[i] | |
| for (var j = 0; j < line.staff.length; j++) { | |
| var staff = line.staff[j] | |
| for (var k = 0; k < staff.voices.length; k++) { | |
| var voice = staff.voices[k] | |
| for (var ii = 0; ii < voice.length; ii++) { | |
| var elem = voice[ii] | |
| if (elem.pitches) { | |
| for (var jj = 0; jj < elem.pitches.length; jj++) { | |
| var pitch = elem.pitches[jj] | |
| actual.push({line: i, staff: j, startTie: pitch.startTie, endTie: pitch.endTie}) | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| console.log(actual) | |
| chai.assert.deepStrictEqual(actual, expected); | |
| } | |
| }) | |