mirror of
https://github.com/typst/typst
synced 2025-05-14 04:56:26 +08:00
Move comment tests to integration 🚚
This commit is contained in:
parent
60154474ba
commit
1d01b93f67
@ -59,13 +59,16 @@ impl Eval for Spanned<&ExprArgs> {
|
||||
/// Evaluated arguments to a function.
|
||||
#[derive(Debug)]
|
||||
pub struct Args {
|
||||
span: Span,
|
||||
pos: SpanVec<Value>,
|
||||
named: Vec<(Spanned<String>, Spanned<Value>)>,
|
||||
/// The span of the whole argument list.
|
||||
pub span: Span,
|
||||
/// The positional arguments.
|
||||
pub pos: SpanVec<Value>,
|
||||
/// The named arguments.
|
||||
pub named: Vec<(Spanned<String>, Spanned<Value>)>,
|
||||
}
|
||||
|
||||
impl Args {
|
||||
/// Find the first convertible positional argument.
|
||||
/// Find and remove the first convertible positional argument.
|
||||
pub fn find<T>(&mut self, ctx: &mut EvalContext) -> Option<T>
|
||||
where
|
||||
T: Cast<Spanned<Value>>,
|
||||
@ -73,8 +76,8 @@ impl Args {
|
||||
self.pos.iter_mut().find_map(move |slot| try_cast(ctx, slot))
|
||||
}
|
||||
|
||||
/// Find the first convertible positional argument, producing an error if
|
||||
/// no match was found.
|
||||
/// Find and remove the first convertible positional argument, producing an
|
||||
/// error if no match was found.
|
||||
pub fn require<T>(&mut self, ctx: &mut EvalContext, what: &str) -> Option<T>
|
||||
where
|
||||
T: Cast<Spanned<Value>>,
|
||||
@ -86,7 +89,7 @@ impl Args {
|
||||
found
|
||||
}
|
||||
|
||||
/// Filter out all convertible positional arguments.
|
||||
/// Filter out and remove all convertible positional arguments.
|
||||
pub fn filter<'a, T>(
|
||||
&'a mut self,
|
||||
ctx: &'a mut EvalContext,
|
||||
@ -97,8 +100,8 @@ impl Args {
|
||||
self.pos.iter_mut().filter_map(move |slot| try_cast(ctx, slot))
|
||||
}
|
||||
|
||||
/// Convert the value for the given named argument, producing an error if
|
||||
/// the conversion fails.
|
||||
/// Convert and remove the value for the given named argument, producing an
|
||||
/// error if the conversion fails.
|
||||
pub fn get<'a, T>(&mut self, ctx: &mut EvalContext, name: &str) -> Option<T>
|
||||
where
|
||||
T: Cast<Spanned<Value>>,
|
||||
@ -108,6 +111,13 @@ impl Args {
|
||||
cast(ctx, value)
|
||||
}
|
||||
|
||||
/// Drain all remainings arguments into an array and a dictionary.
|
||||
pub fn drain(&mut self) -> (ValueArray, ValueDict) {
|
||||
let array = self.pos.drain(..).map(|s| s.v).collect();
|
||||
let dict = self.named.drain(..).map(|(k, v)| (k.v, v.v)).collect();
|
||||
(array, dict)
|
||||
}
|
||||
|
||||
/// Produce "unexpected argument" errors for all remaining arguments.
|
||||
pub fn finish(self, ctx: &mut EvalContext) {
|
||||
let a = self.pos.iter().map(|v| v.as_ref());
|
||||
|
@ -217,23 +217,6 @@ macro_rules! Let {
|
||||
};
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_parse_comments() {
|
||||
// In markup.
|
||||
t!("a// you\nb" Text("a"), Space, Text("b"));
|
||||
t!("* // \n /*\n\n*/*" Strong, Space, Space, Strong);
|
||||
|
||||
// In code.
|
||||
t!("[v /*12pt*/]" Call!("v"));
|
||||
t!("[v //\n]" Call!("v"));
|
||||
t!("[v 12, /*\n*/ size: 14]" Call!("v", Args![Int(12), "size" => Int(14)]));
|
||||
|
||||
// Error.
|
||||
t!("a*/b"
|
||||
nodes: [Text("a"), Text("b")],
|
||||
errors: [S(1..3, "unexpected end of block comment")]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_parse_simple_nodes() {
|
||||
// Basics.
|
||||
|
BIN
tests/ref/comments.png
Normal file
BIN
tests/ref/comments.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
23
tests/typ/comments.typ
Normal file
23
tests/typ/comments.typ
Normal file
@ -0,0 +1,23 @@
|
||||
// Test interaction with words, spacing and expressions.
|
||||
|
||||
A// you
|
||||
B
|
||||
|
||||
C/*
|
||||
/* */
|
||||
*/D
|
||||
|
||||
[dump /*1*/ a: "b" //
|
||||
, 1]
|
||||
|
||||
---
|
||||
// Test error.
|
||||
//
|
||||
// ref: false
|
||||
// error: 3:7-3:9 unexpected end of block comment
|
||||
|
||||
// No start of block comment.
|
||||
/* */ */
|
||||
|
||||
// Unterminated block comment is okay.
|
||||
/*
|
@ -15,7 +15,7 @@ use ttf_parser::OutlineBuilder;
|
||||
|
||||
use typst::diag::{Diag, Feedback, Level, Pass};
|
||||
use typst::env::{Env, ImageResource, ResourceLoader, SharedEnv};
|
||||
use typst::eval::State;
|
||||
use typst::eval::{Args, EvalContext, State, Value, ValueFunc};
|
||||
use typst::export::pdf;
|
||||
use typst::font::FontLoader;
|
||||
use typst::geom::{Length, Point, Sides, Size};
|
||||
@ -189,6 +189,13 @@ fn test_part(i: usize, src: &str, env: &SharedEnv) -> (bool, Vec<Frame>) {
|
||||
state.page.size = Size::uniform(Length::pt(120.0));
|
||||
state.page.margins = Sides::uniform(Some(Length::pt(10.0).into()));
|
||||
|
||||
pub fn dump(_: &mut EvalContext, args: &mut Args) -> Value {
|
||||
let (array, dict) = args.drain();
|
||||
Value::Array(vec![Value::Array(array), Value::Dict(dict)])
|
||||
}
|
||||
|
||||
Rc::make_mut(&mut state.scope).set("dump", ValueFunc::new("dump", dump));
|
||||
|
||||
let Pass {
|
||||
output: mut frames,
|
||||
feedback: Feedback { mut diags, .. },
|
||||
|
Loading…
x
Reference in New Issue
Block a user