difftreelog
Merge pull request #55 from messense/ascii
in: master
3 files changed
crates/jrsonnet-evaluator/src/builtin/mod.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/builtin/mod.rs
+++ b/crates/jrsonnet-evaluator/src/builtin/mod.rs
@@ -126,6 +126,8 @@
("strReplace".into(), builtin_str_replace),
("splitLimit".into(), builtin_splitlimit),
("parseJson".into(), builtin_parse_json),
+ ("asciiUpper".into(), builtin_ascii_upper),
+ ("asciiLower".into(), builtin_ascii_lower),
].iter().cloned().collect()
};
}
@@ -828,6 +830,30 @@
})
}
+fn builtin_ascii_upper(
+ context: Context,
+ _loc: Option<&ExprLocation>,
+ args: &ArgsDesc,
+) -> Result<Val> {
+ parse_args!(context, "asciiUpper", args, 1, [
+ 0, str: ty!(string) => Val::Str;
+ ], {
+ Ok(Val::Str(str.to_ascii_uppercase().into()))
+ })
+}
+
+fn builtin_ascii_lower(
+ context: Context,
+ _loc: Option<&ExprLocation>,
+ args: &ArgsDesc,
+) -> Result<Val> {
+ parse_args!(context, "asciiLower", args, 1, [
+ 0, str: ty!(string) => Val::Str;
+ ], {
+ Ok(Val::Str(str.to_ascii_lowercase().into()))
+ })
+}
+
pub fn call_builtin(
context: Context,
loc: Option<&ExprLocation>,
crates/jrsonnet-evaluator/src/lib.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/lib.rs
+++ b/crates/jrsonnet-evaluator/src/lib.rs
@@ -1045,4 +1045,10 @@
.unwrap_err();
assert_eq!(error.error().to_string(), "assert failed: is number");
}
+
+ #[test]
+ fn test_ascii_upper_lower() {
+ assert_eval!(r#"std.assertEqual(std.asciiUpper("aBc😀"), "ABC😀")"#);
+ assert_eval!(r#"std.assertEqual(std.asciiLower("aBc😀"), "abc😀")"#);
+ }
}
crates/jrsonnet-stdlib/src/std.jsonnetdiffbeforeafterboth128128129 strReplace:: $intrinsic(strReplace),129 strReplace:: $intrinsic(strReplace),130130131 asciiUpper(str)::131 asciiUpper:: $intrinsic(asciiUpper),132 local cp = std.codepoint;133 local up_letter(c) = if cp(c) >= 97 && cp(c) < 123 then134 std.char(cp(c) - 32)135 else136 c;137 std.join('', std.map(up_letter, std.stringChars(str))),138132139 asciiLower(str)::133 asciiLower:: $intrinsic(asciiLower),140 local cp = std.codepoint;141 local down_letter(c) = if cp(c) >= 65 && cp(c) < 91 then142 std.char(cp(c) + 32)143 else144 c;145 std.join('', std.map(down_letter, std.stringChars(str))),146134147 range:: $intrinsic(range),135 range:: $intrinsic(range),148136