@@ -506,26 +506,94 @@ mod tests {
506506 assert_eq ! ( Token :: from_encoded( "~0~1" ) . unwrap( ) . encoded( ) , "~0~1" ) ;
507507 let t = Token :: from_encoded ( "a~1b" ) . unwrap ( ) ;
508508 assert_eq ! ( t. decoded( ) , "a/b" ) ;
509+
510+ let sub = String :: from ( "a/b" ) ;
511+ let err = Token :: from_encoded ( & sub) . unwrap_err ( ) ;
512+ let labels: Vec < _ > = err. labels ( & sub) . unwrap ( ) . into_iter ( ) . collect ( ) ;
513+ assert_eq ! ( labels, vec![ Label :: new( "invalid character" . into( ) , 1 , 1 ) ] ) ;
514+ let err = err. into_report ( sub) ;
515+ #[ cfg( feature = "miette" ) ]
516+ {
517+ let labels: Vec < _ > = miette:: Diagnostic :: labels ( & err)
518+ . unwrap ( )
519+ . into_iter ( )
520+ . collect ( ) ;
521+ assert_eq ! (
522+ labels,
523+ vec![ miette:: LabeledSpan :: new(
524+ Some ( "invalid character" . into( ) ) ,
525+ 1 ,
526+ 1
527+ ) ]
528+ ) ;
529+ }
530+ let ( err, _) = err. decompose ( ) ;
509531 assert_eq ! (
510- Token :: from_encoded ( "a/b" ) ,
511- Err ( EncodingError {
532+ err ,
533+ EncodingError {
512534 offset: 1 ,
513535 source: InvalidEncoding :: Slash
514- } )
536+ }
515537 ) ;
538+
539+ let sub = String :: from ( "a~a" ) ;
540+ let err = Token :: from_encoded ( & sub) . unwrap_err ( ) ;
541+ let labels: Vec < _ > = err. labels ( & sub) . unwrap ( ) . into_iter ( ) . collect ( ) ;
542+ assert_eq ! ( labels, vec![ Label :: new( "must be 0 or 1" . into( ) , 2 , 1 ) ] ) ;
543+ let err = err. into_report ( sub) ;
544+ #[ cfg( feature = "miette" ) ]
545+ {
546+ let labels: Vec < _ > = miette:: Diagnostic :: labels ( & err)
547+ . unwrap ( )
548+ . into_iter ( )
549+ . collect ( ) ;
550+ assert_eq ! (
551+ labels,
552+ vec![ miette:: LabeledSpan :: new(
553+ Some ( "must be 0 or 1" . into( ) ) ,
554+ 2 ,
555+ 1
556+ ) ]
557+ ) ;
558+ }
559+ let ( err, _) = err. decompose ( ) ;
516560 assert_eq ! (
517- Token :: from_encoded ( "a~a" ) ,
518- Err ( EncodingError {
561+ err ,
562+ EncodingError {
519563 offset: 2 ,
520564 source: InvalidEncoding :: Tilde
521- } )
565+ }
522566 ) ;
567+ let sub = String :: from ( "a~" ) ;
568+ let err = Token :: from_encoded ( & sub) . unwrap_err ( ) ;
569+ let labels: Vec < _ > = err. labels ( & sub) . unwrap ( ) . into_iter ( ) . collect ( ) ;
523570 assert_eq ! (
524- Token :: from_encoded( "a~" ) ,
525- Err ( EncodingError {
571+ labels,
572+ vec![ Label :: new( "incomplete escape sequence" . into( ) , 1 , 1 ) ]
573+ ) ;
574+ let err = err. into_report ( sub) ;
575+ #[ cfg( feature = "miette" ) ]
576+ {
577+ let labels: Vec < _ > = miette:: Diagnostic :: labels ( & err)
578+ . unwrap ( )
579+ . into_iter ( )
580+ . collect ( ) ;
581+ assert_eq ! (
582+ labels,
583+ vec![ miette:: LabeledSpan :: new(
584+ Some ( "incomplete escape sequence" . into( ) ) ,
585+ 1 ,
586+ 1
587+ ) ]
588+ ) ;
589+ }
590+ let ( err, _) = err. decompose ( ) ;
591+ assert_eq ! (
592+ err,
593+ EncodingError {
526594 offset: 2 ,
527595 source: InvalidEncoding :: Tilde
528- } )
596+ }
529597 ) ;
530598 }
531599
0 commit comments