Xml_Test.ts 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import {IXmlElement} from "../../../src/Common/FileIO/Xml";
  2. import {TestUtils} from "../../Util/TestUtils";
  3. import {OpenSheetMusicDisplay} from "../../../src/OpenSheetMusicDisplay/OpenSheetMusicDisplay";
  4. // Test XML simple document
  5. const xmlTestData: string = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
  6. <!DOCTYPE score-partwise PUBLIC \"-//Recordare//DTD MusicXML 2.0 Partwise//EN\" \"http://www.musicxml.org/dtds/partwise.dtd\">\
  7. <score-partwise> <identification> <encoding> <software>Example Software name</software> \
  8. <encoding-date>2016-04-04</encoding-date> </encoding> </identification> <credit page=\"1\"> \
  9. <credit-words justify=\"center\" valign=\"top\">Example Credit Words</credit-words> </credit> </score-partwise>";
  10. describe("XML interface", () => {
  11. const parser: DOMParser = new DOMParser();
  12. const doc: Document = parser.parseFromString(xmlTestData, "text/xml");
  13. const documentElement: IXmlElement = new IXmlElement(doc.documentElement);
  14. // Test all the following xml files:
  15. const xmlTestset: string[] = [
  16. "ActorPreludeSample.xml",
  17. "Beethoven_AnDieFerneGeliebte.xml",
  18. "CharlesGounod_Meditation.xml",
  19. "Debussy_Mandoline.xml",
  20. "Dichterliebe01.xml",
  21. "JohannSebastianBach_Air.xml",
  22. "JohannSebastianBach_PraeludiumInCDur_BWV846_1.xml",
  23. "JosephHaydn_ConcertanteCello.xml",
  24. "Mozart_AnChloe.xml",
  25. "Mozart_DasVeilchen.xml",
  26. "MuzioClementi_SonatinaOpus36No1_Part1.xml",
  27. "MuzioClementi_SonatinaOpus36No1_Part2.xml",
  28. "MuzioClementi_SonatinaOpus36No3_Part1.xml",
  29. "MuzioClementi_SonatinaOpus36No3_Part2.xml",
  30. "Saltarello.xml",
  31. "ScottJoplin_EliteSyncopations.xml",
  32. "ScottJoplin_The_Entertainer.xml",
  33. "TelemannWV40.102_Sonate-Nr.1.1-Dolce.xml",
  34. "TelemannWV40.102_Sonate-Nr.1.2-Allegro-F-Dur.xml",
  35. "ChordSpacingTest.musicxml",
  36. "sus4_test.musicxml",
  37. "Cmmaj9_test.xml",
  38. ];
  39. for (const score of xmlTestset) {
  40. testFile(score);
  41. }
  42. // Generates a test for a mxl file name
  43. function testFile(scoreName: string): void {
  44. it(scoreName, (done: Mocha.Done) => {
  45. // Load the xml file content
  46. const score: Document = TestUtils.getScore(scoreName);
  47. const div: HTMLElement = document.createElement("div");
  48. const openSheetMusicDisplay: OpenSheetMusicDisplay =
  49. TestUtils.createOpenSheetMusicDisplay(div);
  50. openSheetMusicDisplay.load(score);
  51. done();
  52. }).timeout(10000);
  53. }
  54. it("test IXmlElement", (done: Mocha.Done) => {
  55. // Test name attribute
  56. chai.expect(documentElement.name).to.equal("score-partwise");
  57. // Test element method
  58. chai.should().exist(documentElement.element("identification"));
  59. // Test value attribute
  60. chai.expect(documentElement
  61. .element("identification")
  62. .element("encoding")
  63. .element("software").value).to.equal("Example Software name");
  64. done();
  65. });
  66. it("test IXmlAttribute", (done: Mocha.Done) => {
  67. // Test attributes method
  68. chai.expect(
  69. documentElement.element("credit").attributes()[0].name
  70. ).to.equal("page");
  71. const creditWords: IXmlElement =
  72. documentElement.element("credit").element("credit-words");
  73. // Test attributes method
  74. chai.expect(creditWords.attributes().length).to.equal(2);
  75. // Test value attribute
  76. chai.expect(creditWords.attribute("justify").value).to.equal("center");
  77. done();
  78. });
  79. });