Pot.js Workeroid Test (Web Worker Native + Emulator)

Pot.js Workeroid Test (Web Worker Native + Emulator)

by polygonplanet

HTML

<a href="http://polygonplanet.github.com/Pot.js/#reference.Pot.Workeroid.methods" target="_blank">Pot.Workeroid リファレンス</a>
<hr>
<div id="result"></div>

JavaScript

var url = 'http://api.polygonpla.net/js/pot/1.17/pot.min.js';

$.getScript(url).then(function() {

var Assert = {
  count : 0,
  section : null,
  deferred : Pot.Deferred.succeed(),
  beginSection : function(name) {
    var that = this;
    return this.deferred.then(function() {
      that.deferred = new Pot.Deferred();
      that.section = name;
    });
  },
  endSection : function(name) {
    this.deferred.begin();
  },
  log : function(value) {
    $('#result').append(
      $('<div/>').text(
        Pot.sprintf('%02d: %s: %s',
          ++this.count,
          this.section,
          (Pot.isBoolean(value) ?
           (value ? 'OK' : 'Error!') :
           value
          )
        )
      )
    );
  }
};

Pot.begin(function() {
  return Assert.beginSection('BEGIN').then(function() {
    Assert.log('BEGIN');
    Assert.endSection('BEGIN');
  });
}).then(function() {
  return Assert.beginSection('test1').then(function() {
    // -----------------------------------------
    var worker = new Pot.Workeroid(function(data) {
      //
      // このスコープの中が 子 Worker スレッド
      //
      var add = 1;
      postMessage(data + add);
    });
    // メッセージを受信した時
    worker.onmessage = function(data, event) {
      Assert.log(data == 2);
      Assert.log(typeof event === 'object');
      Assert.endSection('test1');
    };
    // エラー時の設定 (任意)
    worker.onerror = function(err) {
      Assert.log(err);
      Assert.endSection('test1');
    };
    // 1 を 子 Worker に送信 => 2
    worker.postMessage(1);

  });
}).then(function() {
  return Assert.beginSection('test2').then(function() {
    // -----------------------------------------
    var worker = new Pot.Workeroid(function(data) {
      //
      // このスコープの中が 子 Worker スレッド
      //
      var add = 1;
      self.postMessage(data + add);
    });
    // メッセージを受信した時 (addEventListener でも設定可)
    worker.addEventListener('message', function(data, event) {
      Assert.log(data == 2);
      Assert.log(typeof event === 'object');
     ...