Add error cases for [font] 🧯

This commit is contained in:
Laurenz 2020-12-21 00:47:47 +01:00
parent e59de77f96
commit c44ebf876f
2 changed files with 15 additions and 4 deletions

View File

@ -105,9 +105,9 @@ pub fn font(mut args: Args, ctx: &mut EvalContext) -> Value {
ctx.state.font.variant.stretch = stretch;
}
struct FontList(Vec<String>);
struct FamilyList(Vec<String>);
try_from_match!(FontList["font or list of fonts"] @ span:
try_from_match!(FamilyList["family or list of families"] @ span:
Value::Str(v) => Self(vec![v.to_lowercase()]),
Value::Dict(v) => Self(Args(v.span_with(span))
.find_all::<StringLike>()
@ -117,7 +117,7 @@ pub fn font(mut args: Args, ctx: &mut EvalContext) -> Value {
);
for &class in &["serif", "sans-serif", "monospace", "emoji", "math"] {
if let Some(list) = args.get::<_, FontList>(ctx, class) {
if let Some(list) = args.get::<_, FamilyList>(ctx, class) {
Rc::make_mut(&mut ctx.state.font.families)
.update_class_list(class.to_string(), list.0);
needs_flattening = true;

View File

@ -1,6 +1,17 @@
// Test error cases of the `font` function.
// Not one of the valid things for positional arguments.
[font: false]
// Wrong types.
[font: style=bold, weight="thin", emoji=0]
// Non-existing argument.
[font: something="invalid"]
// compare-ref: false
// error: 3:8-3:27 unexpected argument
// error: 4:8-4:13 unexpected argument
// error: 7:14-7:18 invalid font style
// error: 7:27-7:33 expected font weight, found string
// error: 7:41-7:42 expected family or list of families, found integer
// error: 10:8-10:27 unexpected argument