1
#include "com/ubuntu/location/engine.h"
2
#include "com/ubuntu/location/provider.h"
3
#include "com/ubuntu/location/provider_selection_policy.h"
4
#include <gmock/gmock.h>
5
#include <gtest/gtest.h>
9
struct DummyProvider : public com::ubuntu::location::Provider
13
struct NullProviderSelectionPolicy : public com::ubuntu::location::ProviderSelectionPolicy
15
com::ubuntu::location::ProviderSelection
16
determine_provider_selection_from_set_for_criteria(const com::ubuntu::location::Criteria&, const std::set<com::ubuntu::location::Provider::Ptr>&)
18
return com::ubuntu::location::ProviderSelection {
19
com::ubuntu::location::Provider::Ptr{},
20
com::ubuntu::location::Provider::Ptr{},
21
com::ubuntu::location::Provider::Ptr{}};
26
TEST(Engine, adding_and_removing_providers_inserts_and_erases_from_underlying_collection)
28
com::ubuntu::location::Engine engine {std::set<com::ubuntu::location::Provider::Ptr>{}, std::make_shared<NullProviderSelectionPolicy>()};
30
auto provider1 = std::make_shared<DummyProvider>();
31
auto provider2 = std::make_shared<DummyProvider>();
33
engine.add_provider(provider1);
34
EXPECT_TRUE(engine.has_provider(provider1));
36
engine.add_provider(provider2);
37
EXPECT_TRUE(engine.has_provider(provider2));
39
engine.remove_provider(provider1);
40
EXPECT_FALSE(engine.has_provider(provider1));
42
engine.remove_provider(provider2);
43
EXPECT_FALSE(engine.has_provider(provider2));
46
TEST(Engine, adding_a_null_provider_throws)
48
com::ubuntu::location::Engine engine {std::set<com::ubuntu::location::Provider::Ptr>{}, std::make_shared<NullProviderSelectionPolicy>()};
50
EXPECT_ANY_THROW(engine.add_provider(com::ubuntu::location::Provider::Ptr {}););
55
struct MockProviderSelectionPolicy : public com::ubuntu::location::ProviderSelectionPolicy
57
~MockProviderSelectionPolicy() noexcept
61
MOCK_METHOD2(determine_provider_selection_from_set_for_criteria,
62
com::ubuntu::location::ProviderSelection(const com::ubuntu::location::Criteria&, const std::set<com::ubuntu::location::Provider::Ptr>&));
66
TEST(Engine, provider_selection_policy_is_invoked_when_matching_providers_to_criteria)
68
using namespace ::testing;
70
MockProviderSelectionPolicy policy;
71
com::ubuntu::location::Engine engine
73
std::set<com::ubuntu::location::Provider::Ptr>{},
74
com::ubuntu::location::ProviderSelectionPolicy::Ptr{&policy, [](com::ubuntu::location::ProviderSelectionPolicy*) {}}
77
EXPECT_CALL(policy, determine_provider_selection_from_set_for_criteria(_,_))
79
.WillOnce(Return(com::ubuntu::location::ProviderSelection {
80
com::ubuntu::location::Provider::Ptr{},
81
com::ubuntu::location::Provider::Ptr{},
82
com::ubuntu::location::Provider::Ptr{}}));
84
auto selection = engine.determine_provider_selection_for_criteria(com::ubuntu::location::Criteria {});