1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// found in the LICENSE file.
4d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
5d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/strings/stringprintf.h"
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "extensions/renderer/module_system_test.h"
746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "grit/extensions_renderer_resources.h"
8d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace extensions {
10d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace {
11d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
12d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)class MessagingUtilsUnittest : public ModuleSystemTest {
13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) protected:
14d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  void RegisterTestModule(const char* code) {
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    env()->RegisterModule(
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        "test",
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        base::StringPrintf(
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            "var assert = requireNative('assert');\n"
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            "var AssertTrue = assert.AssertTrue;\n"
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            "var AssertFalse = assert.AssertFalse;\n"
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            "var messagingUtils = require('messaging_utils');\n"
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            "%s",
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            code));
24d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  }
25d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
26d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) private:
27d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual void SetUp() OVERRIDE {
28d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    ModuleSystemTest::SetUp();
29d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    env()->RegisterModule("messaging_utils", IDR_MESSAGING_UTILS_JS);
31d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  }
32d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)};
33d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)TEST_F(MessagingUtilsUnittest, TestNothing) {
35d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  ExpectNoAssertionsMade();
36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
37d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
38d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)TEST_F(MessagingUtilsUnittest, NoArguments) {
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ModuleSystem::NativesEnabledScope natives_enabled_scope(
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      env()->module_system());
41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  RegisterTestModule(
42d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "var args = messagingUtils.alignSendMessageArguments();\n"
43d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "AssertTrue(args === null);");
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  env()->module_system()->Require("test");
45d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
46d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
47d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)TEST_F(MessagingUtilsUnittest, ZeroArguments) {
48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ModuleSystem::NativesEnabledScope natives_enabled_scope(
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      env()->module_system());
50d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  RegisterTestModule(
51d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "var args = messagingUtils.alignSendMessageArguments([]);"
52d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "AssertTrue(args === null);");
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  env()->module_system()->Require("test");
54d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
55d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(MessagingUtilsUnittest, TooManyArgumentsNoOptions) {
57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ModuleSystem::NativesEnabledScope natives_enabled_scope(
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      env()->module_system());
59d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  RegisterTestModule(
60d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "var args = messagingUtils.alignSendMessageArguments(\n"
61d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "    ['a', 'b', 'c', 'd']);\n"
62d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "AssertTrue(args === null);");
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  env()->module_system()->Require("test");
64d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
65d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(MessagingUtilsUnittest, TooManyArgumentsWithOptions) {
67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ModuleSystem::NativesEnabledScope natives_enabled_scope(
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      env()->module_system());
694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  RegisterTestModule(
704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      "var args = messagingUtils.alignSendMessageArguments(\n"
714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      "    ['a', 'b', 'c', 'd', 'e'], true);\n"
724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      "AssertTrue(args === null);");
73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  env()->module_system()->Require("test");
744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(MessagingUtilsUnittest, FinalArgumentIsNotAFunctionNoOptions) {
77a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ModuleSystem::NativesEnabledScope natives_enabled_scope(
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      env()->module_system());
79d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  RegisterTestModule(
80d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "var args = messagingUtils.alignSendMessageArguments(\n"
81d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "    ['a', 'b', 'c']);\n"
82d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "AssertTrue(args === null);");
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  env()->module_system()->Require("test");
84d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
85d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(MessagingUtilsUnittest, FinalArgumentIsNotAFunctionWithOptions) {
87a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ModuleSystem::NativesEnabledScope natives_enabled_scope(
88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      env()->module_system());
894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  RegisterTestModule(
904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      "var args = messagingUtils.alignSendMessageArguments(\n"
914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      "    ['a', 'b', 'c', 'd'], true);\n"
924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      "AssertTrue(args === null);");
93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  env()->module_system()->Require("test");
944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
96d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)TEST_F(MessagingUtilsUnittest, OneStringArgument) {
97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ModuleSystem::NativesEnabledScope natives_enabled_scope(
98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      env()->module_system());
99d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Because the request argument is required, a single argument must get
100d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // mapped to it rather than to the optional targetId argument.
101d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  RegisterTestModule(
102d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "var args = messagingUtils.alignSendMessageArguments(['a']);\n"
103d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "AssertTrue(args.length == 3);\n"
104d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "AssertTrue(args[0] === null);\n"
105d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "AssertTrue(args[1] == 'a');\n"
106d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "AssertTrue(args[2] === null);");
107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  env()->module_system()->Require("test");
108d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
109d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
110d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)TEST_F(MessagingUtilsUnittest, OneStringAndOneNullArgument) {
111a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ModuleSystem::NativesEnabledScope natives_enabled_scope(
112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      env()->module_system());
113d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Explicitly specifying null as the request is allowed.
114d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  RegisterTestModule(
115d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "var args = messagingUtils.alignSendMessageArguments(['a', null]);\n"
116d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "AssertTrue(args.length == 3);\n"
117d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "AssertTrue(args[0] == 'a');\n"
118d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "AssertTrue(args[1] === null);\n"
119d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "AssertTrue(args[2] === null);");
120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  env()->module_system()->Require("test");
121d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
122d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
123d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)TEST_F(MessagingUtilsUnittest, OneNullAndOneStringArgument) {
124a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ModuleSystem::NativesEnabledScope natives_enabled_scope(
125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      env()->module_system());
126d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  RegisterTestModule(
127d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "var args = messagingUtils.alignSendMessageArguments([null, 'a']);\n"
128d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "AssertTrue(args.length == 3);\n"
129d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "AssertTrue(args[0] === null);\n"
130d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "AssertTrue(args[1] == 'a');\n"
131d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "AssertTrue(args[2] === null);");
132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  env()->module_system()->Require("test");
133d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
134d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
135d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)TEST_F(MessagingUtilsUnittest, OneStringAndOneFunctionArgument) {
136a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ModuleSystem::NativesEnabledScope natives_enabled_scope(
137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      env()->module_system());
138d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // When the arguments are a string and a function, the function is
139d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // unambiguously the responseCallback. Because the request argument is
140d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // required, the remaining argument must get mapped to it rather than to the
141d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // optional targetId argument.
142d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  RegisterTestModule(
143d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "var cb = function() {};\n"
144d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "var args = messagingUtils.alignSendMessageArguments(['a', cb]);\n"
145d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "AssertTrue(args.length == 3);\n"
146d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "AssertTrue(args[0] === null);\n"
147d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "AssertTrue(args[1] == 'a');\n"
148d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "AssertTrue(args[2] == cb);");
149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  env()->module_system()->Require("test");
150d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
151d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
1524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(MessagingUtilsUnittest, OneStringAndOneObjectArgument) {
153a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ModuleSystem::NativesEnabledScope natives_enabled_scope(
154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      env()->module_system());
1554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // This tests an ambiguous set of arguments when options are present:
1564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // chrome.runtime.sendMessage('target', {'msg': 'this is a message'});
1574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // vs.
1584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // chrome.runtime.sendMessage('request', {'includeTlsChannelId': true});
1594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  //
1604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // The question is whether the string should map to the target and the
1614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // dictionary to the message, or whether the string should map to the message
1624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // and the dictionary to the options. Because the target and message arguments
1634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // predate the options argument, we bind the string in this case to the
1644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // targetId.
1654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  RegisterTestModule(
1664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      "var obj = {'b': true};\n"
1674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      "var args = messagingUtils.alignSendMessageArguments(['a', obj], true);\n"
1684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      "AssertTrue(args.length == 4);\n"
1694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      "AssertTrue(args[0] == 'a');\n"
1704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      "AssertTrue(args[1] == obj);\n"
1714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      "AssertTrue(args[2] === null);\n"
1724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      "AssertTrue(args[3] === null);");
173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  env()->module_system()->Require("test");
1744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
1754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(MessagingUtilsUnittest, TwoObjectArguments) {
177a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ModuleSystem::NativesEnabledScope natives_enabled_scope(
178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      env()->module_system());
1794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // When two non-string arguments are provided and options are present, the
1804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // two arguments must match request and options, respectively, because
1814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // targetId must be a string.
1824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  RegisterTestModule(
1834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      "var obj1 = {'a': 'foo'};\n"
1844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      "var obj2 = {'b': 'bar'};\n"
1854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      "var args = messagingUtils.alignSendMessageArguments(\n"
1864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      "    [obj1, obj2], true);\n"
1874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      "AssertTrue(args.length == 4);\n"
1884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      "AssertTrue(args[0] === null);\n"
1894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      "AssertTrue(args[1] == obj1);\n"
1904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      "AssertTrue(args[2] == obj2);\n"
1914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      "AssertTrue(args[3] === null);");
192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  env()->module_system()->Require("test");
1934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
1944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
195d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}  // namespace
196d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}  // namespace extensions
197