chromium/chrome/test/data/extensions/api_test/gcm/events/on_message.js

// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

onload = function() {
  chrome.test.runTests([
    function onMessage() {
      var expectedCalls = 4;
      var fromAndCollapseKeyTested = false;
      var fromTested = false;
      var collapseKeyTested = false;
      var regularMessageTested = false;
      var eventHandler = function(message) {
        var hasFrom = false;
        var hasCollapseKey = false;
        if (message.hasOwnProperty('from')) {
          // Test with from.
          chrome.test.assertEq('12345678', message.from);
          hasFrom = true;
        }
        if (message.hasOwnProperty('collapseKey')) {
          // Test with a collapse key.
          chrome.test.assertEq('collapseKeyValue', message.collapseKey);
          hasCollapseKey = true;
        }

        if (hasFrom && hasCollapseKey) {
          fromAndCollapseKeyTested = true;
        } else if (hasFrom) {
          fromTested = true;
        } else if (hasCollapseKey) {
          collapseKeyTested = true;
        } else {
          regularMessageTested = true;
        }

        // The message is expected to carry data regardless of other optional
        // fields.
        chrome.test.assertEq(2, Object.keys(message.data).length);
        chrome.test.assertTrue(message.data.hasOwnProperty('property1'));
        chrome.test.assertTrue(message.data.hasOwnProperty('property2'));
        chrome.test.assertEq('value1', message.data.property1);
        chrome.test.assertEq('value2', message.data.property2);

        --expectedCalls;
        if (expectedCalls == 0) {
          chrome.gcm.onMessage.removeListener(eventHandler);
          if (fromAndCollapseKeyTested && fromTested && collapseKeyTested &&
              regularMessageTested) {
            chrome.test.succeed();
          } else {
            chrome.test.fail();
          }
        }
      };
      chrome.gcm.onMessage.addListener(eventHandler);
    }
  ]);
};