Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: chrome/renderer/extensions/messaging_utils_unittest.cc

Issue 375243002: Move ModuleSystemTest and the tests that use it into extensions/. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: namespace extensions Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/strings/stringprintf.h"
6 #include "chrome/test/base/module_system_test.h"
7 #include "grit/extensions_renderer_resources.h"
8
9 namespace extensions {
10 namespace {
11
12 class MessagingUtilsUnittest : public ModuleSystemTest {
13 protected:
14 void RegisterTestModule(const char* code) {
15 env()->RegisterModule(
16 "test",
17 base::StringPrintf(
18 "var assert = requireNative('assert');\n"
19 "var AssertTrue = assert.AssertTrue;\n"
20 "var AssertFalse = assert.AssertFalse;\n"
21 "var messagingUtils = require('messaging_utils');\n"
22 "%s",
23 code));
24 }
25
26 private:
27 virtual void SetUp() OVERRIDE {
28 ModuleSystemTest::SetUp();
29
30 env()->RegisterModule("messaging_utils", IDR_MESSAGING_UTILS_JS);
31 }
32
33 };
34
35 TEST_F(MessagingUtilsUnittest, TestNothing) {
36 ExpectNoAssertionsMade();
37 }
38
39 TEST_F(MessagingUtilsUnittest, NoArguments) {
40 ModuleSystem::NativesEnabledScope natives_enabled_scope(
41 env()->module_system());
42 RegisterTestModule(
43 "var args = messagingUtils.alignSendMessageArguments();\n"
44 "AssertTrue(args === null);");
45 env()->module_system()->Require("test");
46 }
47
48 TEST_F(MessagingUtilsUnittest, ZeroArguments) {
49 ModuleSystem::NativesEnabledScope natives_enabled_scope(
50 env()->module_system());
51 RegisterTestModule(
52 "var args = messagingUtils.alignSendMessageArguments([]);"
53 "AssertTrue(args === null);");
54 env()->module_system()->Require("test");
55 }
56
57 TEST_F(MessagingUtilsUnittest, TooManyArgumentsNoOptions) {
58 ModuleSystem::NativesEnabledScope natives_enabled_scope(
59 env()->module_system());
60 RegisterTestModule(
61 "var args = messagingUtils.alignSendMessageArguments(\n"
62 " ['a', 'b', 'c', 'd']);\n"
63 "AssertTrue(args === null);");
64 env()->module_system()->Require("test");
65 }
66
67 TEST_F(MessagingUtilsUnittest, TooManyArgumentsWithOptions) {
68 ModuleSystem::NativesEnabledScope natives_enabled_scope(
69 env()->module_system());
70 RegisterTestModule(
71 "var args = messagingUtils.alignSendMessageArguments(\n"
72 " ['a', 'b', 'c', 'd', 'e'], true);\n"
73 "AssertTrue(args === null);");
74 env()->module_system()->Require("test");
75 }
76
77 TEST_F(MessagingUtilsUnittest, FinalArgumentIsNotAFunctionNoOptions) {
78 ModuleSystem::NativesEnabledScope natives_enabled_scope(
79 env()->module_system());
80 RegisterTestModule(
81 "var args = messagingUtils.alignSendMessageArguments(\n"
82 " ['a', 'b', 'c']);\n"
83 "AssertTrue(args === null);");
84 env()->module_system()->Require("test");
85 }
86
87 TEST_F(MessagingUtilsUnittest, FinalArgumentIsNotAFunctionWithOptions) {
88 ModuleSystem::NativesEnabledScope natives_enabled_scope(
89 env()->module_system());
90 RegisterTestModule(
91 "var args = messagingUtils.alignSendMessageArguments(\n"
92 " ['a', 'b', 'c', 'd'], true);\n"
93 "AssertTrue(args === null);");
94 env()->module_system()->Require("test");
95 }
96
97 TEST_F(MessagingUtilsUnittest, OneStringArgument) {
98 ModuleSystem::NativesEnabledScope natives_enabled_scope(
99 env()->module_system());
100 // Because the request argument is required, a single argument must get
101 // mapped to it rather than to the optional targetId argument.
102 RegisterTestModule(
103 "var args = messagingUtils.alignSendMessageArguments(['a']);\n"
104 "AssertTrue(args.length == 3);\n"
105 "AssertTrue(args[0] === null);\n"
106 "AssertTrue(args[1] == 'a');\n"
107 "AssertTrue(args[2] === null);");
108 env()->module_system()->Require("test");
109 }
110
111 TEST_F(MessagingUtilsUnittest, OneStringAndOneNullArgument) {
112 ModuleSystem::NativesEnabledScope natives_enabled_scope(
113 env()->module_system());
114 // Explicitly specifying null as the request is allowed.
115 RegisterTestModule(
116 "var args = messagingUtils.alignSendMessageArguments(['a', null]);\n"
117 "AssertTrue(args.length == 3);\n"
118 "AssertTrue(args[0] == 'a');\n"
119 "AssertTrue(args[1] === null);\n"
120 "AssertTrue(args[2] === null);");
121 env()->module_system()->Require("test");
122 }
123
124 TEST_F(MessagingUtilsUnittest, OneNullAndOneStringArgument) {
125 ModuleSystem::NativesEnabledScope natives_enabled_scope(
126 env()->module_system());
127 RegisterTestModule(
128 "var args = messagingUtils.alignSendMessageArguments([null, 'a']);\n"
129 "AssertTrue(args.length == 3);\n"
130 "AssertTrue(args[0] === null);\n"
131 "AssertTrue(args[1] == 'a');\n"
132 "AssertTrue(args[2] === null);");
133 env()->module_system()->Require("test");
134 }
135
136 TEST_F(MessagingUtilsUnittest, OneStringAndOneFunctionArgument) {
137 ModuleSystem::NativesEnabledScope natives_enabled_scope(
138 env()->module_system());
139 // When the arguments are a string and a function, the function is
140 // unambiguously the responseCallback. Because the request argument is
141 // required, the remaining argument must get mapped to it rather than to the
142 // optional targetId argument.
143 RegisterTestModule(
144 "var cb = function() {};\n"
145 "var args = messagingUtils.alignSendMessageArguments(['a', cb]);\n"
146 "AssertTrue(args.length == 3);\n"
147 "AssertTrue(args[0] === null);\n"
148 "AssertTrue(args[1] == 'a');\n"
149 "AssertTrue(args[2] == cb);");
150 env()->module_system()->Require("test");
151 }
152
153 TEST_F(MessagingUtilsUnittest, OneStringAndOneObjectArgument) {
154 ModuleSystem::NativesEnabledScope natives_enabled_scope(
155 env()->module_system());
156 // This tests an ambiguous set of arguments when options are present:
157 // chrome.runtime.sendMessage('target', {'msg': 'this is a message'});
158 // vs.
159 // chrome.runtime.sendMessage('request', {'includeTlsChannelId': true});
160 //
161 // The question is whether the string should map to the target and the
162 // dictionary to the message, or whether the string should map to the message
163 // and the dictionary to the options. Because the target and message arguments
164 // predate the options argument, we bind the string in this case to the
165 // targetId.
166 RegisterTestModule(
167 "var obj = {'b': true};\n"
168 "var args = messagingUtils.alignSendMessageArguments(['a', obj], true);\n"
169 "AssertTrue(args.length == 4);\n"
170 "AssertTrue(args[0] == 'a');\n"
171 "AssertTrue(args[1] == obj);\n"
172 "AssertTrue(args[2] === null);\n"
173 "AssertTrue(args[3] === null);");
174 env()->module_system()->Require("test");
175 }
176
177 TEST_F(MessagingUtilsUnittest, TwoObjectArguments) {
178 ModuleSystem::NativesEnabledScope natives_enabled_scope(
179 env()->module_system());
180 // When two non-string arguments are provided and options are present, the
181 // two arguments must match request and options, respectively, because
182 // targetId must be a string.
183 RegisterTestModule(
184 "var obj1 = {'a': 'foo'};\n"
185 "var obj2 = {'b': 'bar'};\n"
186 "var args = messagingUtils.alignSendMessageArguments(\n"
187 " [obj1, obj2], true);\n"
188 "AssertTrue(args.length == 4);\n"
189 "AssertTrue(args[0] === null);\n"
190 "AssertTrue(args[1] == obj1);\n"
191 "AssertTrue(args[2] == obj2);\n"
192 "AssertTrue(args[3] === null);");
193 env()->module_system()->Require("test");
194 }
195
196 } // namespace
197 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698