From c36a136e6f26ac99e58465ad072c282fe6dbaedf Mon Sep 17 00:00:00 2001 From: Laurenz Date: Wed, 13 Jan 2021 17:22:33 +0100 Subject: [PATCH] =?UTF-8?q?Simpler=20diagnostic=20localization=20in=20test?= =?UTF-8?q?s=20=E2=99=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/ref/arrays.png | Bin 3945 -> 3601 bytes tests/ref/{basic-markup.png => basics.png} | Bin tests/ref/dictionaries.png | Bin 2183 -> 1857 bytes tests/ref/escaping.png | Bin 4320 -> 4401 bytes tests/ref/{func-h-and-v.png => func-hv.png} | Bin tests/typ/arrays.typ | 18 +++--- tests/typ/{basic-markup.typ => basics.typ} | 0 tests/typ/comments.typ | 13 ++--- tests/typ/dictionaries.typ | 14 ++--- tests/typ/escaping.typ | 23 +++----- tests/typ/func-font.typ | 19 +++--- tests/typ/{func-h-and-v.typ => func-hv.typ} | 6 +- tests/typ/func-image.typ | 8 +-- tests/typ/func-page.typ | 8 +-- tests/typ/func-rgb.typ | 16 ++--- tests/typ/headings.typ | 7 +-- tests/typeset.rs | 61 +++++++------------- 17 files changed, 69 insertions(+), 124 deletions(-) rename tests/ref/{basic-markup.png => basics.png} (100%) rename tests/ref/{func-h-and-v.png => func-hv.png} (100%) rename tests/typ/{basic-markup.typ => basics.typ} (100%) rename tests/typ/{func-h-and-v.typ => func-hv.typ} (83%) diff --git a/tests/ref/arrays.png b/tests/ref/arrays.png index 4a95278c00389d15669cd97ff2dd244f640653bc..8fda7cf6b8a116e22ca8166e7e8bbcb8fd539e9d 100644 GIT binary patch literal 3601 zcmaKv2{hDS8^?b$O^mE#DZ6H@{|HHF>@*_T69(arA(U;BLNgd!Bjj)2HB>5F)-Vhy zO4&1EFp@#Sgd*$f|9{W>p7Wkl@4e@qbI-l^+;h+K+~@mzo&-zt^PES7j{pF`X<~fN z8UR3$gRuuaSO8pnl*$g)KboA=zZ5#QG%+1WLh>J`kAtv)m>%ncLyr#8Knr?UO2|Q9 z)LX#w%IQnzZ5YyoND1ojYIS*yn;0+qu8@wn6ul;61P4oWyQ{Jw$7|U`vg`<+Na(ra zU|75!n-IUg|8&5Q6L2r^vHF-`8PasP2sWCi=kf9n9-53r z7rI8@yT|4@cA$zlalAy!eA@v6yxw7h&st@Zf3j`x;4iI3NZjQ)mS%|P6gu(f95lhv zeMr^p=4C=1BX|U@Ss*Y?Lc(V`GWrlecatunBxkgNdpc+iS)8$;MqT>|jh@%$1!`J9 zfU*Sv!zW~(Z5}l$fy7x2)SOC?ty_9QY}t5cdW{bUxN=8@Z3J@T-nZx+4aPzM}vtB+%+_e!32xIk#tl)=L<3GMgBPP9#?c01B@1!oa=B$Wd2~a`| zhNAE|*!>jFvAIPHY)Au62)+U&mJ9ld9e2L|Z2b5p8cFs1z7%I9`8p}UdbBLv2xi$s zf87E0F3FEo*Z>$3!ad`;CB>yeyeC>53Fb1uj9R9@wwNeTt5WGgFLkzv*6-L6J*t~N zQ>E@aceGe9F(nSdvM^c62gv`0FeYd0sDxV>|M*FTsj?fwIy<4}Ijt+(t*R^V%_*u; z=a*yH)D3pPSV-rRY@{-dKwqC(fwwRm)NAhot||z-WRz~2bR-Xz?UX^dL#=+*;FtP4 zpbVnwmUgboeXzkzR*=IjZqSWbL6Dxbc#IlRH(g>k9kPP@;z-a(0@S)2p|8+$7D{U@ z#oeGyBN$y4czjrJ7Nv`oW&d1gFu(epN&fK{f2?r5;sexGVcpc|G?Hf$NsKeB&mmD=0f{i$Yx4fr}KHC325;K$v;9E~I6&rUhM0(s+n zjB1>3KqjouqXIH5s58t=*hX{FykJ1$b3o8@@2gLOy+=IJYaFa6uwPux$>Zid zZg&=MqCh9|QsknqbEyD22bv{BQ7}?>78IuC9%}F>cOyidT{%{mZ8?lgR(z=ov-#G~ zy5+DbrkbOzY#Hj;!(Zk3&|9e0kRLG3I_5uiry9Z4{7(GG>!>?!1!ekt^kK+knG@Xg=_^%s-0W%R_K z*gklsE3Xz!%@$%>9&@CkmjQe(h$&+Ke6@%j*Oe0*IIwzGaX80z_fb1B4my zZ*G`tVsmxigPOsWrm?uLWb{@tQw-0e?{*jIys6m_cjHMHNJ&KQzip zb_$T#(#LrVxfs!qS*uTHz3~-8wMqSo<|=?K*R_*GmHB%)Vwk#HqaMUDFG&C;vUE{o zz3XHLbMk%1gLJ^CjQ{G04ES~IqVzRev;*Es1~6kp>WkuKqDPu%Z^7cu`l+et zHYfOzwpvrEp10DEI6_?BEJl?Us@JuNzpz@}pZvQ4vSXGH3cwKjiT%F)R4#nq>VCMA z7+$)^YyZSiO6rHTAOUvl>T2vy+Y?3Ui-|v_^Uh>`ae&?)4RbtUj?zHi+kI?2RdM@BTvxyx|Pd=Ip&!RV6jw+vVWrW!U`@$wYzx*O#^KCQ2~} z+vP%QHdC5K$ZcmS)%(>ZH)8r(;YG->KHd?J&!oC!*WZZF|HG31ati?`6!{O&9AM36 zF!T8@6XbtS|3f)A*5X}nP%x!cRCL;6@p7NP+t{Ggqx#9{eqq4=j`}yh<$%)ow9`OV zPcf_|aVr7pmgW;=m=TsgxbYZD5o9RcthfhbDDKc?kW;%}u3;Fr$i6nzmmJCsYJF#re;+ORv-FJ1@^L5XtYvSavN4e) zNvqgj7w?c0FpmtV{F8$PEyh(gfmV`VA0TnAESGVqfE;u+a zoUUxOu7qVW-oNyMVT<`be%I!jU(Ywv_4aohG(;RHt{m}e;o-r~DBF z=}%s9lHhOm%1vz@whiweYWZuDN>=mhW%YMI1Q_0ZdanBSpJr%%fZARFM7}pFbiO&b|pA6>#{0RS%BDKUfUmVjcgDF z%_n(rl!K0t#Ls?|w9HSceN7s~v*I0)gu@HTcLQ=WLS(((5JC8QEtQV*363_QqvA;2 zX-R@iBBk86>lBQ^&D-$MQaTSA=-bPV!xF~pSF|B6nA1r~O#OVi@4)umVV1cKxW|Mx zWD`w%GvF9!8lK<(M{K2M-qb;)XOO&Jxbw7`(VlpaEgI)pPvW)eG#@)di!oTWPOt)o zoFY!8J{uBkAR&NE4a4et{(RRZIM2!%grD4$CvtBU7G`Ne!0#B{eW>sVjv~`?G>wSw zThA-KEQu$-{|!iQnnHtpNXyAal+~vh{LNMpcU@7vNj#Hg|AX8#Lkdmx-e-Yaid5|9@Ql}pvKhYev^u_}Hq<52!6#S~VPz-zgz@Odfga~hgaa|=b9xbCN= z2PiAoVLSLDx4WKYFwb$x>OktAQ7?L-n4>B4X`RUi{c9jKP2qMO0*dyC5v;2UMzd#* z?F1zoY54qar2WStTF2ayWPMoa){es8nxUR~CEz0C-O+`7=uA_=%R%2*gB;>+ID7GR zP*G*WBI@B4{vYsnZc-yze@6G077R7`FP{+$8Lc>!etWCeeS~;X+hrQw^T4(&xnBni zual;!!kO1nusQuA_=D%w_6O{S6 J3Io@ue*wPPMUwyk literal 3945 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 diff --git a/tests/ref/basic-markup.png b/tests/ref/basics.png similarity index 100% rename from tests/ref/basic-markup.png rename to tests/ref/basics.png diff --git a/tests/ref/dictionaries.png b/tests/ref/dictionaries.png index a34b45e0755200b68f2a92af03a048518ee66243..42cb431d662182b3fc1c20fd4d605e4af1b9701b 100644 GIT binary patch literal 1857 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 KMNUMnLSTYrc(85& delta 3967 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 Z@IPLskXb$l!JGg9002ovPDHLkV1i@^bHD%q diff --git a/tests/ref/func-h-and-v.png b/tests/ref/func-hv.png similarity index 100% rename from tests/ref/func-h-and-v.png rename to tests/ref/func-hv.png diff --git a/tests/typ/arrays.typ b/tests/typ/arrays.typ index adab2ad93..0b8fb866a 100644 --- a/tests/typ/arrays.typ +++ b/tests/typ/arrays.typ @@ -13,25 +13,21 @@ , #003 ,)} ---- -// Test errors. -// -// error: 2:3-2:3 expected closing paren -// error: 4:4-4:6 expected expression, found end of block comment -// error: 4:4-4:4 expected comma -// error: 6:6-6:8 expected expression, found invalid token -// error: 8:3-8:4 expected expression, found comma -// error: 10:5-10:5 expected expression -// error: 12:6-12:10 expected expression, found named pair - +// Error: 1:3-1:3 expected closing paren {(} +// Error: 2:4-2:6 expected expression, found end of block comment +// Error: 1:4-1:4 expected comma {(1*/2)} +// Error: 1:6-1:8 expected expression, found invalid token {(1, 1u 2)} +// Error: 1:3-1:4 expected expression, found comma {(,1)} +// Error: 1:5-1:5 expected expression {(a:)} +// Error: 1:6-1:10 expected expression, found named pair {(1, b: 2)} diff --git a/tests/typ/basic-markup.typ b/tests/typ/basics.typ similarity index 100% rename from tests/typ/basic-markup.typ rename to tests/typ/basics.typ diff --git a/tests/typ/comments.typ b/tests/typ/comments.typ index 0dfb4b8ef..56906d0ca 100644 --- a/tests/typ/comments.typ +++ b/tests/typ/comments.typ @@ -1,22 +1,17 @@ -// Test interaction with words, spacing and expressions. - +// Test whether line comment acts as spacing. A// you B +// Test whether block comment acts as spacing. C/* /* */ */D +// Test in expressions. [dump /*1*/ a: "b" // , 1] ---- -// Test error. -// -// ref: false -// error: 3:7-3:9 unexpected end of block comment - -// No start of block comment. +// Error: 1:7-1:9 unexpected end of block comment /* */ */ // Unterminated block comment is okay. diff --git a/tests/typ/dictionaries.typ b/tests/typ/dictionaries.typ index 51e3eb3c2..c729b92c5 100644 --- a/tests/typ/dictionaries.typ +++ b/tests/typ/dictionaries.typ @@ -4,15 +4,11 @@ // Two pairs. {(one: 1, two: 2)} ---- -// Test errors. -// -// error: 2:9-2:10 expected named pair, found expression -// error: 4:4-4:5 expected named pair, found expression -// error: 4:5-4:5 expected comma -// error: 4:12-4:16 expected identifier -// error: 4:17-4:18 expected expression, found colon - +// Error: 1:9-1:10 expected named pair, found expression {(a: 1, b)} +// Error: 4:4-4:5 expected named pair, found expression +// Error: 3:5-3:5 expected comma +// Error: 2:12-2:16 expected identifier +// Error: 1:17-1:18 expected expression, found colon {(:1 b:[], true::)} diff --git a/tests/typ/escaping.typ b/tests/typ/escaping.typ index a562dcc0c..cb663612a 100644 --- a/tests/typ/escaping.typ +++ b/tests/typ/escaping.typ @@ -1,6 +1,4 @@ -// Test basic symbol escapes. - -// Escapable +// Escapable symbols. \\ \/ \[ \] \{ \} \* \_ \# \~ \` \$ // No need to escape. @@ -12,21 +10,16 @@ // Escaped comments. \// \/\* \*\/ -\/* \*/ - ---- -// Test unicode escapes. -// -// error: 5:1-5:11 invalid unicode escape sequence -// error: 8:6-8:6 expected closing brace +\/* \*/ * +// Test unicode escape sequence. \u{1F3D5} == 🏕 -// Bad sequence. +// Escaped escape sequence. +\u{41} vs. \\u\{41\} + +// Error: 1:1-1:11 invalid unicode escape sequence \u{FFFFFF} -// Missing closing brace. +// Error: 1:6-1:6 expected closing brace \u{41*Bold* - -// Escaped escape sequence. -\\u\{ABC\} diff --git a/tests/typ/func-font.typ b/tests/typ/func-font.typ index c73e3a1a6..8199ecb43 100644 --- a/tests/typ/func-font.typ +++ b/tests/typ/func-font.typ @@ -43,23 +43,18 @@ New sans-serif. 🚀 --- // Test error cases. -// -// ref: false -// error: 3:7-3:12 unexpected argument -// error: 6:14-6:18 expected font style, found font weight -// error: 6:28-6:34 expected font weight, found string -// error: 6:43-6:44 expected font family or array of font families, found integer -// warning: 9:15-9:19 must be between 100 and 900 -// error: 12:7-12:27 unexpected argument +// Ref: false -// Not one of the valid things for positional arguments. +// Error: 1:7-1:12 unexpected argument [font false] -// Wrong types. +// Error: 3:14-3:18 expected font style, found font weight +// Error: 2:28-2:34 expected font weight, found string +// Error: 1:43-1:44 expected font family or array of font families, found integer [font style: bold, weight: "thin", serif: 0] -// Weight out of range. +// Warning: 1:15-1:19 must be between 100 and 900 [font weight: 2700] -// Non-existing argument. +// Error: 1:7-1:27 unexpected argument [font something: "invalid"] diff --git a/tests/typ/func-h-and-v.typ b/tests/typ/func-hv.typ similarity index 83% rename from tests/typ/func-h-and-v.typ rename to tests/typ/func-hv.typ index 7b8843c83..f930bc129 100644 --- a/tests/typ/func-h-and-v.typ +++ b/tests/typ/func-hv.typ @@ -19,10 +19,6 @@ Relative [h 100%] spacing 3 [v 1cm] 4 [v -1cm] 5 ] ---- -// Test error cases. -// -// error: 3:11-3:11 missing argument: spacing - // Missing spacing. +// Error: 1:11-1:11 missing argument: spacing Totally [h] ignored diff --git a/tests/typ/func-image.typ b/tests/typ/func-image.typ index 78a644c04..b0ca03577 100644 --- a/tests/typ/func-image.typ +++ b/tests/typ/func-image.typ @@ -35,12 +35,10 @@ --- // Test error cases. // -// ref: false -// error: 3:8-3:29 failed to load image -// error: 6:8-6:29 failed to load image +// Ref: false -// File does not exist. +// Error: 1:8-1:29 failed to load image [image "path/does/not/exist"] -// File exists, but is no image. +// Error: 1:8-1:29 failed to load image [image "typ/image-error.typ"] diff --git a/tests/typ/func-page.typ b/tests/typ/func-page.typ index 6b9382b9a..465a3469e 100644 --- a/tests/typ/func-page.typ +++ b/tests/typ/func-page.typ @@ -47,12 +47,10 @@ Right to left! --- // Test error cases. // -// ref: false -// error: 3:7-3:18 unknown variable -// error: 6:17-6:20 aligned axis +// Ref: false -// Invalid paper. +// Error: 1:7-1:18 unknown variable [page nonexistant] -// Aligned axes. +// Error: 1:17-1:20 aligned axis [page main-dir: ltr] diff --git a/tests/typ/func-rgb.typ b/tests/typ/func-rgb.typ index e88b19bf1..d29c29409 100644 --- a/tests/typ/func-rgb.typ +++ b/tests/typ/func-rgb.typ @@ -1,11 +1,4 @@ // Test the `rgb` function. -// -// warning: 9:6-9:9 must be between 0.0 and 1.0 -// warning: 9:11-9:15 must be between 0.0 and 1.0 -// error: 12:6-12:10 missing argument: blue component -// error: 15:5-15:5 missing argument: red component -// error: 15:5-15:5 missing argument: green component -// error: 15:5-15:5 missing argument: blue component // Check the output. [rgb 0.0, 0.3, 0.7] @@ -13,11 +6,14 @@ // Alpha channel. [rgb 1.0, 0.0, 0.0, 0.5] -// Value smaller than 0.0 and larger than 1.0 +// Warning: 2:6-2:9 must be between 0.0 and 1.0 +// Warning: 1:11-1:15 must be between 0.0 and 1.0 [rgb -30, 15.5, 0.5] -// Missing blue component. +// Error: 1:6-1:10 missing argument: blue component [rgb 0, 1] -// Missing all components. +// Error: 3:5-3:5 missing argument: red component +// Error: 2:5-2:5 missing argument: green component +// Error: 1:5-1:5 missing argument: blue component [rgb] diff --git a/tests/typ/headings.typ b/tests/typ/headings.typ index 3a1157462..de98eddb9 100644 --- a/tests/typ/headings.typ +++ b/tests/typ/headings.typ @@ -1,10 +1,10 @@ // Number of hashtags. -// -// warning: 5:1-5:8 section depth should not exceed 6 # One ### Three ###### Six + +// Warning: 1:1-1:8 section depth should not exceed 6 ####### Seven --- @@ -16,8 +16,6 @@ --- // Is no heading. -// -// error: 8:1-8:6 unexpected invalid token \# No heading @@ -25,6 +23,7 @@ Text with # hashtag Nr#1 +// Error: 1:1-1:6 unexpected invalid token #nope --- diff --git a/tests/typeset.rs b/tests/typeset.rs index 2b342c5bc..6f077ed15 100644 --- a/tests/typeset.rs +++ b/tests/typeset.rs @@ -183,7 +183,8 @@ fn test( } fn test_part(i: usize, src: &str, env: &SharedEnv) -> (bool, Vec) { - let (src, compare_ref, map, ref_diags) = parse_metadata(&src, i); + let map = LineMap::new(src); + let (compare_ref, ref_diags) = parse_metadata(src, &map); let mut state = State::default(); state.page.size = Size::uniform(Length::pt(120.0)); @@ -230,58 +231,40 @@ fn test_part(i: usize, src: &str, env: &SharedEnv) -> (bool, Vec) { (ok, frames) } -fn parse_metadata(src: &str, i: usize) -> (&str, bool, LineMap, SpanVec) { +fn parse_metadata(src: &str, map: &LineMap) -> (bool, SpanVec) { let mut diags = vec![]; let mut compare_ref = true; - let mut s = Scanner::new(src); - for k in 0 .. { - // Allow a newline directly after "---" (that is, if i > 0 and k == 0). - if !(i > 0 && k == 0) && !s.rest().starts_with("//") { - break; - } + for (i, line) in src.lines().enumerate() { + compare_ref &= !line.starts_with("// Ref: false"); - let line = s.eat_until(typst::parse::is_newline); - s.eat_merging_crlf(); - - compare_ref &= !line.starts_with("// ref: false"); - - let (level, rest) = if let Some(rest) = line.strip_prefix("// warning: ") { + let (level, rest) = if let Some(rest) = line.strip_prefix("// Warning: ") { (Level::Warning, rest) - } else if let Some(rest) = line.strip_prefix("// error: ") { + } else if let Some(rest) = line.strip_prefix("// Error: ") { (Level::Error, rest) } else { continue; }; - diags.push((level, rest)); + fn num(s: &mut Scanner) -> u32 { + s.eat_while(|c| c.is_numeric()).parse().unwrap() + } + + let pos = |s: &mut Scanner| -> Pos { + let (delta, _, column) = (num(s), s.eat_assert(':'), num(s)); + let line = i as u32 + 1 + delta; + map.pos(Location { line, column }).unwrap() + }; + + let mut s = Scanner::new(rest); + let (start, _, end) = (pos(&mut s), s.eat_assert('-'), pos(&mut s)); + + diags.push(Diag::new(level, s.rest().trim()).with_span(start .. end)); } - let src = s.rest(); - let map = LineMap::new(src); - - let mut diags: Vec<_> = diags - .into_iter() - .map(|(level, rest)| { - fn pos(s: &mut Scanner, map: &LineMap) -> Pos { - let (line, _, column) = (num(s), s.eat_assert(':'), num(s)); - map.pos(Location { line, column }).unwrap() - } - - fn num(s: &mut Scanner) -> u32 { - s.eat_while(|c| c.is_numeric()).parse().unwrap() - } - - let mut s = Scanner::new(rest); - let (start, _, end) = - (pos(&mut s, &map), s.eat_assert('-'), pos(&mut s, &map)); - Diag::new(level, s.rest().trim()).with_span(start .. end) - }) - .collect(); - diags.sort_by_key(|d| d.span); - (src, compare_ref, map, diags) + (compare_ref, diags) } fn print_diag(diag: &Spanned, map: &LineMap) {