Initial Dever 0.0.1
This commit is contained in:
commit
81233d098c
1479 files changed
+163782
No files matched your search
@@ -0,0 +1,71 @@
|
||||
// 使用实际三条调用路径记录接受/拒绝,不把 Axum 默认行为误当成 Dever 合同。
|
||||
fn query_checks() {
|
||||
let suffix = "&count=-7&enabled=true&ratio=1.25";
|
||||
let mut cases = vec![
|
||||
("plain", format!("name=Alice{suffix}")),
|
||||
("empty_text", format!("name={suffix}")),
|
||||
("unicode", format!("name=%E9%9B%AA+test{suffix}")),
|
||||
("escaped_separator", format!("name=a%26b%3Dc{suffix}")),
|
||||
("escaped_percent", format!("name=%25{suffix}")),
|
||||
(
|
||||
"valid_replacement_character",
|
||||
format!("name=%EF%BF%BD{suffix}"),
|
||||
),
|
||||
("duplicate_required", format!("name=a&name=b{suffix}")),
|
||||
("duplicate_optional", format!("name=a{suffix}&tag=x&tag=y")),
|
||||
("escaped_duplicate", format!("name=a&%6Eame=b{suffix}")),
|
||||
("unknown", format!("name=a{suffix}&extra=x")),
|
||||
("missing_required", "name=a&enabled=true&ratio=1.25".into()),
|
||||
("optional_present", format!("name=a{suffix}&tag=x")),
|
||||
("empty_pairs", format!("&&name=a&&{suffix}&")),
|
||||
("missing_equals", format!("name{suffix}")),
|
||||
("truncated_percent", format!("name=%{suffix}")),
|
||||
("short_percent", format!("name=%A{suffix}")),
|
||||
("invalid_hex", format!("name=%GG{suffix}")),
|
||||
("invalid_utf8", format!("name=%FF{suffix}")),
|
||||
("overlong_utf8", format!("name=%C0%AF{suffix}")),
|
||||
("encoded_surrogate", format!("name=%ED%A0%80{suffix}")),
|
||||
("nul", format!("name=%00{suffix}")),
|
||||
];
|
||||
for (name, value) in [
|
||||
("int_min", "-9223372036854775808"),
|
||||
("int_max", "9223372036854775807"),
|
||||
("int_overflow", "9223372036854775808"),
|
||||
("int_fraction", "1.5"),
|
||||
("int_leading_zero", "007"),
|
||||
("int_encoded_plus", "%2B7"),
|
||||
] {
|
||||
cases.push((
|
||||
name,
|
||||
format!("name=a&count={value}&enabled=true&ratio=1.25"),
|
||||
));
|
||||
}
|
||||
for (name, value) in [
|
||||
("float_nan", "NaN"),
|
||||
("float_inf", "inf"),
|
||||
("float_overflow", "1e999"),
|
||||
("float_negative_zero", "-0"),
|
||||
("float_exponent", "1.5e3"),
|
||||
] {
|
||||
cases.push((name, format!("name=a&count=7&enabled=true&ratio={value}")));
|
||||
}
|
||||
cases.push(("invalid_bool", "name=a&count=7&enabled=1&ratio=1.25".into()));
|
||||
println!("case,dever,axum,serde_urlencoded,equal_values");
|
||||
for (name, query) in cases {
|
||||
let input = [query_input(&query)];
|
||||
let actual = runtime_query::<QueryArguments>(&input);
|
||||
let axum = axum_query::<QueryArguments>(&input);
|
||||
let serde = serde_query::<QueryArguments>(&input);
|
||||
let equal = match (&actual, &axum, &serde) {
|
||||
(Ok(actual), Ok(axum), Ok(serde)) => actual == axum && actual == serde,
|
||||
(Err(_), Err(_), Err(_)) => true,
|
||||
_ => false,
|
||||
};
|
||||
println!(
|
||||
"{name},{},{},{},{equal}",
|
||||
actual.is_ok(),
|
||||
axum.is_ok(),
|
||||
serde.is_ok()
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user