[feat] add remote host version checks and update prompts

This commit is contained in:
dijunkun
2026-09-28 13:54:39 +08:00
parent f347fc2387
commit 51d392ef48
25 changed files with 891 additions and 392 deletions
@@ -97,5 +97,37 @@ int main() {
ok &= ExpectEqual("plain comparison has no hidden metadata from prior checks",
crossdesk::IsNewerVersion("1.3.5", "1.3.5"), false);
const auto release = crossdesk::ParseVersionInfoJSON(
R"({"latest_version":"v1.5.3-20260928","patch":2})");
ok &= ExpectEqual("shared release JSON parser",
release.has_value(), true);
if (release) {
for (const auto& version : {"1.5.3-2-20260927", "1.5.3-3-20260928", "1.6.0"}) {
ok &= ExpectEqual(std::string("no remote update for ") + version,
crossdesk::AvailableAppUpdate(version, *release).has_value(),
false);
}
for (const auto& version : {"", " ", "unknown", "ios-native", "1..5", "1.5-"}) {
ok &= ExpectEqual(std::string("unavailable peer version is legacy: ") + version,
!crossdesk::IsValidAppVersion(version) &&
crossdesk::AvailableAppUpdate(version, *release) == "1.5.3-2",
true);
}
for (const auto& version : {"1.5.2", "v1.5.3-20260928", "1.5.3-1-20260929",
"1.5.3-20260928-1"}) {
ok &= ExpectEqual(std::string("remote update includes metadata patch for ") + version,
crossdesk::AvailableAppUpdate(version, *release) == "1.5.3-2",
true);
}
}
ok &= ExpectEqual("legacy peer cannot supply a missing latest release label",
crossdesk::AvailableAppUpdate("", crossdesk::VersionInfo{}).has_value(),
false);
for (const auto& response : {"", "not JSON", "{}", "[]",
R"({"version":null})", R"({"version":"unknown"})"}) {
ok &= ExpectEqual("invalid release response gives no update",
crossdesk::ParseVersionInfoJSON(response).has_value(), false);
}
return ok ? 0 : 1;
}