Files
vicliu bf7068b02b 0.1.26-alpha release
* 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>
2026-05-19 16:04:42 +08:00

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;
}