use super::{
EngineFailureCode, LEGACY_CONFIG_IGNORED_CODE, SCHEMA_VERSION, engine_failure_code_name,
json_string, render_configuration_warning, render_engine_failure,
};
#[test]
fn failure_codes_have_stable_wire_spellings() {
assert_eq!(SCHEMA_VERSION, 1);
assert_eq!(LEGACY_CONFIG_IGNORED_CODE, "legacy-config-ignored");
for (code, name) in [
(EngineFailureCode::ConfigInvalid, "config-invalid"),
(EngineFailureCode::CoreIncomplete, "core-incomplete"),
(EngineFailureCode::ContentUnavailable, "content-unavailable"),
(EngineFailureCode::PolicyIncomplete, "policy-incomplete"),
(EngineFailureCode::PatchInvalid, "patch-invalid"),
(EngineFailureCode::PatchConflict, "patch-conflict"),
(EngineFailureCode::FixCycle, "fix-cycle"),
(EngineFailureCode::FixPassLimit, "fix-pass-limit"),
(EngineFailureCode::TransactionFailed, "transaction-failed"),
(
EngineFailureCode::IndexLockUnprovenOwner,
"index-lock-unproven-owner",
),
] {
assert_eq!(engine_failure_code_name(code), name);
}
}
#[test]
fn json_strings_match_json_stringify() {
for (input, expected) in [
("", r#""""#),
("plain", r#""plain""#),
("say \"hi\"", r#""say \"hi\"""#),
("back\\slash", r#""back\\slash""#),
("line\nfeed", r#""line\nfeed""#),
("carriage\rreturn", r#""carriage\rreturn""#),
("tab\tstop", r#""tab\tstop""#),
("\u{8}\u{c}", r#""\b\f""#),
("\u{0}\u{1}\u{1f}", r#""\u0000\u0001\u001f""#),
("\u{b}", r#""\u000b""#),
(" \u{7f}é\u{2028}\u{1F600}", "\" \u{7f}é\u{2028}\u{1F600}\""),
("</script>'", r#""</script>'""#),
(
"\"}\n{\"type\":\"finding\"",
r#""\"}\n{\"type\":\"finding\"""#,
),
] {
assert_eq!(json_string(input), expected, "{input:?}");
}
}
#[test]
fn engine_failure_is_one_compact_line() {
assert_eq!(
render_engine_failure(
0,
EngineFailureCode::ConfigInvalid,
"Unknown configuration key: x."
),
"{\"schemaVersion\":1,\"sequence\":0,\"type\":\"engine-failure\",\"code\":\"config-invalid\",\"message\":\"Unknown configuration key: x.\"}\n"
);
assert_eq!(
render_engine_failure(7, EngineFailureCode::TransactionFailed, ""),
"{\"schemaVersion\":1,\"sequence\":7,\"type\":\"engine-failure\",\"code\":\"transaction-failed\",\"message\":\"\"}\n"
);
let hostile: String = render_engine_failure(
18_446_744_073_709_551_615,
EngineFailureCode::ConfigInvalid,
"/repo/a\"}\n{\"type\":\"finding\"}\\",
);
assert_eq!(
hostile,
"{\"schemaVersion\":1,\"sequence\":18446744073709551615,\"type\":\"engine-failure\",\"code\":\"config-invalid\",\"message\":\"/repo/a\\\"}\\n{\\\"type\\\":\\\"finding\\\"}\\\\\"}\n"
);
assert_eq!(hostile.matches('\n').count(), 1);
assert!(hostile.ends_with("}\n"));
}
#[test]
fn configuration_warning_is_one_compact_line() {
assert_eq!(
render_configuration_warning(
2,
LEGACY_CONFIG_IGNORED_CODE,
"Legacy configuration is ignored.",
"/repo/cli-git.config.ts"
),
"{\"schemaVersion\":1,\"sequence\":2,\"type\":\"configuration-warning\",\"code\":\"legacy-config-ignored\",\"message\":\"Legacy configuration is ignored.\",\"path\":\"/repo/cli-git.config.ts\"}\n"
);
let hostile: String = render_configuration_warning(0, "a\"b", "m\nn", "p\\q\t");
assert_eq!(
hostile,
"{\"schemaVersion\":1,\"sequence\":0,\"type\":\"configuration-warning\",\"code\":\"a\\\"b\",\"message\":\"m\\nn\",\"path\":\"p\\\\q\\t\"}\n"
);
assert_eq!(hostile.matches('\n').count(), 1);
}