ModuleRegistry: Start() injected modules
Call Start() on injected modules, and set registry_ and handler_
properly
Test: atest --host bluetooth_test_gd
Change-Id: Id655d537982eab285549ff797a907dabb15ca64d
diff --git a/gd/module.cc b/gd/module.cc
index 10ab72d..7f2dd32 100644
--- a/gd/module.cc
+++ b/gd/module.cc
@@ -94,4 +94,13 @@
ASSERT(started_modules_.empty());
start_order_.clear();
}
+
+void ModuleRegistry::inject_test_module(const ModuleFactory* module, Module* instance, os::Thread* thread) {
+ instance->registry_ = this;
+ instance->handler_ = new Handler(thread);
+ start_order_.push_back(module);
+ started_modules_[module] = instance;
+ instance->Start();
+}
+
} // namespace bluetooth
diff --git a/gd/module.h b/gd/module.h
index 7df6334..33e0325 100644
--- a/gd/module.h
+++ b/gd/module.h
@@ -115,23 +115,20 @@
// Stop all running modules in reverse order of start
void StopAll();
- protected:
- Module* Get(const ModuleFactory* module) const;
+ // Helper for dependency injection in test code. DO NOT USE in prod code!
+ // Ownership of |instance| is transferred to the registry.
+ void inject_test_module(const ModuleFactory* module, Module* instance, os::Thread* thread);
+ // Helper for dependency injection in test code. DO NOT USE in prod code!
+ template <class T>
+ T* get_module_under_test() const {
+ return static_cast<T*>(Get(&T::Factory));
+ }
+
+ private:
+ Module* Get(const ModuleFactory* module) const;
std::map<const ModuleFactory*, Module*> started_modules_;
std::vector<const ModuleFactory*> start_order_;
};
-class TestModuleRegistry : public ModuleRegistry {
- public:
- void InjectTestModule(const ModuleFactory* module, Module* instance) {
- start_order_.push_back(module);
- started_modules_[module] = instance;
- }
-
- Module* GetModuleUnderTest(const ModuleFactory* module) const {
- return Get(module);
- }
-};
-
} // namespace bluetooth