Skip to content

Commit de258ad

Browse files
committed
codecov
1 parent 224b755 commit de258ad

2 files changed

Lines changed: 96 additions & 16 deletions

File tree

test/mix_release_debug/lib.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,3 @@
1616
using namespace boost::openmethod;
1717

1818
BOOST_OPENMETHOD_CLASSES(Animal, Cat);
19-
20-
BOOST_OPENMETHOD_OVERRIDE(poke, (virtual_ptr<Cat>, std::ostream& os), void) {
21-
os << "hiss";
22-
}

test/test_rolex.cpp

Lines changed: 96 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@
66
#include <boost/openmethod.hpp>
77
#include <boost/openmethod/initialize.hpp>
88

9+
#define BOOST_TEST_MODULE test_rolex
10+
#include <boost/test/unit_test.hpp>
11+
912
using boost::openmethod::virtual_ptr;
1013

1114
struct Role {
12-
virtual ~Role() {
13-
}
15+
virtual ~Role() {}
1416
};
1517

1618
struct Employee : Role {
@@ -24,8 +26,7 @@ struct Manager : Employee {
2426
struct Founder : Role {};
2527

2628
struct Expense {
27-
virtual ~Expense() {
28-
}
29+
virtual ~Expense() {}
2930
};
3031

3132
struct Public : Expense {};
@@ -39,6 +40,7 @@ BOOST_OPENMETHOD_CLASSES(
3940
PrivateJet);
4041

4142
BOOST_OPENMETHOD(pay, (virtual_ptr<Employee>), double);
43+
4244
BOOST_OPENMETHOD(
4345
approve, (virtual_ptr<const Role>, virtual_ptr<const Expense>, double),
4446
bool);
@@ -75,14 +77,6 @@ BOOST_OPENMETHOD_OVERRIDE(
7577
return true;
7678
}
7779

78-
auto main() -> int {
79-
boost::openmethod::initialize();
80-
}
81-
82-
auto call_pay(Employee& emp) -> double {
83-
return pay(emp);
84-
}
85-
8680
auto Employee::pay() -> double {
8781
return 3000;
8882
}
@@ -91,10 +85,100 @@ auto Manager::pay() -> double {
9185
return Employee::pay() + 2000;
9286
}
9387

88+
auto call_pay(Employee& emp) -> double {
89+
return pay(emp);
90+
}
91+
9492
auto call_pay_vfunc(Employee& emp) -> double {
9593
return emp.pay();
9694
}
9795

9896
auto call_approve(const Role& r, const Expense& e, double a) -> bool {
9997
return approve(r, e, a);
10098
}
99+
100+
BOOST_AUTO_TEST_CASE(pay_employee) {
101+
boost::openmethod::initialize();
102+
Employee e;
103+
BOOST_TEST(pay(e) == 3000);
104+
BOOST_TEST(call_pay(e) == 3000);
105+
BOOST_TEST(call_pay_vfunc(e) == 3000);
106+
}
107+
108+
BOOST_AUTO_TEST_CASE(pay_manager_calls_next) {
109+
boost::openmethod::initialize();
110+
Manager m;
111+
BOOST_TEST(pay(m) == 5000);
112+
BOOST_TEST(call_pay(m) == 5000);
113+
BOOST_TEST(call_pay_vfunc(m) == 5000);
114+
}
115+
116+
BOOST_AUTO_TEST_CASE(approve_employee) {
117+
boost::openmethod::initialize();
118+
Employee e;
119+
Bus bus;
120+
Metro metro;
121+
Taxi taxi;
122+
PrivateJet jet;
123+
// Employee may take public transport
124+
BOOST_TEST(approve(e, bus, 10) == true);
125+
BOOST_TEST(approve(e, metro, 10) == true);
126+
// Employee may not take taxi or private jet
127+
BOOST_TEST(approve(e, taxi, 10) == false);
128+
BOOST_TEST(approve(e, jet, 10) == false);
129+
}
130+
131+
BOOST_AUTO_TEST_CASE(approve_manager) {
132+
boost::openmethod::initialize();
133+
Manager m;
134+
Bus bus;
135+
Metro metro;
136+
Taxi taxi;
137+
PrivateJet jet;
138+
// Manager inherits employee's public transport approval
139+
BOOST_TEST(approve(m, bus, 10) == true);
140+
BOOST_TEST(approve(m, metro, 10) == true);
141+
// Manager may also take a taxi
142+
BOOST_TEST(approve(m, taxi, 10) == true);
143+
// Manager may not take a private jet
144+
BOOST_TEST(approve(m, jet, 10) == false);
145+
}
146+
147+
BOOST_AUTO_TEST_CASE(approve_founder) {
148+
boost::openmethod::initialize();
149+
Founder f;
150+
Bus bus;
151+
Metro metro;
152+
Taxi taxi;
153+
PrivateJet jet;
154+
// Founder approves all expenses
155+
BOOST_TEST(approve(f, bus, 10) == true);
156+
BOOST_TEST(approve(f, metro, 10) == true);
157+
BOOST_TEST(approve(f, taxi, 10) == true);
158+
BOOST_TEST(approve(f, jet, 10) == true);
159+
}
160+
161+
BOOST_AUTO_TEST_CASE(approve_base_role_denied) {
162+
boost::openmethod::initialize();
163+
Role r;
164+
Bus bus;
165+
Taxi taxi;
166+
PrivateJet jet;
167+
// Base Role catches all — nothing approved
168+
BOOST_TEST(approve(r, bus, 10) == false);
169+
BOOST_TEST(approve(r, taxi, 10) == false);
170+
BOOST_TEST(approve(r, jet, 10) == false);
171+
}
172+
173+
BOOST_AUTO_TEST_CASE(approve_via_wrapper) {
174+
boost::openmethod::initialize();
175+
Employee e;
176+
Manager m;
177+
Founder f;
178+
Bus bus;
179+
Taxi taxi;
180+
BOOST_TEST(call_approve(e, bus, 10) == true);
181+
BOOST_TEST(call_approve(e, taxi, 10) == false);
182+
BOOST_TEST(call_approve(m, taxi, 10) == true);
183+
BOOST_TEST(call_approve(f, taxi, 10) == true);
184+
}

0 commit comments

Comments
 (0)