git.delta.rocks / jrsonnet / refs/commits / 07ae295ebde4

difftreelog

Merge pull request #55 from messense/ascii

Yaroslav Bolyukin2021-07-13parents: #fbae069 #0ecdce9.patch.diff
in: master

3 files changed

modifiedcrates/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>,
modifiedcrates/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😀")"#);
+	}
 }
modifiedcrates/jrsonnet-stdlib/src/std.jsonnetdiffbeforeafterboth
128128
129 strReplace:: $intrinsic(strReplace),129 strReplace:: $intrinsic(strReplace),
130130
131 asciiUpper(str)::131 asciiUpper:: $intrinsic(asciiUpper),
132 local cp = std.codepoint;
133 local up_letter(c) = if cp(c) >= 97 && cp(c) < 123 then
134 std.char(cp(c) - 32)
135 else
136 c;
137 std.join('', std.map(up_letter, std.stringChars(str))),
138132
139 asciiLower(str)::133 asciiLower:: $intrinsic(asciiLower),
140 local cp = std.codepoint;
141 local down_letter(c) = if cp(c) >= 65 && cp(c) < 91 then
142 std.char(cp(c) + 32)
143 else
144 c;
145 std.join('', std.map(down_letter, std.stringChars(str))),
146134
147 range:: $intrinsic(range),135 range:: $intrinsic(range),
148136