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

Side by Side Diff: extensions/renderer/api_test_base.h

Issue 399363002: Add support for writing unit tests for Mojo-backed apps/extensions APIs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 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
« no previous file with comments | « extensions/renderer/DEPS ('k') | extensions/renderer/api_test_base.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 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 #ifndef EXTENSIONS_RENDERER_API_TEST_BASE_H_
6 #define EXTENSIONS_RENDERER_API_TEST_BASE_H_
7
8 #include <map>
9 #include <string>
10 #include <utility>
11
12 #include "base/message_loop/message_loop.h"
13 #include "base/run_loop.h"
14 #include "extensions/renderer/module_system_test.h"
15 #include "extensions/renderer/v8_schema_registry.h"
16 #include "gin/handle.h"
17 #include "gin/modules/module_registry.h"
18 #include "gin/object_template_builder.h"
19 #include "gin/wrappable.h"
20 #include "mojo/bindings/js/handle.h"
21 #include "mojo/public/cpp/bindings/interface_request.h"
22 #include "mojo/public/cpp/system/core.h"
23
24 namespace extensions {
25
26 class V8SchemaRegistry;
27
28 // A ServiceProvider that provides access from JS modules to services registered
29 // by AddService() calls.
30 class TestServiceProvider : public gin::Wrappable<TestServiceProvider> {
31 public:
32 static gin::Handle<TestServiceProvider> Create(v8::Isolate* isolate);
33 virtual ~TestServiceProvider();
34
35 virtual gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
36 v8::Isolate* isolate) OVERRIDE;
37
38 template <typename Interface>
39 void AddService(const base::Callback<void(mojo::InterfaceRequest<Interface>)>
40 service_factory) {
41 service_factories_.insert(std::make_pair(
42 Interface::Name_,
43 base::Bind(ForwardToServiceFactory<Interface>, service_factory)));
44 }
45
46 static gin::WrapperInfo kWrapperInfo;
47
48 private:
49 TestServiceProvider();
50
51 mojo::Handle ConnectToService(const std::string& service_name);
52
53 template <typename Interface>
54 static void ForwardToServiceFactory(
55 const base::Callback<void(mojo::InterfaceRequest<Interface>)>
56 service_factory,
57 mojo::ScopedMessagePipeHandle handle) {
58 service_factory.Run(mojo::MakeRequest<Interface>(handle.Pass()));
59 }
60 std::map<std::string, base::Callback<void(mojo::ScopedMessagePipeHandle)> >
61 service_factories_;
62 };
63
64 // A base class for unit testing apps/extensions API custom bindings implemented
65 // on Mojo services. To use:
66 // 1. Register test Mojo service implementations on service_provider().
67 // 2. Write JS tests in extensions/test/data/test_file.js.
68 // 3. Write one C++ test function for each JS test containing
69 // RunTest("test_file.js", "testFunctionName").
70 // See extensions/renderer/api_test_base_unittest.cc and
71 // extensions/test/data/api_test_base_unittest.js for sample usage.
72 class ApiTestBase : public ModuleSystemTest {
73 protected:
74 ApiTestBase();
75 virtual ~ApiTestBase();
76 virtual void SetUp() OVERRIDE;
77 void RunTest(const std::string& file_name, const std::string& test_name);
78 TestServiceProvider* service_provider() { return service_provider_; }
79
80 private:
81 void RegisterModules();
82 void InitializeEnvironment();
83 void RunTestInner(const std::string& test_name,
84 const base::Closure& quit_closure);
85 void RunPromisesAgain();
86
87 base::MessageLoop message_loop_;
88 TestServiceProvider* service_provider_;
89 scoped_ptr<V8SchemaRegistry> v8_schema_registry_;
90 };
91
92 } // namespace extensions
93
94 #endif // EXTENSIONS_RENDERER_API_TEST_BASE_H_
OLDNEW
« no previous file with comments | « extensions/renderer/DEPS ('k') | extensions/renderer/api_test_base.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698