mirror of
https://github.com/vicliu624/trail-mate.git
synced 2026-06-28 16:11:43 +00:00
bf7068b02b
* refactor: render chat rows from presentation state * Fix Meshtastic channel sync and add MeshCore CN preset * Add granular chat notification settings * Add SD settings backup and restore * Prepare 0.1.26-alpha release --------- Co-authored-by: vicliu624 <vicliu@outlook.com>
126 lines
4.4 KiB
C++
126 lines
4.4 KiB
C++
#include "fake/fake_map_action_sink.h"
|
|
#include "fake/fake_map_presentation_source.h"
|
|
#include "ui_presentation/common/fixed_text.h"
|
|
#include "ui_presentation/map/map_workspace_model.h"
|
|
|
|
#include <cassert>
|
|
#include <cstring>
|
|
|
|
namespace
|
|
{
|
|
|
|
ui::map::MapViewport viewport(double lat, double lon, uint8_t zoom)
|
|
{
|
|
ui::map::MapViewport value;
|
|
value.center_lat = lat;
|
|
value.center_lon = lon;
|
|
value.zoom = zoom;
|
|
return value;
|
|
}
|
|
|
|
void assertViewport(const ui::map::MapViewport& actual,
|
|
const ui::map::MapViewport& expected)
|
|
{
|
|
assert(actual.center_lat == expected.center_lat);
|
|
assert(actual.center_lon == expected.center_lon);
|
|
assert(actual.zoom == expected.zoom);
|
|
}
|
|
|
|
} // namespace
|
|
|
|
int main()
|
|
{
|
|
ui::tests::FakeMapPresentationSource source;
|
|
source.snapshot_value.header.valid = true;
|
|
source.snapshot_value.header.version = 7;
|
|
source.snapshot_value.self.valid = true;
|
|
source.snapshot_value.self.lat = 52.4068;
|
|
source.snapshot_value.self.lon = -1.5197;
|
|
source.snapshot_value.self.accuracy_m = 3.5f;
|
|
source.snapshot_value.layers.osm = true;
|
|
source.snapshot_value.layers.contour = true;
|
|
source.snapshot_value.team.available = true;
|
|
source.snapshot_value.team.visible_members = 3;
|
|
source.snapshot_value.team.stale_members = 1;
|
|
source.snapshot_value.can_center_on_self = true;
|
|
source.snapshot_value.can_zoom_in = true;
|
|
source.snapshot_value.can_zoom_out = true;
|
|
source.snapshot_value.can_toggle_layers = true;
|
|
ui::copyText(source.snapshot_value.status_line, "GPS fix");
|
|
|
|
ui::tests::FakeMapActionSink sink;
|
|
ui::map::MapWorkspaceModel model(source, sink);
|
|
|
|
const auto initial_viewport = viewport(52.0, -1.0, 12);
|
|
const auto set_view = model.setViewport(initial_viewport);
|
|
assert(set_view.ok);
|
|
assert(sink.set_viewport_count == 1);
|
|
assertViewport(sink.last_viewport, initial_viewport);
|
|
assertViewport(model.viewport(), initial_viewport);
|
|
|
|
const auto tool_result =
|
|
model.setActiveTool(ui::map::MapToolKind::MeasureDistance);
|
|
assert(tool_result.ok);
|
|
assert(sink.set_active_tool_count == 1);
|
|
assert(sink.last_tool == ui::map::MapToolKind::MeasureDistance);
|
|
assert(model.activeTool() == ui::map::MapToolKind::MeasureDistance);
|
|
|
|
const auto snap = model.snapshot();
|
|
assert(snap.header.valid);
|
|
assert(snap.header.version == 7);
|
|
assert(snap.active_tool == ui::map::MapToolKind::MeasureDistance);
|
|
assertViewport(snap.viewport, initial_viewport);
|
|
assert(source.build_count == 1);
|
|
assertViewport(source.last_request.requested_viewport, initial_viewport);
|
|
assert(source.last_request.active_tool ==
|
|
ui::map::MapToolKind::MeasureDistance);
|
|
assert(snap.self.valid);
|
|
assert(snap.self.lat == 52.4068);
|
|
assert(snap.self.lon == -1.5197);
|
|
assert(snap.layers.contour);
|
|
assert(snap.team.available);
|
|
assert(snap.team.visible_members == 3);
|
|
assert(std::strcmp(snap.status_line.c_str(), "GPS fix") == 0);
|
|
|
|
const auto layer_result =
|
|
model.setLayer(ui::map::MapLayerKind::Terrain, true);
|
|
assert(layer_result.ok);
|
|
assert(sink.set_layer_count == 1);
|
|
assert(sink.last_layer == ui::map::MapLayerKind::Terrain);
|
|
assert(sink.last_layer_enabled);
|
|
|
|
const auto clear_result = model.clearMeasurement();
|
|
assert(clear_result.ok);
|
|
assert(sink.clear_measurement_count == 1);
|
|
|
|
const auto centered = model.centerOnSelf();
|
|
assert(centered.ok);
|
|
assert(sink.center_on_self_count == 1);
|
|
assert(model.viewport().center_lat == 52.4068);
|
|
assert(model.viewport().center_lon == -1.5197);
|
|
assert(model.viewport().zoom == 12);
|
|
|
|
const auto before_rejected = model.viewport();
|
|
source.snapshot_value.self.lat = 10.0;
|
|
source.snapshot_value.self.lon = 20.0;
|
|
sink.center_on_self_result =
|
|
ui::UiActionResult::fail(ui::UiActionFailure::Rejected);
|
|
const auto rejected = model.centerOnSelf();
|
|
assert(!rejected.ok);
|
|
assert(rejected.failure == ui::UiActionFailure::Rejected);
|
|
assertViewport(model.viewport(), before_rejected);
|
|
|
|
sink.center_on_self_result = ui::UiActionResult::success();
|
|
source.snapshot_value.self.valid = false;
|
|
const auto no_fix_before = model.viewport();
|
|
const auto no_fix = model.centerOnSelf();
|
|
assert(no_fix.ok);
|
|
assertViewport(model.viewport(), no_fix_before);
|
|
|
|
source.available = false;
|
|
const auto invalid_snapshot = model.snapshot();
|
|
assert(!invalid_snapshot.header.valid);
|
|
|
|
return 0;
|
|
}
|