@@ -977,4 +977,83 @@ mod tests {
977977 assert_eq ! ( tag. get( "TRACKNUMBER" ) , Some ( "01" ) ) ;
978978 assert_eq ! ( tag. get( "TRACKTOTAL" ) , Some ( "05" ) ) ;
979979 }
980+
981+ // case DISCNUMBER=01/05
982+ #[ test_log:: test]
983+ fn opus_issue_543 ( ) {
984+ let mut comments = VorbisComments :: new ( ) ;
985+ comments. insert ( String :: from ( "DISCNUMBER" ) , String :: from ( "01/05" ) ) ;
986+
987+ let mut comments_bytes = Vec :: new ( ) ;
988+ comments
989+ . dump_to ( & mut comments_bytes, WriteOptions :: default ( ) )
990+ . unwrap ( ) ;
991+
992+ let mut reader = Cursor :: new ( & comments_bytes) ;
993+ let tag = crate :: ogg:: read:: read_comments (
994+ & mut reader,
995+ comments_bytes. len ( ) as u64 ,
996+ ParseOptions :: new ( )
997+ . parsing_mode ( ParsingMode :: Strict )
998+ . read_cover_art ( false ) ,
999+ )
1000+ . unwrap ( ) ;
1001+
1002+ assert_eq ! ( tag. disk( ) , Some ( 1 ) ) ;
1003+ assert_eq ! ( tag. disk_total( ) , Some ( 5 ) ) ;
1004+ }
1005+
1006+ // case DISCNUMBER=01/05 disable implicit_conversions
1007+ #[ test_log:: test]
1008+ fn opus_disc_disable_implicit_conversions ( ) {
1009+ let mut comments = VorbisComments :: new ( ) ;
1010+ comments. insert ( String :: from ( "DISCNUMBER" ) , String :: from ( "01/05" ) ) ;
1011+
1012+ let mut comments_bytes = Vec :: new ( ) ;
1013+ comments
1014+ . dump_to ( & mut comments_bytes, WriteOptions :: default ( ) )
1015+ . unwrap ( ) ;
1016+
1017+ let mut reader = Cursor :: new ( & comments_bytes) ;
1018+ let tag = crate :: ogg:: read:: read_comments (
1019+ & mut reader,
1020+ comments_bytes. len ( ) as u64 ,
1021+ ParseOptions :: new ( )
1022+ . parsing_mode ( ParsingMode :: Strict )
1023+ . implicit_conversions ( false )
1024+ . read_cover_art ( false ) ,
1025+ )
1026+ . unwrap ( ) ;
1027+
1028+ assert_eq ! ( tag. disk( ) , None ) ;
1029+ assert_eq ! ( tag. disk_total( ) , None ) ;
1030+ assert_eq ! ( tag. get( "DISCNUMBER" ) , Some ( "01/05" ) ) ;
1031+ }
1032+
1033+ // case track number and total with leading 0
1034+ #[ test_log:: test]
1035+ fn opus_disc_leading_0 ( ) {
1036+ let mut comments = VorbisComments :: new ( ) ;
1037+ comments. insert ( String :: from ( "DISCNUMBER" ) , String :: from ( "01" ) ) ;
1038+ comments. insert ( String :: from ( "DISCTOTAL" ) , String :: from ( "05" ) ) ;
1039+
1040+ let mut comments_bytes = Vec :: new ( ) ;
1041+ comments
1042+ . dump_to ( & mut comments_bytes, WriteOptions :: default ( ) )
1043+ . unwrap ( ) ;
1044+
1045+ let mut reader = Cursor :: new ( & comments_bytes) ;
1046+ let tag = crate :: ogg:: read:: read_comments (
1047+ & mut reader,
1048+ comments_bytes. len ( ) as u64 ,
1049+ ParseOptions :: new ( )
1050+ . parsing_mode ( ParsingMode :: Strict )
1051+ . implicit_conversions ( false )
1052+ . read_cover_art ( false ) ,
1053+ )
1054+ . unwrap ( ) ;
1055+
1056+ assert_eq ! ( tag. get( "DISCNUMBER" ) , Some ( "01" ) ) ;
1057+ assert_eq ! ( tag. get( "DISCTOTAL" ) , Some ( "05" ) ) ;
1058+ }
9801059}
0 commit comments