[Pkg-javascript-commits] [pdf.js] 51/106: Refactor test driver to be more class-like

David Prévot taffit at moszumanska.debian.org
Sat Jun 20 21:34:03 UTC 2015


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository pdf.js.

commit ae8748edfbfe7e2e21f035ec6699783368b5c8f3
Author: Tim van der Meij <timvandermeij at gmail.com>
Date:   Fri May 15 15:29:43 2015 +0200

    Refactor test driver to be more class-like
    
    - Extract NullTextLayerBuilder and SimpleTextLayerBuilder from the driver code and create classes for them.
    - Move options to the constructor and pass in HTML elements instead of getting them in the driver.
    - Remove unused masterMode variable.
    - Minor method name updates.
    
    The rest is only moving/indenting existing code and adding 'this'.
---
 test/driver.js       | 809 +++++++++++++++++++++++++++------------------------
 test/test_slave.html |   8 +-
 2 files changed, 435 insertions(+), 382 deletions(-)

diff --git a/test/driver.js b/test/driver.js
index 769c1ca..8149124 100644
--- a/test/driver.js
+++ b/test/driver.js
@@ -18,412 +18,461 @@
 
 'use strict';
 
-/*
- * A Test Driver for PDF.js
+/**
+ * @class
  */
-(function DriverClosure() {
-
-PDFJS.enableStats = true;
-PDFJS.cMapUrl = '../external/bcmaps/';
-PDFJS.cMapPacked = true;
-
-var appPath, masterMode, browser, canvas, dummyCanvas, currentTaskIdx,
-    manifest, stdout;
-var inFlightRequests = 0;
-
-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;
-}
-
-window.load = function load() {
-  var params = queryParams();
-  browser = params.browser;
-  var manifestFile = params.manifestFile;
-  appPath = params.path;
-  masterMode = params.masterMode === 'True';
-  var delay = params.delay || 0;
-
-  canvas = document.createElement('canvas');
-  stdout = document.getElementById('output');
-
-  info('User Agent: ' + navigator.userAgent);
-  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 loadOnreadystatechange(e) {
-    if (r.readyState === 4) {
-      log('done\n');
-      manifest = JSON.parse(r.responseText);
-      currentTaskIdx = 0;
-      nextTask();
-    }
+var NullTextLayerBuilder = (function NullTextLayerBuilderClosure() {
+  /**
+   * @constructs NullTextLayerBuilder
+   */
+  function NullTextLayerBuilder() {}
+
+  NullTextLayerBuilder.prototype = {
+    beginLayout: function NullTextLayerBuilder_BeginLayout() {},
+    endLayout: function NullTextLayerBuilder_EndLayout() {},
+    appendText: function NullTextLayerBuilder_AppendText() {}
   };
-  if (delay) {
-    log('\nDelaying for ' + delay + 'ms...\n');
-  }
-  // When gathering the stats the numbers seem to be more reliable if the
-  // browser is given more time to startup.
-  setTimeout(function() {
-    r.send(null);
-  }, delay);
-};
-
-function cleanup() {
-  // Clear out all the stylesheets since a new one is created for each font.
-  while (document.styleSheets.length > 0) {
-    var styleSheet = document.styleSheets[0];
-    while (styleSheet.cssRules.length > 0) {
-      styleSheet.deleteRule(0);
-    }
-    var ownerNode = styleSheet.ownerNode;
-    ownerNode.parentNode.removeChild(ownerNode);
-  }
-  var guard = document.getElementById('end');
-  var body = document.body;
-  while (body.lastChild !== guard) {
-    body.removeChild(body.lastChild);
-  }
 
-  // Wipe out the link to the pdfdoc so it can be GC'ed.
-  for (var i = 0; i < manifest.length; i++) {
-    if (manifest[i].pdfDoc) {
-      manifest[i].pdfDoc.destroy();
-      delete manifest[i].pdfDoc;
-    }
-  }
-}
+  return NullTextLayerBuilder;
+})();
 
-function exceptionToString(e) {
-  if (typeof e !== 'object') {
-    return String(e);
-  }
-  if (!('message' in e)) {
-    return JSON.stringify(e);
-  }
-  return e.message + ('stack' in e ? ' at ' + e.stack.split('\n')[0] : '');
-}
-
-function nextTask() {
-  cleanup();
-
-  if (currentTaskIdx === manifest.length) {
-    done();
-    return;
+/**
+ * @class
+ */
+var SimpleTextLayerBuilder = (function SimpleTextLayerBuilderClosure() {
+  /**
+   * @constructs SimpleTextLayerBuilder
+   */
+  function SimpleTextLayerBuilder(ctx, viewport) {
+    this.ctx = ctx;
+    this.viewport = viewport;
+    this.textCounter = 0;
   }
-  var task = manifest[currentTaskIdx];
-  task.round = 0;
-  task.stats = {times: []};
 
-  log('Loading file "' + task.file + '"\n');
+  SimpleTextLayerBuilder.prototype = {
+    appendText: function SimpleTextLayerBuilder_AppendText(geom, styles) {
+      var style = styles[geom.fontName];
+      var ctx = this.ctx, viewport = this.viewport;
+      var tx = PDFJS.Util.transform(this.viewport.transform, geom.transform);
+      var angle = Math.atan2(tx[1], tx[0]);
+      var fontHeight = Math.sqrt((tx[2] * tx[2]) + (tx[3] * tx[3]));
+      var fontAscent = (style.ascent ? style.ascent * fontHeight :
+        (style.descent ? (1 + style.descent) * fontHeight : fontHeight));
+
+      ctx.save();
+      ctx.beginPath();
+      ctx.strokeStyle = 'red';
+      ctx.fillStyle = 'yellow';
+      ctx.translate(tx[4] + (fontAscent * Math.sin(angle)),
+                    tx[5] - (fontAscent * Math.cos(angle)));
+      ctx.rotate(angle);
+      ctx.rect(0, 0, geom.width * viewport.scale, geom.height * viewport.scale);
+      ctx.stroke();
+      ctx.fill();
+      ctx.restore();
+      ctx.font = fontHeight + 'px ' + style.fontFamily;
+      ctx.fillStyle = 'black';
+      ctx.fillText(geom.str, tx[4], tx[5]);
+
+      this.textCounter++;
+    },
+
+    setTextContent:
+        function SimpleTextLayerBuilder_SetTextContent(textContent) {
+      this.ctx.save();
+      var textItems = textContent.items;
+      for (var i = 0, ii = textItems.length; i < ii; i++) {
+        this.appendText(textItems[i], textContent.styles);
+      }
+      this.ctx.restore();
+    }
+  };
 
-  var absoluteUrl = combineUrl(window.location.href, task.file);
-  var failure;
-  function continuation() {
-    task.pageNum = task.firstPage || 1;
-    nextPage(task, failure);
-  }
+  return SimpleTextLayerBuilder;
+})();
 
-  PDFJS.disableRange = task.disableRange;
-  PDFJS.disableAutoFetch = !task.enableAutoFetch;
-  try {
-    var promise = PDFJS.getDocument({
-      url: absoluteUrl,
-      password: task.password
-    });
-    promise.then(function(doc) {
-      task.pdfDoc = doc;
-      continuation();
-    }, function(e) {
-      failure = 'load PDF doc : ' + e;
-      continuation();
-    });
-    return;
-  } catch (e) {
-    failure = 'load PDF doc : ' + exceptionToString(e);
-  }
-  continuation();
-}
+/**
+ * @typedef {Object} DriverOptions
+ * @property {HTMLPreElement} output - Container for all output messages.
+ * @property {HTMLSpanElement} inflight - Field displaying the number of
+ *   inflight requests.
+ * @property {HTMLDivElement} end - Container for a completion message.
+ */
 
-function getLastPageNum(task) {
-  if (!task.pdfDoc) {
-    return task.firstPage || 1;
-  }
-  var lastPageNum = task.lastPage || 0;
-  if (!lastPageNum || lastPageNum > task.pdfDoc.numPages) {
-    lastPageNum = task.pdfDoc.numPages;
+/**
+ * @class
+ */
+var Driver = (function DriverClosure() {
+  /**
+   * @constructs Driver
+   * @param {DriverOptions} options
+   */
+  function Driver(options) {
+    // Configure the global PDFJS object
+    PDFJS.workerSrc = '../src/worker_loader.js';
+    PDFJS.cMapPacked = true;
+    PDFJS.cMapUrl = '../external/bcmaps/';
+    PDFJS.enableStats = true;
+
+    // Set the passed options
+    this.output = options.output;
+    this.inflight = options.inflight;
+    this.end = options.end;
+
+    // Set parameters from the query string
+    var parameters = this._getQueryStringParameters();
+    this.browser = parameters.browser;
+    this.manifestFile = parameters.manifestFile;
+    this.appPath = parameters.path;
+    this.delay = (parameters.delay | 0) || 0;
+    this.inFlightRequests = 0;
+
+    // Create a working canvas
+    this.canvas = document.createElement('canvas');
   }
-  return lastPageNum;
-}
-
-function NullTextLayerBuilder() {
-}
-NullTextLayerBuilder.prototype = {
-  beginLayout: function NullTextLayerBuilder_BeginLayout() {},
-  endLayout: function NullTextLayerBuilder_EndLayout() {},
-  appendText: function NullTextLayerBuilder_AppendText() {}
-};
-
-function SimpleTextLayerBuilder(ctx, viewport) {
-  this.ctx = ctx;
-  this.viewport = viewport;
-  this.textCounter = 0;
-}
-SimpleTextLayerBuilder.prototype = {
-  appendText: function SimpleTextLayerBuilder_AppendText(geom, styles) {
-    var style = styles[geom.fontName];
-    var ctx = this.ctx, viewport = this.viewport;
-    var tx = PDFJS.Util.transform(this.viewport.transform, geom.transform);
-    var angle = Math.atan2(tx[1], tx[0]);
-    var fontHeight = Math.sqrt((tx[2] * tx[2]) + (tx[3] * tx[3]));
-    var fontAscent = (style.ascent ? style.ascent * fontHeight :
-      (style.descent ? (1 + style.descent) * fontHeight : fontHeight));
-    ctx.save();
-    ctx.beginPath();
-    ctx.strokeStyle = 'red';
-    ctx.fillStyle = 'yellow';
-    ctx.translate(tx[4] + (fontAscent * Math.sin(angle)),
-                  tx[5] - (fontAscent * Math.cos(angle)));
-    ctx.rotate(angle);
-    ctx.rect(0, 0, geom.width * viewport.scale, geom.height * viewport.scale);
-    ctx.stroke();
-    ctx.fill();
-    ctx.restore();
-    ctx.font = fontHeight + 'px ' + style.fontFamily;
-    ctx.fillStyle = 'black';
-    ctx.fillText(geom.str, tx[4], tx[5]);
-
-    this.textCounter++;
-  },
-  setTextContent: function SimpleTextLayerBuilder_SetTextContent(textContent) {
-    this.ctx.save();
-    var textItems = textContent.items;
-    for (var i = 0; i < textItems.length; i++) {
-      this.appendText(textItems[i], textContent.styles);
-    }
 
-    this.ctx.restore();
-  }
-};
-
-function nextPage(task, loadError) {
-  var failure = loadError || '';
-
-  if (!task.pdfDoc) {
-    var dataUrl = canvas.toDataURL('image/png');
-    sendTaskResult(dataUrl, task, failure, function () {
-      log('done' + (failure ? ' (failed !: ' + failure + ')' : '') + '\n');
-      ++currentTaskIdx;
-      nextTask();
-    });
-    return;
-  }
+  Driver.prototype = {
+    _getQueryStringParameters: function Driver_getQueryStringParameters() {
+      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;
+    },
+
+    run: function Driver_run() {
+      this._info('User Agent: ' + navigator.userAgent);
+      this._log('load...\n');
+
+      this._log('Harness thinks this browser is "' + this.browser +
+        '" with path "' + this.appPath + '"\n');
+      this._log('Fetching manifest "' + this.manifestFile + '"... ');
+
+      var r = new XMLHttpRequest();
+      var self = this;
+      r.open('GET', this.manifestFile, false);
+      r.onreadystatechange = function loadOnreadystatechange(e) {
+        if (r.readyState === 4) {
+          self._log('done\n');
+          self.manifest = JSON.parse(r.responseText);
+          self.currentTask = 0;
+          self._nextTask();
+        }
+      };
+      if (this.delay) {
+        this._log('\nDelaying for ' + this.delay + 'ms...\n');
+      }
+      // When gathering the stats the numbers seem to be more reliable
+      // if the browser is given more time to startup.
+      setTimeout(function() {
+        r.send(null);
+      }, this.delay);
+    },
+
+    _nextTask: function Driver_nextTask() {
+      this._cleanup();
+
+      if (this.currentTask === this.manifest.length) {
+        this._done();
+        return;
+      }
+      var task = this.manifest[this.currentTask];
+      task.round = 0;
+      task.stats = { times: [] };
+
+      this._log('Loading file "' + task.file + '"\n');
+
+      var absoluteUrl = combineUrl(window.location.href, task.file);
+      var failure;
+      var self = this;
+      function continuation() {
+        task.pageNum = task.firstPage || 1;
+        self._nextPage(task, failure);
+      }
 
-  if (task.pageNum > getLastPageNum(task)) {
-    if (++task.round < task.rounds) {
-      log(' Round ' + (1 + task.round) + '\n');
-      task.pageNum = task.firstPage || 1;
-    } else {
-      ++currentTaskIdx;
-      nextTask();
-      return;
-    }
-  }
+      PDFJS.disableRange = task.disableRange;
+      PDFJS.disableAutoFetch = !task.enableAutoFetch;
+      try {
+        PDFJS.getDocument({
+          url: absoluteUrl,
+          password: task.password
+        }).then(function(doc) {
+          task.pdfDoc = doc;
+          continuation();
+        }, function(e) {
+          failure = 'load PDF doc : ' + e;
+          continuation();
+        });
+        return;
+      } catch (e) {
+        failure = 'load PDF doc : ' + this._exceptionToString(e);
+      }
+      continuation();
+    },
+
+    _cleanup: function Driver_cleanup() {
+      // Clear out all the stylesheets since a new one is created for each font.
+      while (document.styleSheets.length > 0) {
+        var styleSheet = document.styleSheets[0];
+        while (styleSheet.cssRules.length > 0) {
+          styleSheet.deleteRule(0);
+        }
+        var ownerNode = styleSheet.ownerNode;
+        ownerNode.parentNode.removeChild(ownerNode);
+      }
+      var body = document.body;
+      while (body.lastChild !== this.end) {
+        body.removeChild(body.lastChild);
+      }
 
-  if (task.skipPages && task.skipPages.indexOf(task.pageNum) >= 0) {
-    log(' skipping page ' + task.pageNum + '/' + task.pdfDoc.numPages +
-        '... ');
-    // empty the canvas
-    canvas.width = 1;
-    canvas.height = 1;
-    clear(canvas.getContext('2d'));
+      // Wipe out the link to the pdfdoc so it can be GC'ed.
+      for (var i = 0; i < this.manifest.length; i++) {
+        if (this.manifest[i].pdfDoc) {
+          this.manifest[i].pdfDoc.destroy();
+          delete this.manifest[i].pdfDoc;
+        }
+      }
+    },
 
-    snapshotCurrentPage(task, '');
-    return;
-  }
+    _exceptionToString: function Driver_exceptionToString(e) {
+      if (typeof e !== 'object') {
+        return String(e);
+      }
+      if (!('message' in e)) {
+        return JSON.stringify(e);
+      }
+      return e.message + ('stack' in e ? ' at ' + e.stack.split('\n')[0] : '');
+    },
 
-  if (!failure) {
-    try {
-      log(' loading page ' + task.pageNum + '/' + task.pdfDoc.numPages +
-          '... ');
-      var ctx = canvas.getContext('2d');
-      task.pdfDoc.getPage(task.pageNum).then(function(page) {
-        var pdfToCssUnitsCoef = 96.0 / 72.0;
-        var viewport = page.getViewport(pdfToCssUnitsCoef);
-        canvas.width = viewport.width;
-        canvas.height = viewport.height;
-        clear(ctx);
-
-        var drawContext, textLayerBuilder;
-        var resolveInitPromise;
-        var initPromise = new Promise(function (resolve) {
-          resolveInitPromise = resolve;
+    _getLastPageNum: function Driver_getLastPageNum(task) {
+      if (!task.pdfDoc) {
+        return task.firstPage || 1;
+      }
+      var lastPageNum = task.lastPage || 0;
+      if (!lastPageNum || lastPageNum > task.pdfDoc.numPages) {
+        lastPageNum = task.pdfDoc.numPages;
+      }
+      return lastPageNum;
+    },
+
+    _nextPage: function Driver_nextPage(task, loadError) {
+      var failure = loadError || '';
+      var self = this;
+
+      if (!task.pdfDoc) {
+        var dataUrl = this.canvas.toDataURL('image/png');
+        this._sendResult(dataUrl, task, failure, function () {
+          self._log('done' + (failure ? ' (failed !: ' + failure + ')' : '') +
+            '\n');
+          self.currentTask++;
+          self._nextTask();
         });
-        if (task.type === 'text') {
-          // using dummy canvas for pdf context drawing operations
-          if (!dummyCanvas) {
-            dummyCanvas = document.createElement('canvas');
-          }
-          drawContext = dummyCanvas.getContext('2d');
-          // ... text builder will draw its content on the test canvas
-          textLayerBuilder = new SimpleTextLayerBuilder(ctx, viewport);
+        return;
+      }
 
-          page.getTextContent().then(function(textContent) {
-            textLayerBuilder.setTextContent(textContent);
-            resolveInitPromise();
-          });
+      if (task.pageNum > this._getLastPageNum(task)) {
+        if (++task.round < task.rounds) {
+          this._log(' Round ' + (1 + task.round) + '\n');
+          task.pageNum = task.firstPage || 1;
         } else {
-          drawContext = ctx;
-          textLayerBuilder = new NullTextLayerBuilder();
-          resolveInitPromise();
+          this.currentTask++;
+          this._nextTask();
+          return;
         }
-        var renderContext = {
-          canvasContext: drawContext,
-          viewport: viewport
-        };
-        var completeRender = (function(error) {
-          page.destroy();
-          task.stats = page.stats;
-          page.stats = new StatTimer();
-          snapshotCurrentPage(task, error);
-        });
-        initPromise.then(function () {
-          page.render(renderContext).promise.then(function() {
-            completeRender(false);
+      }
+
+      if (task.skipPages && task.skipPages.indexOf(task.pageNum) >= 0) {
+        this._log(' skipping page ' + task.pageNum + '/' +
+          task.pdfDoc.numPages + '... ');
+
+        // Empty the canvas
+        this.canvas.width = 1;
+        this.canvas.height = 1;
+        this._clearCanvas(this.canvas.getContext('2d'));
+
+        this._snapshot(task, '');
+        return;
+      }
+
+      if (!failure) {
+        try {
+          this._log(' loading page ' + task.pageNum + '/' +
+            task.pdfDoc.numPages + '... ');
+          var ctx = this.canvas.getContext('2d');
+          task.pdfDoc.getPage(task.pageNum).then(function(page) {
+            var pdfToCssUnitsCoef = 96.0 / 72.0;
+            var viewport = page.getViewport(pdfToCssUnitsCoef);
+            self.canvas.width = viewport.width;
+            self.canvas.height = viewport.height;
+            self._clearCanvas(ctx);
+
+            var drawContext, textLayerBuilder;
+            var resolveInitPromise;
+            var initPromise = new Promise(function (resolve) {
+              resolveInitPromise = resolve;
+            });
+            if (task.type === 'text') {
+              // Using a dummy canvas for PDF context drawing operations
+              if (!self.dummyCanvas) {
+                self.dummyCanvas = document.createElement('canvas');
+              }
+              drawContext = self.dummyCanvas.getContext('2d');
+              // The text builder will draw its content on the test canvas
+              textLayerBuilder = new SimpleTextLayerBuilder(ctx, viewport);
+
+              page.getTextContent().then(function(textContent) {
+                textLayerBuilder.setTextContent(textContent);
+                resolveInitPromise();
+              });
+            } else {
+              drawContext = ctx;
+              textLayerBuilder = new NullTextLayerBuilder();
+              resolveInitPromise();
+            }
+            var renderContext = {
+              canvasContext: drawContext,
+              viewport: viewport
+            };
+            var completeRender = (function(error) {
+              page.destroy();
+              task.stats = page.stats;
+              page.stats = new StatTimer();
+              self._snapshot(task, error);
+            });
+            initPromise.then(function () {
+              page.render(renderContext).promise.then(function() {
+                completeRender(false);
+              },
+              function(error) {
+                completeRender('render : ' + error);
+              });
+            });
           },
           function(error) {
-            completeRender('render : ' + error);
+            self._snapshot(task, 'render : ' + error);
           });
-        });
-      },
-      function(error) {
-        snapshotCurrentPage(task, 'render : ' + error);
+        } catch (e) {
+          failure = 'page setup : ' + this._exceptionToString(e);
+          this._snapshot(task, failure);
+        }
+      }
+    },
+
+    _clearCanvas: function Driver_clearCanvas() {
+      var ctx = this.canvas.getContext('2d');
+      ctx.beginPath();
+      ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
+    },
+
+    _snapshot: function Driver_snapshot(task, failure) {
+      var self = this;
+      this._log('done, snapshotting... ');
+
+      var dataUrl = this.canvas.toDataURL('image/png');
+      this._sendResult(dataUrl, task, failure, function () {
+        self._log('done' + (failure ? ' (failed !: ' + failure + ')' : '') +
+          '\n');
+        task.pageNum++;
+        self._nextPage(task);
       });
-    } catch (e) {
-      failure = 'page setup : ' + exceptionToString(e);
-      snapshotCurrentPage(task, failure);
-    }
-  }
-}
-
-function snapshotCurrentPage(task, failure) {
-  log('done, snapshotting... ');
-
-  var dataUrl = canvas.toDataURL('image/png');
-  sendTaskResult(dataUrl, task, failure, function () {
-    log('done' + (failure ? ' (failed !: ' + failure + ')' : '') + '\n');
-
-    ++task.pageNum;
-    nextPage(task);
-  });
-}
-
-function sendQuitRequest(cb) {
-  var r = new XMLHttpRequest();
-  r.open('POST', '/tellMeToQuit?path=' + escape(appPath), false);
-  r.onreadystatechange = function sendQuitRequestOnreadystatechange(e) {
-    if (r.readyState === 4) {
-      if (cb) {
-        cb();
+    },
+
+    _quit: function Driver_quit() {
+      this._log('Done !');
+      document.body.innerHTML = 'Tests finished. <h1>Close this window.</h1>' +
+                                 document.body.innerHTML;
+      this._sendQuitRequest(function () {
+        window.close();
+      });
+    },
+
+    _sendQuitRequest: function Driver_sendQuitRequest(callback) {
+      var r = new XMLHttpRequest();
+      r.open('POST', '/tellMeToQuit?path=' + escape(this.appPath), false);
+      r.onreadystatechange = function sendQuitRequestOnreadystatechange(e) {
+        if (r.readyState === 4) {
+          if (callback) {
+            callback();
+          }
+        }
+      };
+      r.send(null);
+    },
+
+    _info: function Driver_info(message) {
+      this._send('/info', JSON.stringify({
+        browser: this.browser,
+        message: message
+      }));
+    },
+
+    _log: function Driver_log(str) {
+      if (output.insertAdjacentHTML) {
+        this.output.insertAdjacentHTML('BeforeEnd', str);
+      } else {
+        this.output.innerHTML += str;
       }
-    }
-  };
-  r.send(null);
-}
-
-function quitApp() {
-  log('Done !');
-  document.body.innerHTML = 'Tests are finished. <h1>CLOSE ME!</h1>' +
-                             document.body.innerHTML;
-  sendQuitRequest(function () {
-    window.close();
-  });
-}
-
-function done() {
-  if (inFlightRequests > 0) {
-    document.getElementById('inflight').innerHTML = inFlightRequests;
-    setTimeout(done, 100);
-  } else {
-    setTimeout(quitApp, 100);
-  }
-}
-
-function sendTaskResult(snapshot, task, failure, callback) {
-  var result = JSON.stringify({
-    browser: browser,
-    id: task.id,
-    numPages: task.pdfDoc ?
-             (task.lastPage || task.pdfDoc.numPages) : 0,
-    lastPageNum: getLastPageNum(task),
-    failure: failure,
-    file: task.file,
-    round: task.round,
-    page: task.pageNum,
-    snapshot: snapshot,
-    stats: task.stats.times
-  });
-
-  send('/submit_task_results', result, callback);
-}
-
-function send(url, message, callback) {
-  var r = new XMLHttpRequest();
-  // (The POST URI is ignored atm.)
-  r.open('POST', url, true);
-  r.setRequestHeader('Content-Type', 'application/json');
-  r.onreadystatechange = function sendTaskResultOnreadystatechange(e) {
-    if (r.readyState === 4) {
-      inFlightRequests--;
-      // Retry until successful
-      if (r.status !== 200) {
-        setTimeout(function() {
-          send(url, message);
-        });
+
+      if (str.lastIndexOf('\n') >= 0) {
+        // Scroll to the bottom of the page
+        window.scrollTo(0, document.body.scrollHeight);
       }
-      if (callback) {
-        callback();
+    },
+
+    _done: function Driver_done() {
+      if (this.inFlightRequests > 0) {
+        this.inflight.innerHTML = this.inFlightRequests;
+        setTimeout(this._done(), 100);
+      } else {
+        setTimeout(this._quit(), 100);
       }
+    },
+
+    _sendResult: function Driver_sendResult(snapshot, task, failure,
+        callback) {
+      var result = JSON.stringify({
+        browser: this.browser,
+        id: task.id,
+        numPages: task.pdfDoc ?
+                  (task.lastPage || task.pdfDoc.numPages) : 0,
+        lastPageNum: this._getLastPageNum(task),
+        failure: failure,
+        file: task.file,
+        round: task.round,
+        page: task.pageNum,
+        snapshot: snapshot,
+        stats: task.stats.times
+      });
+      this._send('/submit_task_results', result, callback);
+    },
+
+    _send: function Driver_send(url, message, callback) {
+      var self = this;
+      var r = new XMLHttpRequest();
+      r.open('POST', url, true);
+      r.setRequestHeader('Content-Type', 'application/json');
+      r.onreadystatechange = function sendResultOnreadystatechange(e) {
+        if (r.readyState === 4) {
+          self.inFlightRequests--;
+
+          // Retry until successful
+          if (r.status !== 200) {
+            setTimeout(function() {
+              self._send(url, message);
+            });
+          }
+          if (callback) {
+            callback();
+          }
+        }
+      };
+      this.inflight.innerHTML = this.inFlightRequests++;
+      r.send(message);
     }
   };
-  document.getElementById('inflight').innerHTML = inFlightRequests++;
-  r.send(message);
-}
-
-function info(message) {
-  send('/info', JSON.stringify({
-    browser: browser,
-    message: message
-  }));
-}
-
-function clear(ctx) {
-  ctx.beginPath();
-  ctx.clearRect(0, 0, canvas.width, canvas.height);
-}
-
-function log(str) {
-  if (stdout.insertAdjacentHTML) {
-    stdout.insertAdjacentHTML('BeforeEnd', str);
-  } else {
-    stdout.innerHTML += str;
-  }
-
-  if (str.lastIndexOf('\n') >= 0) {
-    // Scroll to the bottom of the page
-    window.scrollTo(0, document.body.scrollHeight);
-  }
-}
 
-})(); // DriverClosure
+  return Driver;
+})();
diff --git a/test/test_slave.html b/test/test_slave.html
index 0bee4d2..3a84bd3 100644
--- a/test/test_slave.html
+++ b/test/test_slave.html
@@ -34,7 +34,11 @@ limitations under the License.
     <div id="end"></div>
   </body>
   <script>
-    PDFJS.workerSrc = '../src/worker_loader.js';
-    load();
+    var driver = new Driver({
+      output: document.getElementById('output'),
+      inflight: document.getElementById('inflight'),
+      end: document.getElementById('end')
+    });
+    driver.run();
   </script>
 </html>

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/pdf.js.git



More information about the Pkg-javascript-commits mailing list