OLD | NEW |
1 // Copyright (c) 2011 The Native Client Authors. All rights reserved. | 1 // Copyright (c) 2011 The Native Client Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "native_client/tests/ppapi_test_lib/test_interface.h" | 5 #include "native_client/tests/ppapi_test_lib/test_interface.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 #include <map> | 8 #include <map> |
9 #include <new> | 9 #include <new> |
10 | 10 |
11 #include "native_client/src/include/nacl_macros.h" | 11 #include "native_client/src/include/nacl_macros.h" |
12 #include "native_client/src/shared/platform/nacl_check.h" | 12 #include "native_client/src/shared/platform/nacl_check.h" |
13 #include "native_client/tests/ppapi_test_lib/get_browser_interface.h" | 13 #include "native_client/tests/ppapi_test_lib/get_browser_interface.h" |
14 #include "native_client/tests/ppapi_test_lib/internal_utils.h" | 14 #include "native_client/tests/ppapi_test_lib/internal_utils.h" |
15 | 15 |
16 #include "ppapi/c/dev/ppb_var_deprecated.h" | |
17 | |
18 #include "ppapi/c/pp_instance.h" | 16 #include "ppapi/c/pp_instance.h" |
19 #include "ppapi/c/pp_module.h" | 17 #include "ppapi/c/pp_module.h" |
20 #include "ppapi/c/pp_var.h" | 18 #include "ppapi/c/pp_var.h" |
21 #include "ppapi/c/ppb_instance.h" | 19 #include "ppapi/c/ppb_instance.h" |
22 #include "ppapi/c/ppb_messaging.h" | 20 #include "ppapi/c/ppb_messaging.h" |
23 #include "ppapi/c/ppb_var.h" | 21 #include "ppapi/c/ppb_var.h" |
24 | 22 |
25 void PostTestMessage(nacl::string test_name, nacl::string message) { | 23 void PostTestMessage(nacl::string test_name, nacl::string message) { |
26 nacl::string test_message = test_name; | 24 nacl::string test_message = test_name; |
27 test_message += ":"; | 25 test_message += ":"; |
(...skipping 12 matching lines...) Expand all Loading... |
40 namespace { | 38 namespace { |
41 | 39 |
42 class TestTable { | 40 class TestTable { |
43 public: | 41 public: |
44 // Return singleton intsance. | 42 // Return singleton intsance. |
45 static TestTable* Get() { | 43 static TestTable* Get() { |
46 static TestTable table; | 44 static TestTable table; |
47 return &table; | 45 return &table; |
48 } | 46 } |
49 | 47 |
50 void AddScriptableTest(nacl::string test_name, | |
51 ScriptableTestFunction test_function) { | |
52 scriptable_test_map_[test_name] = test_function; | |
53 } | |
54 bool HasScriptableTest(nacl::string test_name); | |
55 PP_Var RunScriptableTest(nacl::string test_name); | |
56 | |
57 void AddTest(nacl::string test_name, TestFunction test_function) { | 48 void AddTest(nacl::string test_name, TestFunction test_function) { |
58 test_map_[test_name] = test_function; | 49 test_map_[test_name] = test_function; |
59 } | 50 } |
60 void RunTest(nacl::string test_name); | 51 void RunTest(nacl::string test_name); |
61 | 52 |
62 private: | 53 private: |
63 NACL_DISALLOW_COPY_AND_ASSIGN(TestTable); | 54 NACL_DISALLOW_COPY_AND_ASSIGN(TestTable); |
64 | 55 |
65 TestTable() {} | 56 TestTable() {} |
66 | 57 |
67 typedef std::map<nacl::string, ScriptableTestFunction> ScriptableTestMap; | |
68 ScriptableTestMap scriptable_test_map_; // DEPRECATED. | |
69 typedef std::map<nacl::string, TestFunction> TestMap; | 58 typedef std::map<nacl::string, TestFunction> TestMap; |
70 TestMap test_map_; | 59 TestMap test_map_; |
71 }; | 60 }; |
72 | 61 |
73 bool TestTable::HasScriptableTest(nacl::string test_name) { | |
74 ScriptableTestMap::iterator it = scriptable_test_map_.find(test_name); | |
75 return it != scriptable_test_map_.end(); | |
76 } | |
77 | |
78 PP_Var TestTable::RunScriptableTest(nacl::string test_name) { | |
79 ScriptableTestMap::iterator it = scriptable_test_map_.find(test_name); | |
80 if (it == scriptable_test_map_.end()) | |
81 return PP_MakeUndefined(); | |
82 CHECK(it->second != NULL); | |
83 ScriptableTestFunction test_function = it->second; | |
84 return test_function(); | |
85 } | |
86 | |
87 void TestTable::RunTest(nacl::string test_name) { | 62 void TestTable::RunTest(nacl::string test_name) { |
88 TestMap::iterator it = test_map_.find(test_name); | 63 TestMap::iterator it = test_map_.find(test_name); |
89 if (it == test_map_.end()) { | 64 if (it == test_map_.end()) { |
90 PostTestMessage(test_name, "NOTFOUND"); | 65 PostTestMessage(test_name, "NOTFOUND"); |
91 return; | 66 return; |
92 } | 67 } |
93 CHECK(it->second != NULL); | 68 CHECK(it->second != NULL); |
94 TestFunction test_function = it->second; | 69 TestFunction test_function = it->second; |
95 return test_function(); | 70 return test_function(); |
96 } | 71 } |
97 | 72 |
98 } // namespace | 73 } // namespace |
99 | 74 |
100 void RegisterScriptableTest(nacl::string test_name, | |
101 ScriptableTestFunction test_func) { | |
102 TestTable::Get()->AddScriptableTest(test_name, test_func); | |
103 } | |
104 | |
105 bool HasScriptableTest(nacl::string test_name) { | |
106 return TestTable::Get()->HasScriptableTest(test_name); | |
107 } | |
108 | |
109 PP_Var RunScriptableTest(nacl::string test_name) { | |
110 return TestTable::Get()->RunScriptableTest(test_name); | |
111 } | |
112 | |
113 void RegisterTest(nacl::string test_name, TestFunction test_func) { | 75 void RegisterTest(nacl::string test_name, TestFunction test_func) { |
114 TestTable::Get()->AddTest(test_name, test_func); | 76 TestTable::Get()->AddTest(test_name, test_func); |
115 } | 77 } |
116 | 78 |
117 void RunTest(nacl::string test_name) { | 79 void RunTest(nacl::string test_name) { |
118 TestTable::Get()->RunTest(test_name); | 80 TestTable::Get()->RunTest(test_name); |
119 } | 81 } |
120 | 82 |
121 //////////////////////////////////////////////////////////////////////////////// | 83 //////////////////////////////////////////////////////////////////////////////// |
122 // Testable callback support | 84 // Testable callback support |
123 //////////////////////////////////////////////////////////////////////////////// | 85 //////////////////////////////////////////////////////////////////////////////// |
124 | 86 |
125 namespace { | 87 namespace { |
126 | 88 |
127 struct CallbackInfo { | 89 struct CallbackInfo { |
128 nacl::string callback_name; | 90 nacl::string callback_name; |
129 PP_CompletionCallback user_callback; | 91 PP_CompletionCallback user_callback; |
130 }; | 92 }; |
131 | 93 |
132 void ReportCallbackInvocationToJS(const char* callback_name) { | 94 void ReportCallbackInvocationToJS(const char* callback_name) { |
133 PP_Var callback_var = PPBVar()->VarFromUtf8(pp_module(), | 95 PP_Var callback_var = PPBVar()->VarFromUtf8(pp_module(), |
134 callback_name, | 96 callback_name, |
135 strlen(callback_name)); | 97 strlen(callback_name)); |
136 // Report using synchronous scripting for sync tests. | |
137 // This is deprecated and will be removed shortly. | |
138 #ifndef PPAPI_INSTANCE_REMOVE_SCRIPTING | |
139 PP_Var window = PPBInstance()->GetWindowObject(pp_instance()); | |
140 CHECK(window.type == PP_VARTYPE_OBJECT); | |
141 | |
142 PP_Var exception = PP_MakeUndefined(); | |
143 PPBVarDeprecated()->Call(window, callback_var, 0, NULL, &exception); | |
144 PPBVarDeprecated()->Release(window); | |
145 #endif | |
146 | |
147 // Report using postmessage for async tests. | 98 // Report using postmessage for async tests. |
148 PPBMessaging()->PostMessage(pp_instance(), callback_var); | 99 PPBMessaging()->PostMessage(pp_instance(), callback_var); |
149 PPBVar()->Release(callback_var); | 100 PPBVar()->Release(callback_var); |
150 } | 101 } |
151 | 102 |
152 void CallbackWrapper(void* user_data, int32_t result) { | 103 void CallbackWrapper(void* user_data, int32_t result) { |
153 CallbackInfo* callback_info = reinterpret_cast<CallbackInfo*>(user_data); | 104 CallbackInfo* callback_info = reinterpret_cast<CallbackInfo*>(user_data); |
154 PP_RunCompletionCallback(&callback_info->user_callback, result); | 105 PP_RunCompletionCallback(&callback_info->user_callback, result); |
155 ReportCallbackInvocationToJS(callback_info->callback_name.c_str()); | 106 ReportCallbackInvocationToJS(callback_info->callback_name.c_str()); |
156 delete callback_info; | 107 delete callback_info; |
157 } | 108 } |
158 | 109 |
159 } // namespace | 110 } // namespace |
160 | 111 |
161 PP_CompletionCallback MakeTestableCompletionCallback( | 112 PP_CompletionCallback MakeTestableCompletionCallback( |
162 const char* callback_name, // Tested for by JS harness. | 113 const char* callback_name, // Tested for by JS harness. |
163 PP_CompletionCallback_Func func, | 114 PP_CompletionCallback_Func func, |
164 void* user_data) { | 115 void* user_data) { |
165 CHECK(callback_name != NULL && strlen(callback_name) > 0); | 116 CHECK(callback_name != NULL && strlen(callback_name) > 0); |
166 CHECK(func != NULL); | 117 CHECK(func != NULL); |
167 | 118 |
168 CallbackInfo* callback_info = new(std::nothrow) CallbackInfo; | 119 CallbackInfo* callback_info = new(std::nothrow) CallbackInfo; |
169 CHECK(callback_info != NULL); | 120 CHECK(callback_info != NULL); |
170 callback_info->callback_name = callback_name; | 121 callback_info->callback_name = callback_name; |
171 callback_info->user_callback = PP_MakeCompletionCallback(func, user_data); | 122 callback_info->user_callback = PP_MakeCompletionCallback(func, user_data); |
172 | 123 |
173 return PP_MakeCompletionCallback(CallbackWrapper, callback_info); | 124 return PP_MakeCompletionCallback(CallbackWrapper, callback_info); |
174 } | 125 } |
OLD | NEW |