@@ -2129,7 +2129,7 @@ fn unicode_cut_handling() {
21292129 . annotation ( AnnotationKind :: Primary . span ( 85 ..228 ) . label ( "annotation" ) ) ,
21302130 ) ,
21312131 ) ;
2132- let expected = str![ [ r#"
2132+ let expected_ascii = str![ [ r#"
21332133error: title
21342134 |
213521351 | version = "0.1.0"
@@ -2140,8 +2140,22 @@ error: title
214021405 | | ]
21412141 | |_^ annotation
21422142"# ] ] ;
2143- let renderer = Renderer :: plain ( ) ;
2144- assert_data_eq ! ( renderer. render( input) , expected) ;
2143+ let renderer_ascii = Renderer :: plain ( ) ;
2144+ assert_data_eq ! ( renderer_ascii. render( input. clone( ) ) , expected_ascii) ;
2145+
2146+ let expected_unicode = str![ [ r#"
2147+ error: title
2148+ │
2149+ 1 │ version = "0.1.0"
2150+ 2 │ # Ensure that the spans from toml handle utf-8 correctly
2151+ 3 │ authors = [
2152+ │ ┏━━━━━━━━━━━┛
2153+ 4 │ ┃ { name = "Z͑ͫ̓ͪ̂ͫ̽͏̴̙̤̞͉͚̯̞̠͍A̴̵̜̰͔ͫ͗͢L̠ͨͧͩ͘G̴̻͈͍͔̹̑͗̎̅͛́Ǫ̵̹̻̝̳͂̌̌͘", email = 1 }
2154+ 5 │ ┃ ]
2155+ ╰╴┗━┛ annotation
2156+ "# ] ] ;
2157+ let renderer_unicode = renderer_ascii. theme ( OutputTheme :: Unicode ) ;
2158+ assert_data_eq ! ( renderer_unicode. render( input) , expected_unicode) ;
21452159}
21462160
21472161#[ test]
@@ -2159,16 +2173,26 @@ fn unicode_cut_handling2() {
21592173 )
21602174 ) ;
21612175
2162- let expected = str![ [ r#"
2176+ let expected_ascii = str![ [ r#"
21632177error: expected item, found `?`
21642178 |
216521791 | ...的。这是宽的。这是宽的。这是宽的。这是宽的。这是宽的。*/?
21662180 | ^ expected item
21672181 = note: for a full list of items that can appear in modules, see <https://doc.rust-lang.org/reference/items.html>
21682182"# ] ] ;
21692183
2170- let renderer = Renderer :: plain ( ) ;
2171- assert_data_eq ! ( renderer. render( input) , expected) ;
2184+ let renderer_ascii = Renderer :: plain ( ) ;
2185+ assert_data_eq ! ( renderer_ascii. render( input. clone( ) ) , expected_ascii) ;
2186+
2187+ let expected_unicode = str![ [ r#"
2188+ error: expected item, found `?`
2189+ │
2190+ 1 │ …宽的。这是宽的。这是宽的。这是宽的。这是宽的。这是宽的。*/?
2191+ │ ━ expected item
2192+ ╰ note: for a full list of items that can appear in modules, see <https://doc.rust-lang.org/reference/items.html>
2193+ "# ] ] ;
2194+ let renderer_unicode = renderer_ascii. theme ( OutputTheme :: Unicode ) ;
2195+ assert_data_eq ! ( renderer_unicode. render( input) , expected_unicode) ;
21722196}
21732197
21742198#[ test]
@@ -2186,16 +2210,26 @@ fn unicode_cut_handling3() {
21862210 )
21872211 ) ;
21882212
2189- let expected = str![ [ r#"
2213+ let expected_ascii = str![ [ r#"
21902214error: expected item, found `?`
21912215 |
219222161 | ...。这是宽的。这是宽的。这是宽的...
21932217 | ^^ expected item
21942218 = note: for a full list of items that can appear in modules, see <https://doc.rust-lang.org/reference/items.html>
21952219"# ] ] ;
21962220
2197- let renderer = Renderer :: plain ( ) . term_width ( 43 ) ;
2198- assert_data_eq ! ( renderer. render( input) , expected) ;
2221+ let renderer_ascii = Renderer :: plain ( ) . term_width ( 43 ) ;
2222+ assert_data_eq ! ( renderer_ascii. render( input. clone( ) ) , expected_ascii) ;
2223+
2224+ let expected_unicode = str![ [ r#"
2225+ error: expected item, found `?`
2226+ │
2227+ 1 │ …的。这是宽的。这是宽的。这是宽的。…
2228+ │ ━━ expected item
2229+ ╰ note: for a full list of items that can appear in modules, see <https://doc.rust-lang.org/reference/items.html>
2230+ "# ] ] ;
2231+ let renderer_unicode = renderer_ascii. theme ( OutputTheme :: Unicode ) ;
2232+ assert_data_eq ! ( renderer_unicode. render( input) , expected_unicode) ;
21992233}
22002234
22012235#[ test]
@@ -2213,16 +2247,26 @@ fn unicode_cut_handling4() {
22132247 )
22142248 ) ;
22152249
2216- let expected = str![ [ r#"
2250+ let expected_ascii = str![ [ r#"
22172251error: expected item, found `?`
22182252 |
221922531 | ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa*/?
22202254 | ^ expected item
22212255 = note: for a full list of items that can appear in modules, see <https://doc.rust-lang.org/reference/items.html>
22222256"# ] ] ;
22232257
2224- let renderer = Renderer :: plain ( ) ;
2225- assert_data_eq ! ( renderer. render( input) , expected) ;
2258+ let renderer_ascii = Renderer :: plain ( ) ;
2259+ assert_data_eq ! ( renderer_ascii. render( input. clone( ) ) , expected_ascii) ;
2260+
2261+ let expected_unicode = str![ [ r#"
2262+ error: expected item, found `?`
2263+ │
2264+ 1 │ …aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa*/?
2265+ │ ━ expected item
2266+ ╰ note: for a full list of items that can appear in modules, see <https://doc.rust-lang.org/reference/items.html>
2267+ "# ] ] ;
2268+ let renderer_unicode = renderer_ascii. theme ( OutputTheme :: Unicode ) ;
2269+ assert_data_eq ! ( renderer_unicode. render( input) , expected_unicode) ;
22262270}
22272271
22282272#[ test]
@@ -2252,7 +2296,7 @@ fn main() {
22522296 ) ,
22532297 ) ;
22542298
2255- let expected = str![ [ r#"
2299+ let expected_ascii = str![ [ r#"
22562300error[E0308]: mismatched types
22572301 --> $DIR/non-whitespace-trimming-unicode.rs:4:415
22582302 |
@@ -2262,8 +2306,20 @@ LL | ...♧♨♩♪♫♬♭♮♯♰♱♲♳♴♵♶♷♸♹♺♻♼♽♾
22622306 | expected due to this
22632307"# ] ] ;
22642308
2265- let renderer = Renderer :: plain ( ) . anonymized_line_numbers ( true ) ;
2266- assert_data_eq ! ( renderer. render( input) , expected) ;
2309+ let renderer_ascii = Renderer :: plain ( ) . anonymized_line_numbers ( true ) ;
2310+ assert_data_eq ! ( renderer_ascii. render( input. clone( ) ) , expected_ascii) ;
2311+
2312+ let expected_unicode = str![ [ r#"
2313+ error[E0308]: mismatched types
2314+ ╭▸ $DIR/non-whitespace-trimming-unicode.rs:4:415
2315+ │
2316+ LL │ …♥♦♧♨♩♪♫♬♭♮♯♰♱♲♳♴♵♶♷♸♹♺♻♼♽♾♿⚀⚁⚂⚃⚄⚅⚆⚈⚉4"; let _: () = 42; let _: &str = "🦀☀☁☂☃☄★☆☇☈☉☊☋☌☍☎☏☐☑☒☓ ☖☗☘☙☚☛☜☝☞☟☠☡☢☣☤☥☦☧☨☩☪☫☬☭☮☯☰☱☲☳☴☵☶☷☸☹…
2317+ │ ┬─ ━━ expected `()`, found integer
2318+ │ │
2319+ ╰╴ expected due to this
2320+ "# ] ] ;
2321+ let renderer_unicode = renderer_ascii. theme ( OutputTheme :: Unicode ) ;
2322+ assert_data_eq ! ( renderer_unicode. render( input) , expected_unicode) ;
22672323}
22682324
22692325#[ test]
@@ -2311,7 +2367,27 @@ fn main() {
23112367 ) ,
23122368 ) ;
23132369
2314- let expected = str![ [ r#"
2370+ let expected_ascii = str![ [ r#"
2371+ error[E0369]: cannot add `&str` to `&str`
2372+ --> $DIR/non-1-width-unicode-multiline-label.rs:7:260
2373+ |
2374+ LL | ...࿉࿊࿋࿌࿎࿏࿐࿑࿒࿓࿔࿕࿖࿗࿘࿙࿚"; let _a = unicode_is_fun + " really fun!";
2375+ | -------------- ^ -------------- &str
2376+ | | |
2377+ | | `+` cannot be used to concatenate two `&str` strings
2378+ | &str
2379+ |
2380+ = note: string concatenation requires an owned `String` on the left
2381+ help: create an owned `String` from a string reference
2382+ |
2383+ LL | let _ = "ༀ༁༂༃༄༅༆༇༈༉༊་༌།༎༏༐༑༒༓༔༕༖༗༘༙༚༛༜༝༞༟༠༡༢༣༤༥༦༧༨༩༪༫༬༭༮༯༰༱༲༳༴༵༶༷༸༹༺༻༼༽༾༿ཀཁགགྷངཅཆཇཉཊཋཌཌྷཎཏཐདདྷནཔཕབབྷམཙཚཛཛྷཝཞཟའཡརལཤཥསཧཨཀྵཪཫཬཱཱཱིིུུྲྀཷླྀཹེཻོཽཾཿ྄ཱྀྀྂྃ྅྆྇ྈྉྊྋྌྍྎྏྐྑྒྒྷྔྕྖྗྙྚྛྜྜྷྞྟྠྡྡྷྣྤྥྦྦྷྨྩྪྫྫྷྭྮྯྰྱྲླྴྵྶྷྸྐྵྺྻྼ྾྿࿀࿁࿂࿃࿄࿅࿆࿇࿈࿉࿊࿋࿌࿎࿏࿐࿑࿒࿓࿔࿕࿖࿗࿘࿙࿚"; let _a = unicode_is_fun.to_owned() + " really fun!";
2384+ | +++++++++++
2385+ "# ] ] ;
2386+
2387+ let renderer_ascii = Renderer :: plain ( ) . anonymized_line_numbers ( true ) ;
2388+ assert_data_eq ! ( renderer_ascii. render( input. clone( ) ) , expected_ascii) ;
2389+
2390+ let expected_unicode = str![ [ r#"
23152391error[E0369]: cannot add `&str` to `&str`
23162392 ╭▸ $DIR/non-1-width-unicode-multiline-label.rs:7:260
23172393 │
@@ -2328,10 +2404,8 @@ LL │ let _ = "ༀ༁༂༃༄༅༆༇༈༉༊་༌།༎༏༐༑༒༓
23282404 ╰╴ +++++++++++
23292405"# ] ] ;
23302406
2331- let renderer = Renderer :: plain ( )
2332- . anonymized_line_numbers ( true )
2333- . theme ( OutputTheme :: Unicode ) ;
2334- assert_data_eq ! ( renderer. render( input) , expected) ;
2407+ let renderer_unicode = renderer_ascii. theme ( OutputTheme :: Unicode ) ;
2408+ assert_data_eq ! ( renderer_unicode. render( input) , expected_unicode) ;
23352409}
23362410
23372411#[ test]
@@ -2367,7 +2441,7 @@ fn foo() {
23672441 . element ( Level :: NOTE . title ( "this error originates in the macro `include` (in Nightly builds, run with -Z macro-backtrace for more info)" ) ) ,
23682442 ) ;
23692443
2370- let expected = str![ [ r#"
2444+ let expected_ascii = str![ [ r#"
23712445error: couldn't read `$DIR/not-utf8.bin`: stream did not contain valid UTF-8
23722446 --> $DIR/not-utf8.rs:6:5
23732447 |
@@ -2382,6 +2456,23 @@ LL | �|�␂!5�cc␕␂�Ӻi��WWj�ȥ�'�}�␒�J�ȉ��W
23822456 = note: this error originates in the macro `include` (in Nightly builds, run with -Z macro-backtrace for more info)
23832457"# ] ] ;
23842458
2385- let renderer = Renderer :: plain ( ) . anonymized_line_numbers ( true ) ;
2386- assert_data_eq ! ( renderer. render( input) , expected) ;
2459+ let renderer_ascii = Renderer :: plain ( ) . anonymized_line_numbers ( true ) ;
2460+ assert_data_eq ! ( renderer_ascii. render( input. clone( ) ) , expected_ascii) ;
2461+
2462+ let expected_unicode = str![ [ r#"
2463+ error: couldn't read `$DIR/not-utf8.bin`: stream did not contain valid UTF-8
2464+ ╭▸ $DIR/not-utf8.rs:6:5
2465+ │
2466+ LL │ include!("not-utf8.bin");
2467+ │ ━━━━━━━━━━━━━━━━━━━━━━━━
2468+ ╰╴
2469+ note: byte `193` is not valid utf-8
2470+ ╭▸ $DIR/not-utf8.bin:1:1
2471+ │
2472+ LL │ �|�␂!5�cc␕␂�Ӻi��WWj�ȥ�'�}�␒�J�ȉ��W�␞O�@����␜w�V���LO����␔[ ␃_�'���SQ�~ذ��ų&��- ��lN~��!@␌ _#���kQ��h�␝�:�␜␇�
2473+ │ ━
2474+ ╰ note: this error originates in the macro `include` (in Nightly builds, run with -Z macro-backtrace for more info)
2475+ "# ] ] ;
2476+ let renderer_unicode = renderer_ascii. theme ( OutputTheme :: Unicode ) ;
2477+ assert_data_eq ! ( renderer_unicode. render( input) , expected_unicode) ;
23872478}
0 commit comments