1 // Copyright (c) 2013 Intel Corporation. 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.
5 #include "xwalk/sysapps/common/common_api_browsertest.h"
7 #include "base/path_service.h"
8 #include "base/strings/utf_string_conversions.h"
9 #include "content/public/test/browser_test.h"
10 #include "content/public/test/browser_test_utils.h"
11 #include "content/public/test/test_utils.h"
12 #include "net/base/filename_util.h"
13 #include "xwalk/extensions/browser/xwalk_extension_service.h"
14 #include "xwalk/extensions/common/xwalk_extension.h"
15 #include "xwalk/runtime/browser/runtime.h"
16 #include "xwalk/sysapps/common/binding_object.h"
17 #include "xwalk/test/base/in_process_browser_test.h"
18 #include "xwalk/test/base/xwalk_test_utils.h"
20 using namespace xwalk::extensions; // NOLINT
21 using xwalk::sysapps::BindingObject;
23 SysAppsTestExtension::SysAppsTestExtension() {
24 set_name("sysapps_common_test");
26 "var v8tools = requireNative('v8tools');"
28 "var internal = requireNative('internal');"
29 "internal.setupInternalExtension(extension);"
31 "var common = requireNative('sysapps_common');"
32 "common.setupSysAppsCommon(internal, v8tools);"
34 "var Promise = requireNative('sysapps_promise').Promise;"
36 "var TestObject = function() {"
37 " common.BindingObject.call(this, common.getUniqueId());"
38 " common.EventTarget.call(this);"
39 " internal.postMessage('TestObjectConstructor', [this._id]);"
40 " this._addMethod('isTestEventActive', true);"
41 " this._addMethod('fireTestEvent', true);"
42 " this._addMethodWithPromise('makeFulfilledPromise', Promise);"
43 " this._addMethodWithPromise('makeRejectedPromise', Promise);"
44 " this._addEvent('test');"
45 " this._registerLifecycleTracker();"
48 "TestObject.prototype = new common.EventTargetPrototype();"
50 "exports.v8tools = v8tools;"
51 "exports.TestObject = TestObject;"
52 "exports.hasObject = function(object_id, callback) {"
53 " internal.postMessage('hasObject', [object_id], callback);"
57 XWalkExtensionInstance* SysAppsTestExtension::CreateInstance() {
58 return new SysAppsTestExtensionInstance();
61 SysAppsTestExtensionInstance::SysAppsTestExtensionInstance()
64 handler_.Register("TestObjectConstructor",
65 base::Bind(&SysAppsTestExtensionInstance::OnSysAppsTestObjectContructor,
66 base::Unretained(this)));
67 handler_.Register("hasObject",
68 base::Bind(&SysAppsTestExtensionInstance::OnHasObject,
69 base::Unretained(this)));
72 void SysAppsTestExtensionInstance::HandleMessage(scoped_ptr<base::Value> msg) {
73 handler_.HandleMessage(msg.Pass());
76 void SysAppsTestExtensionInstance::OnSysAppsTestObjectContructor(
77 scoped_ptr<XWalkExtensionFunctionInfo> info) {
78 std::string object_id;
79 ASSERT_TRUE(info->arguments()->GetString(0, &object_id));
81 scoped_ptr<BindingObject> obj(new SysAppsTestObject);
82 store_.AddBindingObject(object_id, obj.Pass());
85 void SysAppsTestExtensionInstance::OnHasObject(
86 scoped_ptr<XWalkExtensionFunctionInfo> info) {
87 std::string object_id;
88 ASSERT_TRUE(info->arguments()->GetString(0, &object_id));
90 scoped_ptr<base::ListValue> result(new base::ListValue());
91 result->AppendBoolean(store_.HasObjectForTesting(object_id));
93 info->PostResult(result.Pass());
96 SysAppsTestObject::SysAppsTestObject() : is_test_event_active_(false) {
97 handler_.Register("isTestEventActive",
98 base::Bind(&SysAppsTestObject::OnIsTestEventActive,
99 base::Unretained(this)));
100 handler_.Register("fireTestEvent",
101 base::Bind(&SysAppsTestObject::OnFireTestEvent,
102 base::Unretained(this)));
103 handler_.Register("makeFulfilledPromise",
104 base::Bind(&SysAppsTestObject::OnMakeFulfilledPromise,
105 base::Unretained(this)));
106 handler_.Register("makeRejectedPromise",
107 base::Bind(&SysAppsTestObject::OnMakeRejectedPromise,
108 base::Unretained(this)));
111 void SysAppsTestObject::StartEvent(const std::string& type) {
113 is_test_event_active_ = true;
116 void SysAppsTestObject::StopEvent(const std::string& type) {
118 is_test_event_active_ = false;
121 void SysAppsTestObject::OnIsTestEventActive(
122 scoped_ptr<XWalkExtensionFunctionInfo> info) {
123 scoped_ptr<base::ListValue> result(new base::ListValue());
124 result->AppendBoolean(is_test_event_active_);
126 info->PostResult(result.Pass());
129 void SysAppsTestObject::OnFireTestEvent(
130 scoped_ptr<XWalkExtensionFunctionInfo> info) {
131 scoped_ptr<base::ListValue> data(new base::ListValue());
132 data->AppendString("Lorem ipsum");
133 DispatchEvent("test", data.Pass());
135 scoped_ptr<base::ListValue> result(new base::ListValue());
136 info->PostResult(result.Pass());
139 void SysAppsTestObject::OnMakeFulfilledPromise(
140 scoped_ptr<XWalkExtensionFunctionInfo> info) {
141 scoped_ptr<base::ListValue> result(new base::ListValue());
142 result->AppendString("Lorem ipsum"); // Data.
143 result->AppendString(""); // Error, empty == no error.
145 info->PostResult(result.Pass());
148 void SysAppsTestObject::OnMakeRejectedPromise(
149 scoped_ptr<XWalkExtensionFunctionInfo> info) {
150 scoped_ptr<base::ListValue> result(new base::ListValue());
151 result->AppendString(""); // Data.
152 result->AppendString("Lorem ipsum"); // Error, !empty == error.
154 info->PostResult(result.Pass());
157 class SysAppsCommonTest : public InProcessBrowserTest {
159 virtual void SetUp() {
160 XWalkExtensionService::SetCreateUIThreadExtensionsCallbackForTesting(
161 base::Bind(&SysAppsCommonTest::CreateExtensions,
162 base::Unretained(this)));
163 InProcessBrowserTest::SetUp();
166 void CreateExtensions(XWalkExtensionVector* extensions) {
167 extensions->push_back(new SysAppsTestExtension);
171 IN_PROC_BROWSER_TEST_F(SysAppsCommonTest, SysAppsCommon) {
172 const base::string16 passString = base::ASCIIToUTF16("Pass");
173 const base::string16 failString = base::ASCIIToUTF16("Fail");
175 content::RunAllPendingInMessageLoop();
176 content::TitleWatcher title_watcher(runtime()->web_contents(), passString);
177 title_watcher.AlsoWaitForTitle(failString);
179 base::FilePath test_file;
180 PathService::Get(base::DIR_SOURCE_ROOT, &test_file);
181 test_file = test_file
182 .Append(FILE_PATH_LITERAL("xwalk"))
183 .Append(FILE_PATH_LITERAL("sysapps"))
184 .Append(FILE_PATH_LITERAL("common"))
185 .Append(FILE_PATH_LITERAL("common_api_browsertest.html"));
187 xwalk_test_utils::NavigateToURL(runtime(), net::FilePathToFileURL(test_file));
188 EXPECT_EQ(passString, title_watcher.WaitAndGetTitle());