81
TEST(CachedUpdates, a_default_constructed_cached_value_is_invalid)
83
cul::Provider::Controller::Cache<int> cached_value;
84
EXPECT_FALSE(cached_value.is_valid());
87
TEST(CachedUpdates, updating_with_value_results_in_valid_cached_value)
89
cul::Provider::Controller::Cache<int> cached_value;
90
cached_value.update(42);
91
EXPECT_TRUE(cached_value.is_valid());
92
EXPECT_EQ(42, cached_value.value());
95
TEST(CachedUpdates, invalidating_a_cached_value_results_in_cache_being_invalid)
97
cul::Provider::Controller::Cache<int> cached_value;
98
cached_value.update(42);
99
EXPECT_TRUE(cached_value.is_valid());
100
cached_value.invalidate();
101
EXPECT_FALSE(cached_value.is_valid());
104
83
TEST(Controller, controller_starts_and_stops_updates_on_provider)
106
using namespace ::testing;
108
MockProvider provider;
110
EXPECT_CALL(provider, start_position_updates()).Times(Exactly(1));
111
EXPECT_CALL(provider, start_velocity_updates()).Times(Exactly(1));
112
EXPECT_CALL(provider, start_heading_updates()).Times(Exactly(1));
113
EXPECT_CALL(provider, stop_position_updates()).Times(Exactly(1));
114
EXPECT_CALL(provider, stop_velocity_updates()).Times(Exactly(1));
115
EXPECT_CALL(provider, stop_heading_updates()).Times(Exactly(1));
117
auto controller = provider.state_controller();
119
controller->start_position_updates();
120
controller->start_velocity_updates();
121
controller->start_heading_updates();
123
EXPECT_TRUE(controller->are_position_updates_running());
124
EXPECT_TRUE(controller->are_velocity_updates_running());
125
EXPECT_TRUE(controller->are_heading_updates_running());
127
controller->stop_position_updates();
128
controller->stop_velocity_updates();
129
controller->stop_heading_updates();
131
EXPECT_FALSE(controller->are_position_updates_running());
132
EXPECT_FALSE(controller->are_velocity_updates_running());
133
EXPECT_FALSE(controller->are_heading_updates_running());
136
TEST(Controller, controller_starts_and_stops_updates_on_provider_only_once)
138
using namespace ::testing;
140
MockProvider provider;
142
EXPECT_CALL(provider, start_position_updates()).Times(Exactly(1));
143
EXPECT_CALL(provider, start_velocity_updates()).Times(Exactly(1));
144
EXPECT_CALL(provider, start_heading_updates()).Times(Exactly(1));
145
EXPECT_CALL(provider, stop_position_updates()).Times(Exactly(1));
146
EXPECT_CALL(provider, stop_velocity_updates()).Times(Exactly(1));
147
EXPECT_CALL(provider, stop_heading_updates()).Times(Exactly(1));
149
auto controller = provider.state_controller();
151
controller->start_position_updates();
152
controller->start_velocity_updates();
153
controller->start_heading_updates();
155
EXPECT_TRUE(controller->are_position_updates_running());
156
EXPECT_TRUE(controller->are_velocity_updates_running());
157
EXPECT_TRUE(controller->are_heading_updates_running());
159
controller->start_position_updates();
160
controller->start_velocity_updates();
161
controller->start_heading_updates();
163
EXPECT_TRUE(controller->are_position_updates_running());
164
EXPECT_TRUE(controller->are_velocity_updates_running());
165
EXPECT_TRUE(controller->are_heading_updates_running());
167
controller->stop_position_updates();
168
controller->stop_velocity_updates();
169
controller->stop_heading_updates();
171
EXPECT_TRUE(controller->are_position_updates_running());
172
EXPECT_TRUE(controller->are_velocity_updates_running());
173
EXPECT_TRUE(controller->are_heading_updates_running());
175
controller->stop_position_updates();
176
controller->stop_velocity_updates();
177
controller->stop_heading_updates();
179
EXPECT_FALSE(controller->are_position_updates_running());
180
EXPECT_FALSE(controller->are_velocity_updates_running());
181
EXPECT_FALSE(controller->are_heading_updates_running());
184
TEST(Controller, controller_remembers_cached_updates)
186
using namespace ::testing;
188
MockProvider provider;
189
auto controller = provider.state_controller();
191
EXPECT_FALSE(controller->cached_position_update().is_valid());
192
EXPECT_FALSE(controller->cached_velocity_update().is_valid());
193
EXPECT_FALSE(controller->cached_heading_update().is_valid());
195
provider.inject_update(reference_position_update);
197
EXPECT_TRUE(controller->cached_position_update().is_valid());
198
EXPECT_EQ(reference_position_update, controller->cached_position_update().value());
199
EXPECT_FALSE(controller->cached_velocity_update().is_valid());
200
EXPECT_FALSE(controller->cached_heading_update().is_valid());
202
provider.inject_update(reference_velocity_update);
204
EXPECT_TRUE(controller->cached_position_update().is_valid());
205
EXPECT_EQ(reference_position_update, controller->cached_position_update().value());
206
EXPECT_TRUE(controller->cached_velocity_update().is_valid());
207
EXPECT_EQ(reference_velocity_update, controller->cached_velocity_update().value());
208
EXPECT_FALSE(controller->cached_heading_update().is_valid());
210
provider.inject_update(reference_heading_update);
212
EXPECT_TRUE(controller->cached_position_update().is_valid());
213
EXPECT_EQ(reference_position_update, controller->cached_position_update().value());
214
EXPECT_TRUE(controller->cached_velocity_update().is_valid());
215
EXPECT_EQ(reference_velocity_update, controller->cached_velocity_update().value());
216
EXPECT_TRUE(controller->cached_heading_update().is_valid());
217
EXPECT_EQ(reference_heading_update, controller->cached_heading_update().value());
85
using namespace ::testing;
87
MockProvider provider;
89
EXPECT_CALL(provider, start_position_updates()).Times(Exactly(1));
90
EXPECT_CALL(provider, start_velocity_updates()).Times(Exactly(1));
91
EXPECT_CALL(provider, start_heading_updates()).Times(Exactly(1));
92
EXPECT_CALL(provider, stop_position_updates()).Times(Exactly(1));
93
EXPECT_CALL(provider, stop_velocity_updates()).Times(Exactly(1));
94
EXPECT_CALL(provider, stop_heading_updates()).Times(Exactly(1));
96
auto controller = provider.state_controller();
98
controller->start_position_updates();
99
controller->start_velocity_updates();
100
controller->start_heading_updates();
102
EXPECT_TRUE(controller->are_position_updates_running());
103
EXPECT_TRUE(controller->are_velocity_updates_running());
104
EXPECT_TRUE(controller->are_heading_updates_running());
106
controller->stop_position_updates();
107
controller->stop_velocity_updates();
108
controller->stop_heading_updates();
110
EXPECT_FALSE(controller->are_position_updates_running());
111
EXPECT_FALSE(controller->are_velocity_updates_running());
112
EXPECT_FALSE(controller->are_heading_updates_running());
115
TEST(Controller, controller_starts_and_stops_updates_on_provider_only_once_requires_hardware)
117
using namespace ::testing;
119
MockProvider provider;
121
EXPECT_CALL(provider, start_position_updates()).Times(Exactly(1));
122
EXPECT_CALL(provider, start_velocity_updates()).Times(Exactly(1));
123
EXPECT_CALL(provider, start_heading_updates()).Times(Exactly(1));
124
EXPECT_CALL(provider, stop_position_updates()).Times(Exactly(1));
125
EXPECT_CALL(provider, stop_velocity_updates()).Times(Exactly(1));
126
EXPECT_CALL(provider, stop_heading_updates()).Times(Exactly(1));
128
auto controller = provider.state_controller();
130
controller->start_position_updates();
131
controller->start_velocity_updates();
132
controller->start_heading_updates();
134
EXPECT_TRUE(controller->are_position_updates_running());
135
EXPECT_TRUE(controller->are_velocity_updates_running());
136
EXPECT_TRUE(controller->are_heading_updates_running());
138
controller->start_position_updates();
139
controller->start_velocity_updates();
140
controller->start_heading_updates();
142
EXPECT_TRUE(controller->are_position_updates_running());
143
EXPECT_TRUE(controller->are_velocity_updates_running());
144
EXPECT_TRUE(controller->are_heading_updates_running());
146
controller->stop_position_updates();
147
controller->stop_velocity_updates();
148
controller->stop_heading_updates();
150
EXPECT_TRUE(controller->are_position_updates_running());
151
EXPECT_TRUE(controller->are_velocity_updates_running());
152
EXPECT_TRUE(controller->are_heading_updates_running());
154
controller->stop_position_updates();
155
controller->stop_velocity_updates();
156
controller->stop_heading_updates();
158
EXPECT_FALSE(controller->are_position_updates_running());
159
EXPECT_FALSE(controller->are_velocity_updates_running());
160
EXPECT_FALSE(controller->are_heading_updates_running());