#include "dashboard.h" #include int main() { using namespace bambu_display; assert(remaining(1.75f, "h") == "1h 45m"); assert(remaining(105.0f, "min") == "1h 45m"); assert(remaining(6300.0f, "s") == "1h 45m"); assert(remaining(6300000.0f, "ms") == "1h 45m"); assert(remaining(0.15f, "h") == "0h 09m"); assert(remaining(NAN, "h") == "--"); assert(remaining(-1, "min") == "--"); assert(remaining(10, "") == "--"); assert(remaining(INFINITY, "h") == "--"); assert(number(NAN) == "--"); assert(temperature(219, 220, "°C") == "219 / 220 °C"); assert(filament_color("#00FF00FF") == GREEN); assert(filament_color("60de9a") == 0x60DE9A); assert(filament_color("#60DE9AZZ") == TRACK); assert(filament_color("unknown") == TRACK); assert(gauge_value(NAN, 100) == 0); assert(gauge_value(110, 100) == 100); assert(gauge_value(-10, 100) == 0); assert(duration_seconds(1.75f, "h") == 6300); assert(duration_seconds(105, "min") == 6300); assert(duration_seconds(6300000, "ms") == 6300); assert(duration_seconds(NAN, "h") == -1); assert(duration_seconds(1, "") == -1); assert(std::abs(celsius(392, "°F") - 200) < 0.01f); Snapshot data; data.online = "on"; data.status = "running"; assert(!data.live()); assert(data.status_text() == "HA OFFLINE"); data.connected = true; assert(data.live()); assert(data.status_text() == "PRINTING"); data.online = "off"; assert(!data.live()); assert(data.status_text() == "PRINTER OFFLINE"); data.online = "unavailable"; assert(data.status_text() == "SYNCING"); data.online = "on"; data.status = "unknown"; assert(!data.live()); data.status = "pause"; assert(data.status_text() == "PAUSED"); assert(data.status_color() == AMBER); data.print_error = "on"; assert(data.status_text() == "PRINT ERROR"); assert(data.status_color() == RED); data.print_error = "off"; data.hms_error = "True"; assert(data.status_text() == "HEALTH NOTICE"); assert(data.status_color() == AMBER); assert(data.health_details().find("have not arrived") != std::string::npos); data.hms_count = "1"; data.health_notices = {{"DEMO_CODE", "A synthetic information message", "info"}}; assert(data.status_text() == "HEALTH INFO"); assert(data.health_details().find("DEMO_CODE") != std::string::npos); assert(data.alert_summary() == "A synthetic information message"); data.health_notices.push_back({"DEMO_2", "A synthetic serious message", "serious"}); data.hms_count = "2"; assert(data.status_text() == "HEALTH ERROR"); assert(data.status_color() == RED); assert(data.health_details().find("A synthetic serious message") != std::string::npos); data.health_notices.pop_back(); data.hms_count = "5"; assert(data.status_text() == "HEALTH NOTICE"); assert(data.health_details().find("4 more") != std::string::npos); data.hms_error = "off"; assert(data.health_details() == "No current printer health notifications."); data.status = "finish"; assert(data.status_text() == "COMPLETE"); assert(data.status_color() == GREEN); // Elegoo exposes error enums rather than Bambu binary errors/HMS notices. data.elegoo = true; data.print_error = "none"; data.print_error_reason = "ok"; data.status = "printing"; assert(data.live()); assert(!data.has_print_error()); assert(data.status_text() == "PRINTING"); data.print_error_reason = "filament_runout"; assert(data.status_text() == "PRINT ERROR"); assert(data.status_color() == RED); assert(data.health_details().find("Filament runout") != std::string::npos); data.print_error = "invalid_resolution"; assert(data.alert_summary() == "Invalid resolution / Filament runout"); data.print_error_reason = "unavailable"; assert(data.alert_summary() == "Invalid resolution"); data.print_error = "unknown"; assert(!data.has_print_error()); data.status = "error"; assert(data.has_print_error()); data.status = "pausing"; assert(data.status_color() == AMBER); data.status = "complete"; assert(data.status_text() == "COMPLETE"); data.online = "off"; assert(!data.live()); assert(data.status_text() == "PRINTER OFFLINE"); assert(data.health_details().find("unavailable") != std::string::npos); }