Kaynağa Gözat

Added test for mxl

Andrea Condoluci 9 yıl önce
ebeveyn
işleme
4a269971d2
2 değiştirilmiş dosya ile 32 ekleme ve 2 silme
  1. 20 2
      src/Common/FileIO/Mxl.ts
  2. 12 0
      test/Common/FileIO/Mxl.ts

+ 20 - 2
src/Common/FileIO/Mxl.ts

@@ -2,6 +2,16 @@ import { IXmlElement } from "./Xml";
 import { Promise } from "es6-promise";
 import JSZip = require("jszip");
 
+// Usage for extractSheetMusicFromMxl:
+// extractSheetFromMxl(" *** binary content *** ").then(
+//   (score: IXmlElement) => {
+//     // Success! use the score here!
+//   },
+//   (error: any) => {
+//     // There was an error.
+//     // Handle it here.
+//   }
+// )
 export function extractSheetFromMxl(data: string): Promise<any> {
   "use strict";
   // _zip_ must be of type 'any' for now, since typings for JSZip are not up-to-date
@@ -27,11 +37,19 @@ export function extractSheetFromMxl(data: string): Promise<any> {
   ).then(
     (content: string) => {
       let parser: DOMParser = new DOMParser();
-      let doc: Document = parser.parseFromString(content, "text/xml");
-      return Promise.resolve(new IXmlElement(doc.documentElement));
+      let xml: Document = parser.parseFromString(content, "text/xml");
+      let doc: IXmlElement = new IXmlElement(xml.documentElement);
+      return Promise.resolve(doc);
     },
     (err: any) => {
       throw err;
     }
+  ).then(
+    (content: IXmlElement) => {
+      return Promise.resolve(content);
+    },
+    (err: any) => {
+      throw new Error("extractSheetFromMxl: " + err.message);
+    }
   );
 }

+ 12 - 0
test/Common/FileIO/Mxl.ts

@@ -36,4 +36,16 @@ describe("MXL Tests", () => {
     testFile(score);
   }
 
+  // Test failure
+  it("Corrupted file", (done: MochaDone) => {
+    extractSheetFromMxl("").then(
+      (score: IXmlElement) => {
+        chai.expect(score).to.not.be.undefined;
+        chai.expect(score.name).to.equal("score-partwise");
+        done(new Error("Empty zip file was loaded correctly. How is that even possible?"));
+      },
+      (exc: any) => { done(); }
+    );
+  });
+
 });