Package com.google.gwt.gears.client.workerpool

Source Code of com.google.gwt.gears.client.workerpool.WorkerPoolTest$FooMessage

/*
* Copyright 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.gears.client.workerpool;

import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArray;
import com.google.gwt.core.client.JsArrayBoolean;
import com.google.gwt.core.client.JsArrayInteger;
import com.google.gwt.core.client.JsArrayNumber;
import com.google.gwt.core.client.JsArrayString;
import com.google.gwt.gears.client.Factory;
import com.google.gwt.junit.client.GWTTestCase;

/**
* Test the Gears WorkerPool API.
*/
public class WorkerPoolTest extends GWTTestCase {
  /**
   * Used internally to swap messages between worker and main thread.
   */
  private static class FooMessage extends JavaScriptObject {
    protected FooMessage() {
    }

    public final native int getFoo() /*-{
      return this.foo;
    }-*/;

    public final native void setFoo(int value) /*-{
      this.foo = value;
    }-*/;
  }

  private static final String WORKER_JS_SRC = "" + "function workerInit() {"
      + "  google.gears.workerPool.onmessage = function(a, b, message){"
      + "     google.gears.workerPool.sendMessage('done', message.sender);"
      + "  };" + "}" + "workerInit();";

  private static final String WORKER_JS_SRC_BOOL = ""
      + "function workerInit() {"
      + "  google.gears.workerPool.onmessage = function(a, b, message){"
      + "     var returnMessage = 'error';"
      + "     if (message.body === true) { returnMessage = 'done'; }"
      + "     google.gears.workerPool.sendMessage(returnMessage, message.sender);"
      + "  };" + "}" + "workerInit();";

  private static final String WORKER_JS_SRC_DOUBLE = ""
      + "function workerInit() {"
      + "  google.gears.workerPool.onmessage = function(a, b, message){"
      + "     var returnMessage = 'error';"
      + "     if (message.body == 1.0) { returnMessage = 'done'; }"
      + "     google.gears.workerPool.sendMessage(returnMessage, message.sender);"
      + "  };" + "}" + "workerInit();";

  private static final String WORKER_JS_SRC_MAKE_TYPE = ""
      + "function workerInit() {"
      + "  google.gears.workerPool.onmessage = function(a, b, message) {"
      + "     var returnMessage = 'error';"
      + "     if (message.body == 'boolean') { "
      + "       returnMessage = true; "
      + "     } else if (message.body == 'Boolean') { "
      + "       returnMessage = new Boolean(true); "
      + "     } else if (message.body == 'string') { "
      + "       returnMessage = 'stringValue'; "
      + "     } else if (message.body == 'String') { "
      + "       returnMessage = new String('stringValue'); "
      + "     } else if (message.body == 'number') { "
      + "       returnMessage = 1.0; "
      + "     } else if (message.body == 'Number') { "
      + "       returnMessage = new Number(1.0); "
      + "     } else if (message.body == 'object') { "
      + "       returnMessage = new Object(); returnMessage.foo = 1; "
      + "     } else if (message.body == 'arrayBoolean') { "
      + "       returnMessage = [ true, false, true, false, true ];"
      + "     } else if (message.body == 'arrayInteger') { "
      + "       returnMessage = [ 1, 2, 3 ];"
      + "     } else if (message.body == 'arrayNumber') { "
      + "       returnMessage = [ 1.1, 2.2, 3.3, 4.4 ];"
      + "     } else if (message.body == 'arrayObject') { "
      + "       returnMessage = [ {foo:1}, {foo:2} ];"
      + "     } else if (message.body == 'arrayString') { "
      + "       returnMessage = [ 'foo', 'bar' ];"
      + "     }"
      + "     google.gears.workerPool.sendMessage(returnMessage, message.sender);"
      + "  };" + "}" + "workerInit();";

  private static final String WORKER_JS_SRC_OBJ = ""
      + "function workerInit() {"
      + "  google.gears.workerPool.onmessage = function(a, b, message){"
      + "     var returnMessage = 'error';"
      + "     if (message.body.foo == 1) { returnMessage = 'done'; }"
      + "     google.gears.workerPool.sendMessage(returnMessage, message.sender);"
      + "  };" + "}" + "workerInit();";

  /**
   * Test method for {@link WorkerPool#createWorker(String)}.
   */
  public void disabledTestCreateWorkerFromStringNull() {
    WorkerPool wp = Factory.getInstance().createWorkerPool();
    wp.setMessageHandler(new WorkerPoolMessageHandler() {
      public void onMessageReceived(MessageEvent event) {
        // purposely empty
      }
    });

    try {
      int wID = wp.createWorker(null);
      wp.sendMessage("stop", wID);
      fail("Expected a NullPointerException");
    } catch (NullPointerException e) {
      // Expected to get here
    }
  }

  public void disabledTestReceiveMessageNumberBoxed() {
    WorkerPool wp = Factory.getInstance().createWorkerPool();
    int workerID = wp.createWorker(WORKER_JS_SRC_MAKE_TYPE);
    delayTestFinish(5000);
    wp.setMessageHandler(new WorkerPoolMessageHandler() {
      public void onMessageReceived(MessageEvent event) {
        // Window.alert("Got message as string: " + event.getBody());
        assertFalse("!isMessageString()", event.isMessageString());
        assertTrue("isMessageObject()", event.isMessageObject());
        assertFalse("!isMessageBoolean()", event.isMessageBoolean());
        assertFalse("isMessageNumber()", event.isMessageNumber());
        assertEquals(1.0, event.getBodyNumber());
        finishTest();
      }
    });
    wp.sendMessage("Number", workerID);
  }

  public void disabledTestReceiveMessageStringBoxed() {
    WorkerPool wp = Factory.getInstance().createWorkerPool();
    int workerID = wp.createWorker(WORKER_JS_SRC_MAKE_TYPE);
    delayTestFinish(5000);
    wp.setMessageHandler(new WorkerPoolMessageHandler() {
      public void onMessageReceived(MessageEvent event) {
        // Window.alert("Got message as string: " + event.getBody());
        assertFalse("!isMessageNumber()", event.isMessageNumber());
        assertTrue("isMessageObject()", event.isMessageObject());
        assertFalse("!isMessageBoolean", event.isMessageBoolean());
        assertFalse("isMessageString()", event.isMessageString());
        assertEquals("stringValue", event.getBody());
        finishTest();
      }
    });
    wp.sendMessage("String", workerID);
  }

  /**
   * Test method for {@link WorkerPool#sendMessage(String, int)}.
   */
  public void disabledTestSendMessageNegativeWorkerID() {
    WorkerPool wp = Factory.getInstance().createWorkerPool();
    wp.createWorker(WORKER_JS_SRC);
    wp.sendMessage("", -2);
  }

  /**
   * Test method for {@link WorkerPool#sendMessage(String, int)}.
   */
  public void disabledTestSendMessageNull() {
    WorkerPool wp = Factory.getInstance().createWorkerPool();
    int workerID = wp.createWorker(WORKER_JS_SRC);

    wp.sendMessage((String) null, workerID);
    wp.sendMessage("", -2);
  }

  @Override
  public String getModuleName() {
    return "com.google.gwt.gears.Gears";
  }

  /**
   * Test method for {@link WorkerPool#createWorker(String)} and
   * {@link WorkerPool#sendMessage(String, int)}.
   */
  public void testCreateWorkerFromString() {
    WorkerPool wp = Factory.getInstance().createWorkerPool();
    wp.setMessageHandler(new WorkerPoolMessageHandler() {
      public void onMessageReceived(MessageEvent event) {
        finishTest();
      }
    });

    int wID = wp.createWorker(WORKER_JS_SRC);
    delayTestFinish(5000);
    wp.sendMessage("stop", wID);
  }

  /**
   * Test method for {@link WorkerPool#createWorker(String)}.
   */
  public void testCreateWorkerFromStringEmpty() {
    WorkerPool wp = Factory.getInstance().createWorkerPool();
    wp.setMessageHandler(new WorkerPoolMessageHandler() {
      public void onMessageReceived(MessageEvent event) {
        // intentionally empty
      }
    });

    // You can create a worker from an empty string, you just can't sent it a
    // message.
    wp.createWorker("");
  }

  public void testReceiveMessageArrayBoolean() {
    WorkerPool wp = Factory.getInstance().createWorkerPool();
    int workerID = wp.createWorker(WORKER_JS_SRC_MAKE_TYPE);
    delayTestFinish(5000);
    wp.setMessageHandler(new WorkerPoolMessageHandler() {
      public void onMessageReceived(MessageEvent event) {
        // Window.alert("Got message as string: " + event.getBody());
        assertFalse("!isMessageNumber()", event.isMessageNumber());
        assertFalse("!isMessageString()", event.isMessageString());
        assertTrue("isMessageObject()", event.isMessageObject());
        assertFalse("!isMessageBoolean()", event.isMessageBoolean());
        JsArrayBoolean result = event.getBodyArrayBoolean();
        assertEquals("length of array", 5, result.length());
        assertEquals("array[0]", true, result.get(0));
        assertEquals("array[1]", false, result.get(1));
        assertEquals("array[2]", true, result.get(2));
        assertEquals("array[3]", false, result.get(3));
        assertEquals("array[4]", true, result.get(4));
        finishTest();
      }
    });
    wp.sendMessage("arrayBoolean", workerID);
  }

  public void testReceiveMessageArrayInteger() {
    WorkerPool wp = Factory.getInstance().createWorkerPool();
    int workerID = wp.createWorker(WORKER_JS_SRC_MAKE_TYPE);
    delayTestFinish(5000);
    wp.setMessageHandler(new WorkerPoolMessageHandler() {
      public void onMessageReceived(MessageEvent event) {
        // Window.alert("Got message as string: " + event.getBody());
        assertFalse("!isMessageNumber()", event.isMessageNumber());
        assertFalse("!isMessageString()", event.isMessageString());
        assertTrue("isMessageObject()", event.isMessageObject());
        assertFalse("!isMessageBoolean()", event.isMessageBoolean());
        JsArrayInteger result = event.getBodyArrayInteger();
        assertEquals("length of array", 3, result.length());
        assertEquals("array[0]", 1, result.get(0));
        assertEquals("array[1]", 2, result.get(1));
        assertEquals("array[2]", 3, result.get(2));
        finishTest();
      }
    });
    wp.sendMessage("arrayInteger", workerID);
  }

  public void testReceiveMessageArrayNumber() {
    WorkerPool wp = Factory.getInstance().createWorkerPool();
    int workerID = wp.createWorker(WORKER_JS_SRC_MAKE_TYPE);
    delayTestFinish(5000);
    wp.setMessageHandler(new WorkerPoolMessageHandler() {
      public void onMessageReceived(MessageEvent event) {
        // Window.alert("Got message as string: " + event.getBody());
        assertFalse("!isMessageNumber()", event.isMessageNumber());
        assertFalse("!isMessageString()", event.isMessageString());
        assertTrue("isMessageObject()", event.isMessageObject());
        assertFalse("!isMessageBoolean()", event.isMessageBoolean());
        JsArrayNumber result = event.getBodyArrayNumber();
        assertEquals("length of array", 4, result.length());
        assertEquals("array[0]", 1.1, result.get(0));
        assertEquals("array[1]", 2.2, result.get(1));
        assertEquals("array[2]", 3.3, result.get(2));
        assertEquals("array[3]", 4.4, result.get(3));
        finishTest();
      }
    });
    wp.sendMessage("arrayNumber", workerID);
  }

  public void testReceiveMessageArrayObject() {
    WorkerPool wp = Factory.getInstance().createWorkerPool();
    int workerID = wp.createWorker(WORKER_JS_SRC_MAKE_TYPE);
    delayTestFinish(5000);
    wp.setMessageHandler(new WorkerPoolMessageHandler() {
      @SuppressWarnings("unchecked")
      public void onMessageReceived(MessageEvent event) {
        // Window.alert("Got message as string: " + event.getBody());
        assertFalse("!isMessageNumber()", event.isMessageNumber());
        assertFalse("!isMessageString()", event.isMessageString());
        assertTrue("isMessageObject()", event.isMessageObject());
        assertFalse("!isMessageBoolean()", event.isMessageBoolean());
        JsArray<FooMessage> result = (JsArray<FooMessage>) event.getBodyArray();
        assertEquals("length of array", 2, result.length());
        FooMessage m = result.get(0);
        assertEquals("array[0]", 1, m.getFoo());
        m = result.get(1);
        assertEquals("array[1]", 2, m.getFoo());
        finishTest();
      }
    });
    wp.sendMessage("arrayObject", workerID);
  }

  public void testReceiveMessageArrayString() {
    WorkerPool wp = Factory.getInstance().createWorkerPool();
    int workerID = wp.createWorker(WORKER_JS_SRC_MAKE_TYPE);
    delayTestFinish(5000);
    wp.setMessageHandler(new WorkerPoolMessageHandler() {
      public void onMessageReceived(MessageEvent event) {
        // Window.alert("Got message as string: " + event.getBody());
        assertFalse("!isMessageNumber()", event.isMessageNumber());
        assertFalse("!isMessageString()", event.isMessageString());
        assertTrue("isMessageObject()", event.isMessageObject());
        assertFalse("!isMessageBoolean()", event.isMessageBoolean());
        JsArrayString result = event.getBodyArrayString();
        assertEquals("length of array", 2, result.length());
        assertEquals("array[0]", "foo", result.get(0));
        assertEquals("array[1]", "bar", result.get(1));
        finishTest();
      }
    });
    wp.sendMessage("arrayString", workerID);
  }

  public void testReceiveMessageBoolean() {
    WorkerPool wp = Factory.getInstance().createWorkerPool();
    int workerID = wp.createWorker(WORKER_JS_SRC_MAKE_TYPE);
    delayTestFinish(5000);
    wp.setMessageHandler(new WorkerPoolMessageHandler() {
      public void onMessageReceived(MessageEvent event) {
        // Window.alert("Got message as string: " + event.getBody());
        assertFalse("!isMessageNumber()", event.isMessageNumber());
        assertFalse("!isMessageString()", event.isMessageString());
        assertFalse("!isMessageObject()", event.isMessageObject());
        assertTrue("isMessageBoolean()", event.isMessageBoolean());
        assertEquals(true, event.getBodyBoolean());
        finishTest();
      }
    });
    wp.sendMessage("boolean", workerID);
  }

  public void testReceiveMessageBooleanBoxed() {
    WorkerPool wp = Factory.getInstance().createWorkerPool();
    int workerID = wp.createWorker(WORKER_JS_SRC_MAKE_TYPE);
    delayTestFinish(5000);
    wp.setMessageHandler(new WorkerPoolMessageHandler() {
      public void onMessageReceived(MessageEvent event) {
        // Window.alert("Got message as string: " + event.getBody());
        assertFalse("!isMessageNumber()", event.isMessageNumber());
        assertFalse("!isMessageString()", event.isMessageString());
        assertTrue("isMessageObject()", event.isMessageObject());
        assertFalse("isMessageBoolean()", event.isMessageBoolean());
        assertEquals(true, event.getBodyBoolean());
        finishTest();
      }
    });
    wp.sendMessage("Boolean", workerID);
  }

  public void testReceiveMessageNumber() {
    WorkerPool wp = Factory.getInstance().createWorkerPool();
    int workerID = wp.createWorker(WORKER_JS_SRC_MAKE_TYPE);
    delayTestFinish(5000);
    wp.setMessageHandler(new WorkerPoolMessageHandler() {
      public void onMessageReceived(MessageEvent event) {
        // Window.alert("Got message as string: " + event.getBody());
        assertFalse("!isMessageString()", event.isMessageString());
        assertFalse("!isMessageObject()", event.isMessageObject());
        assertFalse("!isMessageBoolean()", event.isMessageBoolean());
        assertTrue("isMessageNumber()", event.isMessageNumber());
        assertEquals(1.0, event.getBodyNumber());
        finishTest();
      }
    });
    wp.sendMessage("number", workerID);
  }

  public void testReceiveMessageObject() {
    WorkerPool wp = Factory.getInstance().createWorkerPool();
    int workerID = wp.createWorker(WORKER_JS_SRC_MAKE_TYPE);
    delayTestFinish(5000);
    wp.setMessageHandler(new WorkerPoolMessageHandler() {
      public void onMessageReceived(MessageEvent event) {
        // Window.alert("Got message as string: " + event.getBody());
        assertFalse("!isMessageNumber()", event.isMessageNumber());
        assertFalse("!isMessageString()", event.isMessageString());
        assertFalse("!isMessageBoolean()", event.isMessageBoolean());
        assertTrue("isMessageObject()", event.isMessageObject());
        FooMessage fooObj = event.getBodyObject().cast();
        assertEquals(1, fooObj.getFoo());
        finishTest();
      }
    });
    wp.sendMessage("object", workerID);
  }

  public void testReceiveMessageString() {
    WorkerPool wp = Factory.getInstance().createWorkerPool();
    int workerID = wp.createWorker(WORKER_JS_SRC_MAKE_TYPE);
    delayTestFinish(5000);
    wp.setMessageHandler(new WorkerPoolMessageHandler() {
      public void onMessageReceived(MessageEvent event) {
        // Window.alert("Got message as string: " + event.getBody());
        assertFalse("!isMessageNumber()", event.isMessageNumber());
        assertFalse("!isMessageObject()", event.isMessageObject());
        assertFalse("!isMessageBoolean", event.isMessageBoolean());
        assertTrue("isMessageString()", event.isMessageString());
        assertEquals("stringValue", event.getBody());
        finishTest();
      }
    });
    wp.sendMessage("string", workerID);
  }

  /**
   * Test method for {@link WorkerPool#sendMessage(boolean, int)}.
   */
  public void testSendMessageBoolean() {

    WorkerPool wp = Factory.getInstance().createWorkerPool();
    int workerID = wp.createWorker(WORKER_JS_SRC_BOOL);
    delayTestFinish(5000);
    wp.setMessageHandler(new WorkerPoolMessageHandler() {
      public void onMessageReceived(MessageEvent event) {
        assertEquals("done", event.getBody());
        finishTest();
      }
    });
    wp.sendMessage(true, workerID);
  }

  /**
   * Test method for {@link WorkerPool#sendMessage(String, int)}.
   */
  public void testSendMessageEmpty() {
    WorkerPool wp = Factory.getInstance().createWorkerPool();
    int workerID = wp.createWorker(WORKER_JS_SRC);
    wp.sendMessage("", workerID);
  }

  /**
   * Test method for {@link WorkerPool#sendMessage(double, int)}.
   */
  public void testSendMessageNumber() {
    WorkerPool wp = Factory.getInstance().createWorkerPool();
    int workerID = wp.createWorker(WORKER_JS_SRC_DOUBLE);
    delayTestFinish(5000);
    wp.setMessageHandler(new WorkerPoolMessageHandler() {
      public void onMessageReceived(MessageEvent event) {
        assertEquals("done", event.getBody());
        finishTest();
      }
    });
    wp.sendMessage(1.0, workerID);
  }

  /**
   * Test method for {@link WorkerPool#sendMessage(JavaScriptObject, int)}.
   */
  public void testSendMessageObject() {
    WorkerPool wp = Factory.getInstance().createWorkerPool();
    int workerID = wp.createWorker(WORKER_JS_SRC_OBJ);
    delayTestFinish(5000);
    wp.setMessageHandler(new WorkerPoolMessageHandler() {
      public void onMessageReceived(MessageEvent event) {
        assertEquals("done", event.getBody());
        finishTest();
      }
    });
    FooMessage foo = FooMessage.createObject().cast();
    foo.setFoo(1);
    wp.sendMessage(foo, workerID);
  }

  /**
   * Test method for {@link WorkerPool#sendMessage(String, int)}.
   */
  public void testSendMessageString() {
    WorkerPool wp = Factory.getInstance().createWorkerPool();
    int workerID = wp.createWorker(WORKER_JS_SRC);
    delayTestFinish(5000);
    wp.setMessageHandler(new WorkerPoolMessageHandler() {
      public void onMessageReceived(MessageEvent event) {
        assertEquals("done", event.getBody());
        finishTest();
      }
    });
    wp.sendMessage("foo", workerID);
  }
}
TOP

Related Classes of com.google.gwt.gears.client.workerpool.WorkerPoolTest$FooMessage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.