DiffImages_Test_Experimental.ts 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { OpenSheetMusicDisplay, CanvasVexFlowBackend } from "../../src";
  2. import { TestUtils } from "./TestUtils";
  3. import * as fs from "fs";
  4. describe("GeneratePNGImages", () => {
  5. // Test all the following xml files:
  6. const sampleFilenames: string[] = [
  7. "Beethoven_AnDieFerneGeliebte.xml",
  8. // "CharlesGounod_Meditation.xml",
  9. // "Debussy_Mandoline.xml",
  10. // "Dichterliebe01.xml",
  11. // "JohannSebastianBach_Air.xml",
  12. // "JohannSebastianBach_PraeludiumInCDur_BWV846_1.xml",
  13. // "JosephHaydn_ConcertanteCello.xml",
  14. // "Mozart_AnChloe.xml",
  15. // "Mozart_DasVeilchen.xml",
  16. "MuzioClementi_SonatinaOpus36No1_Part1.xml",
  17. // "MuzioClementi_SonatinaOpus36No1_Part2.xml",
  18. // "MuzioClementi_SonatinaOpus36No3_Part1.xml",
  19. // "MuzioClementi_SonatinaOpus36No3_Part2.xml",
  20. // "Saltarello.xml",
  21. // "ScottJoplin_EliteSyncopations.xml",
  22. // "ScottJoplin_The_Entertainer.xml",
  23. // "TelemannWV40.102_Sonate-Nr.1.1-Dolce.xml",
  24. // "TelemannWV40.102_Sonate-Nr.1.2-Allegro-F-Dur.xml",
  25. ];
  26. for (const score of sampleFilenames) {
  27. testFile(score);
  28. }
  29. // Generates a test for a mxl file name
  30. function testFile(sampleFilename: string): void {
  31. it(sampleFilename, (done: MochaDone) => {
  32. // Load the xml file content
  33. const score: Document = TestUtils.getScore(sampleFilename);
  34. const div: HTMLElement = document.createElement("div");
  35. const openSheetMusicDisplay: OpenSheetMusicDisplay =
  36. new OpenSheetMusicDisplay(div, { autoResize: false, backend: "canvas"});
  37. openSheetMusicDisplay.load(score);
  38. const testDir: string = "../data/images";
  39. fs.mkdirSync(testDir, { recursive: true });
  40. const fileName: string = `${testDir}/${sampleFilename}.png`;
  41. console.log("before buffer");
  42. const canvasBackend: CanvasVexFlowBackend = openSheetMusicDisplay.Drawer.Backends[0] as CanvasVexFlowBackend;
  43. const imageData: string = (canvasBackend.getCanvas() as HTMLCanvasElement).toDataURL().split(";base64,").pop();
  44. const imageBuffer: Buffer = Buffer.from(imageData, "base64");
  45. //console.log("after buffer");
  46. //let arraybuffer = Uint8Array.from(imageBuffer, 'base64').buffer;
  47. // TODO doesn't work with Karma. This is the big problem that needs to be worked around with ts/Karma.
  48. fs.writeFileSync(fileName, imageBuffer, { encoding: "base64" });
  49. done();
  50. }).timeout(10000);
  51. }
  52. });