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

Unified Diff: extensions/renderer/api_bindings_system_unittest.h

Issue 2763493003: [Extensions Bindings] Make APIBindingsSystemTest reusable (Closed)
Patch Set: . Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « extensions/renderer/BUILD.gn ('k') | extensions/renderer/api_bindings_system_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/renderer/api_bindings_system_unittest.h
diff --git a/extensions/renderer/api_bindings_system_unittest.h b/extensions/renderer/api_bindings_system_unittest.h
new file mode 100644
index 0000000000000000000000000000000000000000..f79bdef0f45f71c3648cefd661534552a048cc23
--- /dev/null
+++ b/extensions/renderer/api_bindings_system_unittest.h
@@ -0,0 +1,101 @@
+// Copyright 2017 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.
+
+#ifndef EXTENSIONS_RENDERER_API_BINDINGS_SYSTEM_UNITTEST_H_
+#define EXTENSIONS_RENDERER_API_BINDINGS_SYSTEM_UNITTEST_H_
+
+#include <map>
+#include <memory>
+#include <string>
+
+#include "base/macros.h"
+#include "extensions/renderer/api_binding_test.h"
+#include "extensions/renderer/api_binding_types.h"
+#include "extensions/renderer/api_request_handler.h"
+#include "v8/include/v8.h"
+
+namespace base {
+class DictionaryValue;
+}
+
+namespace extensions {
+class APIBindingsSystem;
+
+// The base class to test the APIBindingsSystem. This allows subclasses to
+// retrieve API schemas differently.
+class APIBindingsSystemTest : public APIBindingTest {
+ protected:
+ // A struct representing a "fake" API, including the name and specification.
+ // The specification is expected to be a JSON-serializable string that
+ // specifies the types, methods, and events of an API in the same syntax as
+ // the real extension APIs.
+ struct FakeSpec {
+ const char* name;
+ const char* spec;
+ };
+
+ APIBindingsSystemTest();
+ ~APIBindingsSystemTest() override;
+ void SetUp() override;
+ void TearDown() override;
+ void OnWillDisposeContext(v8::Local<v8::Context> context) override;
+
+ // Returns the collection of fake APIs to be used in the test, allowing
+ // subclasses to return their own specifications.
+ virtual std::vector<FakeSpec> GetAPIs();
+
+ // Returns the object to be used as the parent for the `lastError`. The
+ // default returns an empty JS object (assumes no last errors will be set).
+ virtual v8::Local<v8::Object> GetLastErrorParent(
+ v8::Local<v8::Context> context);
+
+ // Returns the DictionaryValue representing the schema with the given API
+ // name.
+ const base::DictionaryValue& GetAPISchema(const std::string& api_name);
+
+ // Callback for event listeners changing.
+ void OnEventListenersChanged(const std::string& event_name,
+ binding::EventListenersChanged changed,
+ v8::Local<v8::Context> context);
+
+ // Callback for an API request being made. Stores the request in
+ // |last_request_|.
+ void OnAPIRequest(std::unique_ptr<APIRequestHandler::Request> request,
+ v8::Local<v8::Context> context);
+
+ // Checks that |last_request_| exists and was provided with the
+ // |expected_name| and |expected_arguments|.
+ void ValidateLastRequest(const std::string& expected_name,
+ const std::string& expected_arguments);
+
+ // Wraps the given |script source| in (function(obj) { ... }) and executes
+ // the result function, passing in |object| for an argument.
+ void CallFunctionOnObject(v8::Local<v8::Context> context,
+ v8::Local<v8::Object> object,
+ const std::string& script_source);
+
+ const APIRequestHandler::Request* last_request() const {
+ return last_request_.get();
+ }
+ void reset_last_request() { last_request_.reset(); }
+ APIBindingsSystem* bindings_system() { return bindings_system_.get(); }
+
+ private:
+ // The API schemas for the fake APIs.
+ std::map<std::string, std::unique_ptr<base::DictionaryValue>> api_schemas_;
+
+ // The APIBindingsSystem associated with the test. Safe to use across multiple
+ // contexts.
+ std::unique_ptr<APIBindingsSystem> bindings_system_;
+
+ // The last request to be received from the APIBindingsSystem, or null if
+ // there is none.
+ std::unique_ptr<APIRequestHandler::Request> last_request_;
+
+ DISALLOW_COPY_AND_ASSIGN(APIBindingsSystemTest);
+};
+
+} // namespace extensions
+
+#endif // EXTENSIONS_RENDERER_API_BINDINGS_SYSTEM_UNITTEST_H_
« no previous file with comments | « extensions/renderer/BUILD.gn ('k') | extensions/renderer/api_bindings_system_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698