[modular][storymodel] Improve ergonomics of constructing a TestMutator.
TEST=fx run-test story_visibility_system_unittest
Change-Id: I2732c06d81696117c06ff339f655c1b1c4960d12
diff --git a/bin/sessionmgr/story/model/testing/test_mutator.cc b/bin/sessionmgr/story/model/testing/test_mutator.cc
index 56e69e3..1ee3a2a 100644
--- a/bin/sessionmgr/story/model/testing/test_mutator.cc
+++ b/bin/sessionmgr/story/model/testing/test_mutator.cc
@@ -6,6 +6,13 @@
namespace modular {
+
+std::unique_ptr<StoryMutator> TestMutator::Create(TestMutator** ptr) {
+ auto mutator = std::make_unique<TestMutator>();
+ *ptr = mutator.get();
+ return mutator;
+}
+
fit::consumer<> TestMutator::ExecuteInternal(
std::vector<fuchsia::modular::storymodel::StoryModelMutation> commands) {
fit::bridge<> bridge;
diff --git a/bin/sessionmgr/story/model/testing/test_mutator.h b/bin/sessionmgr/story/model/testing/test_mutator.h
index 072e6c9..52f044c 100644
--- a/bin/sessionmgr/story/model/testing/test_mutator.h
+++ b/bin/sessionmgr/story/model/testing/test_mutator.h
@@ -24,6 +24,15 @@
// unblock.
class TestMutator : public StoryMutator {
public:
+ // Convenience factory allowing the caller to retain a pointer to the TestMutator
+ // when constructing a class that accepts a StoryMutator as a constructor argument.
+ //
+ // Usage:
+ //
+ // TestMutator* test_mutator;
+ // Foo foo(TestMutator::Create(&test_mutator));
+ static std::unique_ptr<StoryMutator> Create(TestMutator** ptr);
+
fit::consumer<> ExecuteInternal(
std::vector<fuchsia::modular::storymodel::StoryModelMutation> commands)
override;
diff --git a/bin/sessionmgr/story/systems/story_visibility_system_unittest.cc b/bin/sessionmgr/story/systems/story_visibility_system_unittest.cc
index 94dd0f9..6dea661 100644
--- a/bin/sessionmgr/story/systems/story_visibility_system_unittest.cc
+++ b/bin/sessionmgr/story/systems/story_visibility_system_unittest.cc
@@ -19,9 +19,8 @@
class StoryVisibilitySystemTest : public ::testing::Test {
protected:
StoryVisibilitySystemTest() {
- auto mutator = std::make_unique<TestMutator>();
- mutator_ = mutator.get();
- system_ = std::make_unique<StoryVisibilitySystem>(std::move(mutator));
+ system_ =
+ std::make_unique<StoryVisibilitySystem>(TestMutator::Create(&mutator_));
}
std::unique_ptr<StoryVisibilitySystem> system_;