blob: d50e9315c4e48bc03d9491bfb3b1a37f32b72e7f [file] [log] [blame]
John Park33858a32018-09-28 23:05:48 -07001#include "aos/util/global_factory.h"
Parker Schuh36416692017-02-18 17:34:15 -08002#include "gtest/gtest.h"
3
4namespace aos {
5
6namespace test_a {
7class BaseType {
8 public:
9 virtual ~BaseType() {}
10
11 virtual std::pair<int, int> Get() = 0;
12};
13
14SETUP_FACTORY(BaseType, int, int);
15
16class BaseTypeNoArgs {
17 public:
18 virtual ~BaseTypeNoArgs() {}
19
20 virtual int Get() = 0;
21};
22
23SETUP_FACTORY(BaseTypeNoArgs);
24
25} // namespace test_a
26
27namespace test_b {
28
29class SubType : public test_a::BaseType {
30 public:
31 SubType(int t1, int t2) : value_(t1, t2) {}
32 std::pair<int, int> Get() override { return value_; }
33
34 private:
35 std::pair<int, int> value_;
36};
37
38REGISTER_SUBCLASS(test_a::BaseType, SubType);
39
40} // namespace test_b
41
42namespace {
43
44class SubType1 : public test_a::BaseTypeNoArgs {
45 public:
46 int Get() override { return 1; }
47};
48
49class SubType2 : public test_a::BaseTypeNoArgs {
50 public:
51 int Get() override { return 2; }
52};
53REGISTER_SUBCLASS(test_a::BaseTypeNoArgs, SubType1);
54REGISTER_SUBCLASS(test_a::BaseTypeNoArgs, SubType2);
55
56TEST(GlobalFactoryTest, CheckFactory) {
57 auto val = test_a::BaseTypeGlobalFactory::Get("SubType")(2, 7)->Get();
58 EXPECT_EQ(val.first, 2);
59 EXPECT_EQ(val.second, 7);
60}
61TEST(GlobalFactoryTest, CheckFactoryNoArgs) {
62 EXPECT_EQ(1, test_a::BaseTypeNoArgsGlobalFactory::Get("SubType1")()->Get());
63 EXPECT_EQ(2, test_a::BaseTypeNoArgsGlobalFactory::Get("SubType2")()->Get());
64}
65
66} // namespace
67} // namespace aos