OSMD_Test.ts 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. import chai = require("chai");
  2. import { OpenSheetMusicDisplay } from "../../../src/OpenSheetMusicDisplay/OpenSheetMusicDisplay";
  3. import { TestUtils } from "../../Util/TestUtils";
  4. describe("OpenSheetMusicDisplay Main Export", () => {
  5. let container1: HTMLElement;
  6. it("no container", (done: MochaDone) => {
  7. chai.expect(() => {
  8. return new OpenSheetMusicDisplay(undefined);
  9. }).to.throw(/container/);
  10. done();
  11. });
  12. it("container", (done: MochaDone) => {
  13. const div: HTMLElement = TestUtils.getDivElement(document);
  14. chai.expect(() => {
  15. return new OpenSheetMusicDisplay(div);
  16. }).to.not.throw(Error);
  17. done();
  18. });
  19. it("load MXL from string", (done: MochaDone) => {
  20. const mxl: string = TestUtils.getMXL("Mozart_Clarinet_Quintet_Excerpt.mxl");
  21. const div: HTMLElement = TestUtils.getDivElement(document);
  22. const opensheetmusicdisplay: OpenSheetMusicDisplay = TestUtils.createOpenSheetMusicDisplay(div);
  23. opensheetmusicdisplay.load(mxl).then(
  24. (_: {}) => {
  25. opensheetmusicdisplay.render();
  26. done();
  27. },
  28. done
  29. );
  30. });
  31. it("load invalid MXL from string", (done: MochaDone) => {
  32. const mxl: string = "\x50\x4b\x03\x04";
  33. const div: HTMLElement = TestUtils.getDivElement(document);
  34. const opensheetmusicdisplay: OpenSheetMusicDisplay = TestUtils.createOpenSheetMusicDisplay(div);
  35. opensheetmusicdisplay.load(mxl).then(
  36. (_: {}) => {
  37. done(new Error("Corrupted MXL appears to be loaded correctly"));
  38. },
  39. (exc: Error) => {
  40. if (exc.message.toLowerCase().match(/invalid/)) {
  41. done();
  42. } else {
  43. done(new Error("Unexpected error: " + exc.message));
  44. }
  45. }
  46. );
  47. });
  48. it("load XML string", (done: MochaDone) => {
  49. const score: Document = TestUtils.getScore("MuzioClementi_SonatinaOpus36No1_Part1.xml");
  50. const xml: string = new XMLSerializer().serializeToString(score);
  51. const div: HTMLElement = TestUtils.getDivElement(document);
  52. const opensheetmusicdisplay: OpenSheetMusicDisplay = TestUtils.createOpenSheetMusicDisplay(div);
  53. opensheetmusicdisplay.load(xml).then(
  54. (_: {}) => {
  55. opensheetmusicdisplay.render();
  56. done();
  57. },
  58. done
  59. );
  60. });
  61. it("load XML Document", (done: MochaDone) => {
  62. const score: Document = TestUtils.getScore("MuzioClementi_SonatinaOpus36No1_Part1.xml");
  63. const div: HTMLElement = TestUtils.getDivElement(document);
  64. const opensheetmusicdisplay: OpenSheetMusicDisplay = TestUtils.createOpenSheetMusicDisplay(div);
  65. opensheetmusicdisplay.load(score).then(
  66. (_: {}) => {
  67. opensheetmusicdisplay.render();
  68. done();
  69. },
  70. done
  71. );
  72. });
  73. it("Timeout from server", (done: MochaDone) => {
  74. const score: string = "https://httpstat.us/408";
  75. const div: HTMLElement = TestUtils.getDivElement(document);
  76. const opensheetmusicdisplay: OpenSheetMusicDisplay = TestUtils.createOpenSheetMusicDisplay(div);
  77. opensheetmusicdisplay.load(score).then(
  78. (_: {}) => {
  79. done(new Error("Unexpected response from server"));
  80. },
  81. (exc: Error) => {
  82. done();
  83. }
  84. );
  85. });
  86. it("load MXL Document by URL", (done: MochaDone) => {
  87. const url: string = "base/test/data/Mozart_Clarinet_Quintet_Excerpt.mxl";
  88. const div: HTMLElement = TestUtils.getDivElement(document);
  89. const opensheetmusicdisplay: OpenSheetMusicDisplay = TestUtils.createOpenSheetMusicDisplay(div);
  90. opensheetmusicdisplay.load(url).then(
  91. (_: {}) => {
  92. opensheetmusicdisplay.render();
  93. done();
  94. },
  95. done
  96. );
  97. });
  98. it("load something invalid by URL", (done: MochaDone) => {
  99. const url: string = "https://www.google.com";
  100. const div: HTMLElement = TestUtils.getDivElement(document);
  101. const opensheetmusicdisplay: OpenSheetMusicDisplay = TestUtils.createOpenSheetMusicDisplay(div);
  102. opensheetmusicdisplay.load(url).then(
  103. (_: {}) => {
  104. done(new Error("Invalid URL appears to be loaded correctly"));
  105. },
  106. (exc: Error) => {
  107. if (exc.message.toLowerCase().match(/opensheetmusicdisplay.*invalid/)) {
  108. done();
  109. } else {
  110. done(new Error("Unexpected error: " + exc.message));
  111. }
  112. }
  113. );
  114. }).timeout(5000);
  115. it("load invalid URL", (done: MochaDone) => {
  116. const url: string = "https://www.afjkhfjkauu2ui3z2uiu.com";
  117. const div: HTMLElement = TestUtils.getDivElement(document);
  118. const opensheetmusicdisplay: OpenSheetMusicDisplay = TestUtils.createOpenSheetMusicDisplay(div);
  119. opensheetmusicdisplay.load(url).then(
  120. (_: {}) => {
  121. done(new Error("Invalid URL appears to be loaded correctly"));
  122. },
  123. (exc: Error) => {
  124. if (exc.message.toLowerCase().match(/url/)) {
  125. done();
  126. } else {
  127. done(new Error("Unexpected error: " + exc.message));
  128. }
  129. }
  130. );
  131. }).timeout(5000);
  132. it("load invalid XML string", (done: MochaDone) => {
  133. const xml: string = "<?xml";
  134. const div: HTMLElement = TestUtils.getDivElement(document);
  135. const opensheetmusicdisplay: OpenSheetMusicDisplay = TestUtils.createOpenSheetMusicDisplay(div);
  136. opensheetmusicdisplay.load(xml).then(
  137. (_: {}) => {
  138. done(new Error("Corrupted XML appears to be loaded correctly"));
  139. },
  140. (exc: Error) => {
  141. if (exc.message.toLowerCase().match(/partwise/)) {
  142. done();
  143. } else {
  144. done(new Error("Unexpected error: " + exc.message));
  145. }
  146. }
  147. );
  148. });
  149. it("render without loading", (done: MochaDone) => {
  150. const div: HTMLElement = TestUtils.getDivElement(document);
  151. const opensheetmusicdisplay: OpenSheetMusicDisplay = TestUtils.createOpenSheetMusicDisplay(div);
  152. chai.expect(() => {
  153. return opensheetmusicdisplay.render();
  154. }).to.throw(/load/);
  155. done();
  156. });
  157. before((): void => {
  158. // Create the container for the "test width" test
  159. container1 = TestUtils.getDivElement(document);
  160. });
  161. after((): void => {
  162. // Destroy the container for the "test width" test
  163. document.body.removeChild(container1);
  164. });
  165. it("test width 500", (done: MochaDone) => {
  166. const div: HTMLElement = container1;
  167. div.style.width = "500px";
  168. const opensheetmusicdisplay: OpenSheetMusicDisplay = TestUtils.createOpenSheetMusicDisplay(div);
  169. const score: Document = TestUtils.getScore("MuzioClementi_SonatinaOpus36No1_Part1.xml");
  170. opensheetmusicdisplay.load(score).then(
  171. (_: {}) => {
  172. opensheetmusicdisplay.render();
  173. chai.expect(div.offsetWidth).to.equal(500);
  174. done();
  175. },
  176. done
  177. ).catch(done);
  178. });
  179. it("test width 200", (done: MochaDone) => {
  180. const div: HTMLElement = container1;
  181. div.style.width = "200px";
  182. const opensheetmusicdisplay: OpenSheetMusicDisplay = TestUtils.createOpenSheetMusicDisplay(div);
  183. const score: Document = TestUtils.getScore("MuzioClementi_SonatinaOpus36No1_Part1.xml");
  184. opensheetmusicdisplay.load(score).then(
  185. (_: {}) => {
  186. opensheetmusicdisplay.render();
  187. chai.expect(div.offsetWidth).to.equal(200);
  188. done();
  189. },
  190. done
  191. ).catch(done);
  192. });
  193. describe("cursor with hidden instrument", () => {
  194. let osmd: OpenSheetMusicDisplay;
  195. beforeEach(() => {
  196. const div: HTMLElement = TestUtils.getDivElement(document);
  197. osmd = TestUtils.createOpenSheetMusicDisplay(div);
  198. const score: Document =
  199. TestUtils.getScore("MuzioClementi_SonatinaOpus36No1_Part1.xml");
  200. return osmd.load(score)
  201. .then(() => {
  202. osmd.render();
  203. });
  204. });
  205. it("should move cursor after instrument is hidden", () => {
  206. osmd.Sheet.Instruments[1].Visible = false;
  207. osmd.render();
  208. osmd.cursor.show();
  209. for (let i: number = 0; i < 100; i++) {
  210. osmd.cursor.next();
  211. }
  212. });
  213. });
  214. });