]> git.parisson.com Git - pdf.js.git/commitdiff
Make test driver a separate js file, eradicate some global variables.
authorRob Sayre <sayrer@gmail.com>
Mon, 4 Jul 2011 21:17:23 +0000 (14:17 -0700)
committerRob Sayre <sayrer@gmail.com>
Mon, 4 Jul 2011 21:17:23 +0000 (14:17 -0700)
test/driver.js [new file with mode: 0644]
test/test_slave.html

diff --git a/test/driver.js b/test/driver.js
new file mode 100644 (file)
index 0000000..e7fb15e
--- /dev/null
@@ -0,0 +1,228 @@
+/*
+ * A Test Driver for PDF.js
+ */
+
+
+var appPath, browser, canvas, currentTaskIdx, manifest, stdout;
+
+function queryParams() {
+    var qs = window.location.search.substring(1);
+    var kvs = qs.split("&");
+    var params = { };
+    for (var i = 0; i < kvs.length; ++i) {
+        var kv = kvs[i].split("=");
+        params[unescape(kv[0])] = unescape(kv[1]);
+    }
+    return params;
+}
+
+function load() {
+    var params = queryParams();
+    browser = params.browser;
+    manifestFile = params.manifestFile;
+    appPath = params.path;
+    
+    canvas = document.createElement("canvas");
+    canvas.mozOpaque = true;
+    stdout = document.getElementById("stdout");
+    
+    log("load...\n");
+
+    log("Harness thinks this browser is '"+ browser + "' with path " + appPath + "\n");
+    log("Fetching manifest "+ manifestFile +"...");
+    
+    var r = new XMLHttpRequest();
+    r.open("GET", manifestFile, false);
+    r.onreadystatechange = function(e) {
+        if (r.readyState == 4) {
+            log("done\n");
+            manifest = JSON.parse(r.responseText);
+            currentTaskIdx = 0, nextTask();
+        }
+    };
+    r.send(null);
+}
+window.onload = load;
+
+function nextTask() {
+    if (currentTaskIdx == manifest.length) {
+        return done();
+    }
+    var task = manifest[currentTaskIdx];
+    task.round = 0;
+
+    log("Loading file "+ task.file +"\n");
+
+    var r = new XMLHttpRequest();
+    r.open("GET", task.file);
+    r.mozResponseType = r.responseType = "arraybuffer";
+    r.onreadystatechange = function() {
+        if (r.readyState == 4) {
+            var data = r.mozResponseArrayBuffer || r.mozResponse ||
+                r.responseArrayBuffer || r.response;
+        
+            try {
+                task.pdfDoc = new PDFDoc(new Stream(data));
+            } catch(e) {
+                failure = 'load PDF doc: '+ e.toString();
+            }
+            
+            task.pageNum = 1, nextPage(task);
+        }    
+    };
+    r.send(null);
+}
+
+function isLastPage(task) {
+    return (task.pdfDoc && (task.pageNum > task.pdfDoc.numPages));
+}
+
+function nextPage(task) {
+    if (isLastPage(task)) {
+             if (++task.round < task.rounds) {
+                 log("  Round "+ (1 + task.round) +"\n");
+                 task.pageNum = 1;
+             } else {
+                 ++currentTaskIdx, nextTask();
+                 return;
+        }
+    }
+
+    var failure = '';
+    log("    loading page "+ task.pageNum +"... ");
+
+    var ctx = canvas.getContext("2d");
+    var fonts = [];
+    var gfx = null;
+    var page = null;
+
+    try {
+        gfx = new CanvasGraphics(ctx);
+        page = task.pdfDoc.getPage(task.pageNum);
+        page.compile(gfx, fonts);
+    } catch(e) {
+        failure = 'compile: '+ e.toString();
+    }
+
+    if (!failure) {
+        try {
+            var pdfToCssUnitsCoef = 96.0 / 72.0;
+            // using mediaBox for the canvas size
+            var pageWidth = (page.mediaBox[2] - page.mediaBox[0]);
+            var pageHeight = (page.mediaBox[3] - page.mediaBox[1]);
+            canvas.width = pageWidth * pdfToCssUnitsCoef;
+            canvas.height = pageHeight * pdfToCssUnitsCoef;
+            clear(ctx);
+        } catch(e) {
+            failure = 'page setup: '+ e.toString();
+        }
+    }
+
+    if (!failure) {
+        try {
+            FontLoader.bind(fonts, function() { 
+                snapshotCurrentPage(gfx, page, task, failure); 
+                });
+        } catch(e) {
+            failure = 'fonts: '+ e.toString();
+        }
+    }
+
+    if (failure) {
+        // Skip right to snapshotting if there was a failure, since the
+        // fonts might be in an inconsistent state.
+        snapshotCurrentPage(gfx, page, task, failure);
+    }
+}
+
+function snapshotCurrentPage(gfx, page, task, failure) {
+    log("done, snapshotting... ");
+    
+    if (!failure) {
+        try {
+            page.display(gfx);
+        } catch(e) {
+            failure = 'render: '+ e.toString();
+        }
+    }
+
+    sendTaskResult(canvas.toDataURL("image/png"), task, failure);
+    log("done"+ (failure ? " (failed!)" : "") +"\n");
+    
+    // Set up the next request
+    backoff = (inFlightRequests > 0) ? inFlightRequests * 10 : 0;
+    setTimeout(function() {
+        ++task.pageNum, nextPage(task);
+    },
+    backoff
+  );
+}
+
+function sendQuitRequest() {
+  var r = new XMLHttpRequest();
+  r.open("POST", "/tellMeToQuit?path=" + escape(appPath), false);
+  r.send("");
+}
+
+function quitApp() {
+  log("Done!");
+  document.body.innerHTML = "Tests are finished.  <h1>CLOSE ME!</h1>";
+  if (window.SpecialPowers) {
+    SpecialPowers.quitApplication();
+  } else {
+    sendQuitRequest();
+    window.close();
+  }
+}
+
+function done() {
+  if (inFlightRequests > 0) {
+    document.getElementById("inFlightCount").innerHTML = inFlightRequests;
+    setTimeout(done, 100);
+  } else {
+    setTimeout(quitApp, 100);
+  }
+}
+
+var inFlightRequests = 0;
+function sendTaskResult(snapshot, task, failure) {
+  var result = { browser: browser,
+                 id: task.id,
+                 numPages: task.pdfDoc.numPages,
+                 failure: failure,
+                 file: task.file,
+                 round: task.round,
+                 page: task.pageNum,
+                 snapshot: snapshot };
+
+  var r = new XMLHttpRequest();
+  // (The POST URI is ignored atm.)
+  r.open("POST", "/submit_task_results", true);
+  r.setRequestHeader("Content-Type", "application/json");
+  r.onreadystatechange = function(e) {
+    if (r.readyState == 4) {
+      inFlightRequests--;
+    }
+  }
+  document.getElementById("inFlightCount").innerHTML = inFlightRequests++;
+  r.send(JSON.stringify(result));
+}
+
+function clear(ctx) {
+  ctx.save();
+  ctx.fillStyle = "rgb(255, 255, 255)";
+  ctx.fillRect(0, 0, canvas.width, canvas.height);
+  ctx.restore();
+}
+
+/* Auto-scroll if the scrollbar is near the bottom, otherwise do nothing. */
+function checkScrolling() {
+  if ((stdout.scrollHeight - stdout.scrollTop) <= stdout.offsetHeight) {
+    stdout.scrollTop = stdout.scrollHeight;
+  }
+}
+
+function log(str) {
+  stdout.innerHTML += str;
+  checkScrolling();
+}
\ No newline at end of file
index 3180418fa86d48efe7187532d6a79f5c80da24cb..f6d1f7f48559db79a9871bd576125bb3d68242f2 100644 (file)
@@ -6,222 +6,7 @@
   <script type="text/javascript" src="/fonts.js"></script>
   <script type="text/javascript" src="/crypto.js"></script>
   <script type="text/javascript" src="/glyphlist.js"></script>
-  <script type="application/javascript">
-var appPath, browser, canvas, currentTask, currentTaskIdx, failure, manifest, numPages, pdfDoc, stdout;
-
-function queryParams() {
-    var qs = window.location.search.substring(1);
-    var kvs = qs.split("&");
-    var params = { };
-    for (var i = 0; i < kvs.length; ++i) {
-        var kv = kvs[i].split("=");
-        params[unescape(kv[0])] = unescape(kv[1]);
-    }
-    return params;
-}
-
-function load() {
-  var params = queryParams();
-  browser = params.browser;
-  manifestFile = params.manifestFile;
-  appPath = params.path;
-
-  canvas = document.createElement("canvas");
-  canvas.mozOpaque = true;
-  stdout = document.getElementById("stdout");
-
-  log("Harness thinks this browser is '"+ browser + "' with path " + appPath + "\n");
-  log("Fetching manifest "+ manifestFile +"...");
-
-  var r = new XMLHttpRequest();
-  r.open("GET", manifestFile, false);
-  r.onreadystatechange = function(e) {
-    if (r.readyState == 4) {
-      log("done\n");
-
-      manifest = JSON.parse(r.responseText);
-      currentTaskIdx = 0, nextTask();
-    }
-  };
-  r.send(null);
-}
-
-function nextTask() {
-  if (currentTaskIdx == manifest.length) {
-    return done();
-  }
-  currentTask = manifest[currentTaskIdx];
-  currentTask.round = 0;
-
-  log("Loading file "+ currentTask.file +"\n");
-
-  var r = new XMLHttpRequest();
-  r.open("GET", currentTask.file);
-  r.mozResponseType = r.responseType = "arraybuffer";
-  r.onreadystatechange = function() {
-    if (r.readyState == 4) {
-      var data = r.mozResponseArrayBuffer || r.mozResponse ||
-                 r.responseArrayBuffer || r.response;
-
-      try {
-        pdfDoc = new PDFDoc(new Stream(data));
-        numPages = pdfDoc.numPages;
-      } catch(e) {
-        numPages = 1;
-        failure = 'load PDF doc: '+ e.toString();
-      }
-
-      currentTask.pageNum = 1, nextPage();
-    }    
-  };
-  r.send(null);
-}
-
-function nextPage() {
-  if (currentTask.pageNum > numPages) {
-    if (++currentTask.round < currentTask.rounds) {
-      log("  Round "+ (1 + currentTask.round) +"\n");
-      currentTask.pageNum = 1;
-    } else {
-      ++currentTaskIdx, nextTask();
-      return;
-    }
-  }
-
-  failure = '';
-  log("    loading page "+ currentTask.pageNum +"... ");
-
-  var ctx = canvas.getContext("2d");
-
-  var fonts = [];
-  var gfx = null;
-  try {
-    gfx = new CanvasGraphics(ctx);
-    currentPage = pdfDoc.getPage(currentTask.pageNum);
-    currentPage.compile(gfx, fonts);
-  } catch(e) {
-    failure = 'compile: '+ e.toString();
-  }
-
-  try {
-    var pdfToCssUnitsCoef = 96.0 / 72.0;
-    // using mediaBox for the canvas size
-    var pageWidth = (currentPage.mediaBox[2] - currentPage.mediaBox[0]);
-    var pageHeight = (currentPage.mediaBox[3] - currentPage.mediaBox[1]);
-    canvas.width = pageWidth * pdfToCssUnitsCoef;
-    canvas.height = pageHeight * pdfToCssUnitsCoef;
-    clear(ctx);
-  } catch(e) {
-    failure = 'page setup: '+ e.toString();
-  }
-
-  if (!failure) {
-    try {
-      FontLoader.bind(fonts, function() { snapshotCurrentPage(gfx); });
-    } catch(e) {
-      failure = 'fonts: '+ e.toString();
-    }
-  }
-
-  if (failure) {
-    // Skip right to snapshotting if there was a failure, since the
-    // fonts might be in an inconsistent state.
-    snapshotCurrentPage(gfx);
-  }
-}
-
-function snapshotCurrentPage(gfx) {
-  log("done, snapshotting... ");
-
-  if (!failure) {
-    try {
-      currentPage.display(gfx);
-    } catch(e) {
-      failure = 'render: '+ e.toString();
-    }
-  }
-
-  sendTaskResult(canvas.toDataURL("image/png"));
-  log("done"+ (failure ? " (failed!)" : "") +"\n");
-
-  // Set up the next request
-  backoff = (inFlightRequests > 0) ? inFlightRequests * 10 : 0;
-  setTimeout(function() {
-      ++currentTask.pageNum, nextPage();
-    },
-    backoff
-  );
-}
-
-function sendQuitRequest() {
-  var r = new XMLHttpRequest();
-  r.open("POST", "/tellMeToQuit?path=" + escape(appPath), false);
-  r.send("");
-}
-
-function quitApp() {
-  log("Done!");
-  document.body.innerHTML = "Tests are finished.  <h1>CLOSE ME!</h1>";
-  if (window.SpecialPowers) {
-    SpecialPowers.quitApplication();
-  } else {
-    sendQuitRequest();
-    window.close();
-  }
-}
-
-function done() {
-  if (inFlightRequests > 0) {
-    document.getElementById("inFlightCount").innerHTML = inFlightRequests;
-    setTimeout(done, 100);
-  } else {
-    setTimeout(quitApp, 100);
-  }
-}
-
-var inFlightRequests = 0;
-function sendTaskResult(snapshot) {
-  var result = { browser: browser,
-                 id: currentTask.id,
-                 numPages: numPages,
-                 failure: failure,
-                 file: currentTask.file,
-                 round: currentTask.round,
-                 page: currentTask.pageNum,
-                 snapshot: snapshot };
-
-  var r = new XMLHttpRequest();
-  // (The POST URI is ignored atm.)
-  r.open("POST", "/submit_task_results", true);
-  r.setRequestHeader("Content-Type", "application/json");
-  r.onreadystatechange = function(e) {
-    if (r.readyState == 4) {
-      inFlightRequests--;
-    }
-  }
-  document.getElementById("inFlightCount").innerHTML = inFlightRequests++;
-  r.send(JSON.stringify(result));
-}
-
-function clear(ctx) {
-  ctx.save();
-  ctx.fillStyle = "rgb(255, 255, 255)";
-  ctx.fillRect(0, 0, canvas.width, canvas.height);
-  ctx.restore();
-}
-
-/* Auto-scroll if the scrollbar is near the bottom, otherwise do nothing. */
-function checkScrolling() {
-  if ((stdout.scrollHeight - stdout.scrollTop) <= stdout.offsetHeight) {
-    stdout.scrollTop = stdout.scrollHeight;
-  }
-}
-
-function log(str) {
-  stdout.innerHTML += str;
-  checkScrolling();
-}
-  </script>
+  <script type="text/javascript" src="driver.js"></script>
 </head>
 
 <body onload="load();">