Skip to content

Commit 6631bc0

Browse files
committed
test all methods
1 parent 679432c commit 6631bc0

File tree

2 files changed

+102
-104
lines changed

2 files changed

+102
-104
lines changed
Lines changed: 2 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
#pragma once
22

3-
// #include <viam/sdk/common/pose.hpp>
4-
// #include <viam/sdk/common/proto_value.hpp>
5-
// #include <viam/sdk/resource/resource_api.hpp>
6-
// #include <viam/sdk/services/motion.hpp>
73
#include <viam/sdk/services/navigation.hpp>
8-
// #include <viam/sdk/spatialmath/geometry.hpp>
94

105
namespace viam {
116
namespace sdktests {
@@ -28,108 +23,14 @@ class MockNav : public sdk::Navigation {
2823
ProtoStruct do_command(const ProtoStruct& command) override;
2924

3025
Mode mode;
31-
LocationResponse loc;
26+
LocationResponse loc = LocationResponse{};
3227
std::vector<Waypoint> waypoints;
3328
int next_waypoint_id = 0;
3429
std::vector<geo_geometry> obstacles;
3530
std::vector<Path> paths;
36-
MapType map_type;
31+
MapType map_type = MapType::k_unspecified;
3732
};
3833

39-
// sdk::pose_in_frame init_fake_pose();
40-
// sdk::pose_in_frame fake_pose();
41-
42-
// sdk::Name fake_component_name();
43-
// sdk::Name fake_slam_name();
44-
// sdk::Name fake_movement_sensor_name();
45-
// sdk::geo_point fake_geo_point();
46-
// std::vector<sdk::geo_geometry> fake_obstacles();
47-
// std::shared_ptr<sdk::motion_configuration> fake_motion_configuration();
48-
// std::vector<sdk::geo_geometry> fake_bounding_regions();
49-
50-
// class MockMotion : public sdk::Motion {
51-
// public:
52-
// bool move(const sdk::pose_in_frame& destination,
53-
// const sdk::Name& component_name,
54-
// const std::shared_ptr<sdk::WorldState>& world_state,
55-
// const std::shared_ptr<constraints>& constraints,
56-
// const sdk::ProtoStruct& extra) override;
57-
58-
// std::string move_on_map(const sdk::pose& destination,
59-
// const sdk::Name& component_name,
60-
// const sdk::Name& slam_name,
61-
// const std::shared_ptr<sdk::motion_configuration>&
62-
// motion_configuration, const std::vector<sdk::GeometryConfig>&
63-
// obstacles, const sdk::ProtoStruct& extra) override;
64-
65-
// std::string move_on_globe(
66-
// const sdk::geo_point& destination,
67-
// const boost::optional<double>& heading,
68-
// const sdk::Name& component_name,
69-
// const sdk::Name& movement_sensor_name,
70-
// const std::vector<sdk::geo_geometry>& obstacles,
71-
// const std::shared_ptr<sdk::motion_configuration>& motion_configuration,
72-
// const std::vector<sdk::geo_geometry>& bounding_regions,
73-
// const sdk::ProtoStruct& extra) override;
74-
75-
// sdk::pose_in_frame get_pose(
76-
// const sdk::Name& component_name,
77-
// const std::string& destination_frame,
78-
// const std::vector<sdk::WorldState::transform>& supplemental_transforms,
79-
// const sdk::ProtoStruct& extra) override;
80-
81-
// plan_with_status get_plan(const sdk::Name& component_name,
82-
// const std::string& execution_id,
83-
// const sdk::ProtoStruct& extra) override;
84-
85-
// std::pair<plan_with_status, std::vector<plan_with_status>> get_plan_with_replan_history(
86-
// const sdk::Name& component_name,
87-
// const std::string& execution_id,
88-
// const sdk::ProtoStruct& extra) override;
89-
90-
// plan_with_status get_latest_plan(const sdk::Name& component_name,
91-
// const sdk::ProtoStruct& extra) override;
92-
93-
// std::pair<plan_with_status, std::vector<plan_with_status>>
94-
// get_latest_plan_with_replan_history(
95-
// const sdk::Name& component_name, const sdk::ProtoStruct& extra) override;
96-
97-
// std::vector<plan_status_with_id> list_plan_statuses(const sdk::ProtoStruct& extra) override;
98-
99-
// std::vector<plan_status_with_id> list_active_plan_statuses(
100-
// const sdk::ProtoStruct& extra) override;
101-
102-
// void stop_plan(const sdk::Name& name, const sdk::ProtoStruct& extra) override;
103-
104-
// sdk::ProtoStruct do_command(const sdk::ProtoStruct& command) override;
105-
// static std::shared_ptr<MockMotion> get_mock_motion();
106-
// static plan_status fake_plan_status();
107-
// static plan_with_status fake_plan_with_status();
108-
// static plan_status_with_id fake_plan_status_with_id();
109-
110-
// // These variables allow the testing infra to `peek` into the mock
111-
// // and ensure that the correct values were passed
112-
// sdk::pose_in_frame current_location;
113-
// sdk::pose peek_current_pose;
114-
// sdk::Name peek_component_name;
115-
// sdk::Name peek_movement_sensor_name;
116-
// sdk::Name peek_slam_name;
117-
// sdk::geo_point peek_destination;
118-
// std::string peek_destination_frame;
119-
// double peek_heading;
120-
// bool peek_stop_plan_called = false;
121-
// std::string peek_debug_key;
122-
// std::vector<sdk::geo_geometry> peek_obstacles;
123-
// std::vector<sdk::GeometryConfig> peek_map_obstacles;
124-
// std::shared_ptr<constraints> peek_constraints;
125-
// std::shared_ptr<sdk::motion_configuration> peek_motion_configuration;
126-
// std::vector<sdk::geo_geometry> peek_bounding_regions;
127-
// std::shared_ptr<sdk::WorldState> peek_world_state;
128-
129-
// MockMotion(std::string name)
130-
// : sdk::Motion(std::move(name)), current_location(init_fake_pose()){};
131-
// };
132-
13334
} // namespace navigation
13435
} // namespace sdktests
13536
} // namespace viam

src/viam/sdk/tests/test_navigation.cpp

Lines changed: 100 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@
77
#include <viam/sdk/tests/test_utils.hpp>
88

99
BOOST_TEST_DONT_PRINT_LOG_VALUE(viam::sdk::Navigation::Mode)
10+
BOOST_TEST_DONT_PRINT_LOG_VALUE(viam::sdk::Navigation::Path)
11+
BOOST_TEST_DONT_PRINT_LOG_VALUE(viam::sdk::Navigation::LocationResponse)
12+
BOOST_TEST_DONT_PRINT_LOG_VALUE(std::vector<std::string>)
13+
BOOST_TEST_DONT_PRINT_LOG_VALUE(std::vector<viam::sdk::Navigation::Path>)
14+
BOOST_TEST_DONT_PRINT_LOG_VALUE(std::vector<viam::sdk::geo_point>)
15+
BOOST_TEST_DONT_PRINT_LOG_VALUE(viam::sdk::Navigation::MapType)
1016

1117
namespace viam {
1218
namespace sdktests {
@@ -24,15 +30,106 @@ BOOST_AUTO_TEST_CASE(nav_mode) {
2430
});
2531
}
2632

27-
BOOST_AUTO_TEST_CASE(nav_get_location) {}
33+
BOOST_AUTO_TEST_CASE(nav_get_location) {
34+
auto mock = std::make_shared<MockNav>("mock_nav");
35+
client_to_mock_pipeline<Navigation>(mock, [&](Navigation& client) {
36+
auto loc = client.get_location();
37+
BOOST_CHECK_EQUAL(loc, Navigation::LocationResponse{});
38+
mock->loc.compass_heading = 1;
39+
loc = client.get_location();
40+
BOOST_CHECK_CLOSE(loc.compass_heading, 1., 1e-4);
41+
});
42+
}
43+
44+
// weak backport of std::transform.
45+
template <typename T, typename U>
46+
std::vector<T> mapOver(const std::vector<U>& source, T (*f)(const U&)) {
47+
std::vector<T> ret;
48+
for (const auto& x : source) {
49+
ret.push_back(f(x));
50+
}
51+
return ret;
52+
}
2853

2954
BOOST_AUTO_TEST_CASE(nav_waypoints) {
3055
// get, add, remove
56+
auto mock = std::make_shared<MockNav>("mock_nav");
57+
client_to_mock_pipeline<Navigation>(mock, [&](Navigation& client) {
58+
// confirm empty
59+
auto waypoints = client.get_waypoints();
60+
BOOST_CHECK_EQUAL(waypoints->size(), 0);
61+
62+
// add 3 and confirm size
63+
for (int i = 0; i < 3; i++) {
64+
client.add_waypoint(geo_point{0, double(i)});
65+
}
66+
waypoints = client.get_waypoints();
67+
BOOST_CHECK_EQUAL(waypoints->size(), 3);
68+
69+
// remove 1, check size and IDs
70+
client.remove_waypoint((*waypoints)[1].id);
71+
const std::vector<std::string> expected_ids = {(*waypoints)[0].id, (*waypoints)[2].id};
72+
waypoints = client.get_waypoints();
73+
BOOST_CHECK_EQUAL(waypoints->size(), 2);
74+
const auto actual_ids = mapOver(
75+
*waypoints,
76+
(std::string(*)(const Navigation::Waypoint&))[](const Navigation::Waypoint& wp) {
77+
return wp.id;
78+
});
79+
BOOST_CHECK_EQUAL(expected_ids, actual_ids);
80+
});
81+
}
82+
83+
BOOST_AUTO_TEST_CASE(nav_obstacles) {
84+
auto mock = std::make_shared<MockNav>("mock_nav");
85+
client_to_mock_pipeline<Navigation>(mock, [&](Navigation& client) {
86+
// empty case
87+
auto obstacles = client.get_obstacles();
88+
BOOST_CHECK_EQUAL(obstacles->size(), 0);
89+
90+
// one element
91+
mock->obstacles.push_back({});
92+
obstacles = client.get_obstacles();
93+
BOOST_CHECK_EQUAL(obstacles->size(), 1);
94+
95+
// one element with one sub-element
96+
mock->obstacles.back().geometries.push_back({});
97+
obstacles = client.get_obstacles();
98+
BOOST_CHECK_EQUAL(obstacles->size(), 1);
99+
BOOST_CHECK_EQUAL(obstacles->back().geometries.size(), 1);
100+
});
101+
}
102+
103+
BOOST_AUTO_TEST_CASE(nav_paths) {
104+
auto mock = std::make_shared<MockNav>("mock_nav");
105+
client_to_mock_pipeline<Navigation>(mock, [&](Navigation& client) {
106+
// empty
107+
auto paths = client.get_paths();
108+
BOOST_CHECK_EQUAL(paths->size(), 0);
109+
110+
// 1 element with 1 sub-element
111+
mock->paths.push_back({"2", {{}}});
112+
paths = client.get_paths();
113+
std::vector<Navigation::Path> expected = {Navigation::Path{"2", {{}}}};
114+
BOOST_CHECK_EQUAL(*paths, expected);
115+
});
31116
}
32117

33-
BOOST_AUTO_TEST_CASE(nav_obstacles) {}
118+
BOOST_AUTO_TEST_CASE(props) {
119+
auto mock = std::make_shared<MockNav>("mock_nav");
120+
client_to_mock_pipeline<Navigation>(mock, [&](Navigation& client) {
121+
const auto props = client.get_properties();
122+
BOOST_CHECK_EQUAL(props.map_type, Navigation::MapType::k_unspecified);
123+
});
124+
}
34125

35-
BOOST_AUTO_TEST_CASE(nav_paths) {}
126+
BOOST_AUTO_TEST_CASE(do_command) {
127+
auto mock = std::make_shared<MockNav>("mock_nav");
128+
client_to_mock_pipeline<Navigation>(mock, [&](Navigation& client) {
129+
const auto ret = client.do_command({});
130+
BOOST_CHECK_EQUAL(ret.size(), 0);
131+
});
132+
}
36133

37134
} // namespace navigation
38135
} // namespace sdktests

0 commit comments

Comments
 (0)