Index: chrome/test/data/extensions/api_test/gcm/functions/send/send.js |
diff --git a/chrome/test/data/extensions/api_test/gcm/functions/send/send.js b/chrome/test/data/extensions/api_test/gcm/functions/send/send.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..82f6d679140657a961e131557918474c1bca1f92 |
--- /dev/null |
+++ b/chrome/test/data/extensions/api_test/gcm/functions/send/send.js |
@@ -0,0 +1,135 @@ |
+// Copyright 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+function createMessage() { |
+ return { |
+ messageId: "message-id", |
+ destinationId: "destination-id", |
+ timeToLive: 2419200, |
+ data: { |
+ "key1": "value1", |
+ "key2": "value" |
+ } |
+ }; |
+} |
+ |
+function successfulSend(message) { |
+ chrome.gcm.send(message, function(messageId) { |
+ chrome.test.assertEq(message.messageId, messageId); |
+ chrome.test.succeed(); |
+ }); |
+} |
+ |
+function unsuccessfulSend(message) { |
+ try { |
+ chrome.gcm.send(message, function(messageId) { |
+ chrome.test.fail(message); |
+ }); |
+ } catch(e) { |
+ chrome.test.succeed(); |
+ } |
+} |
+ |
+function scenario(messageMutations, send) { |
+ var message = createMessage(); |
+ messageMutations.forEach(function(mutation) { |
+ mutation(message); |
+ }); |
+ send(message); |
+} |
+ |
+function expectSuccessWhen() { |
+ scenario(Array.prototype.slice.call(arguments), successfulSend); |
+} |
+ |
+function expectFailureWhen() { |
+ scenario(Array.prototype.slice.call(arguments), unsuccessfulSend); |
+} |
+ |
+chrome.test.runTests([ |
+ function successWhenHappyPath() { |
+ expectSuccessWhen(/* no changes to message here */); |
+ }, |
+ function successWhenTtlIsZero() { |
+ expectSuccessWhen(function(message) { message.timeToLive = 0; }); |
+ }, |
+ function successWhenTtlIsMissing() { |
+ expectSuccessWhen(function(message) { delete message.timeToLive; }); |
+ }, |
+ function failureWhenTtlIsNegative() { |
+ expectFailureWhen(function(message) { message.timeToLive = -1; }); |
+ }, |
+ function failureWhenTtlIsTooLarge() { |
+ expectFailureWhen(function(message) { message.timeToLive = 24192001; }); |
+ }, |
+ function failureWhenMessageIdMissing() { |
+ expectFailureWhen(function(message) { delete message.messageId; }); |
+ }, |
+ function failureWhenMessageIdIsEmpty() { |
+ expectFailureWhen(function(message) { message.messageId = ""; }); |
+ }, |
+ function failureWhenDestinationIdMissing() { |
+ expectFailureWhen(function(message) { delete message.destinationId; }); |
+ }, |
+ function failureWhenDestinationIdIsEmpty() { |
+ expectFailureWhen(function(message) { message.destinationId = ""; }); |
+ }, |
+ function failureWhenDataIsMissing() { |
+ expectFailureWhen(function(message) { delete message.data; }); |
+ }, |
+ function failureWhenDataIsEmpty() { |
+ expectFailureWhen(function(message) { message.data = {}; }); |
+ }, |
+ function failureWhenDataKeyIsEmpty() { |
+ expectFailureWhen(function(message) { message.data[""] = "value"; }); |
+ }, |
+ function successWhenDataKeyHasGoogDotInIt() { |
+ expectSuccessWhen(function(message) { |
+ message.data["something.goog."] = "value"; |
+ }); |
+ }, |
+ function failureWhenDataKeyIsGoogDot() { |
+ expectFailureWhen(function(message) { message.data["goog."] = "value"; }); |
+ }, |
+ function failureWhenDataKeyIsGoogDotPrefixed() { |
+ expectFailureWhen(function(message) { |
+ message.data["goog.something"] = "value"; |
+ }); |
+ }, |
+ function successWhenDataKeyHasGoogleInIt() { |
+ expectSuccessWhen(function(message) { |
+ message.data["somthing.google"] = "value"; |
+ }); |
+ }, |
+ function failureWhenDataKeyIsGoogle() { |
+ expectFailureWhen(function(message) { |
+ message.data["google"] = "value"; |
+ }); |
+ }, |
+ function failureWhenDataKeyIsGooglePrefixed() { |
+ expectFailureWhen(function(message) { |
+ message.data["googleSomething"] = "value"; |
+ }); |
+ }, |
+ function failureWhenMessageIsTooLarge() { |
+ expectFailureWhen(function(message) { |
+ function generateString(base, len) { |
+ // Generates a string of size |len| by concatenating |base| multiple |
+ // times and trimming to |len|. |
+ while (base.length < len) base += base; |
+ return base.substring(0, len); |
+ } |
+ |
+ var source = "abcdefghijklmnopqrstuvwxyz"; |
+ // Creates 8 * (256 + 256) == 4096 bytes of message data which together |
+ // with data put in by default is more than allowed max. |
+ var entries = 8; |
+ while (entries > 0) { |
+ var s = generateString(source + entries, 256); |
+ message.data[s] = s; |
+ --entries; |
+ } |
+ }); |
+ } |
+]); |