@@ -3866,9 +3866,88 @@ bar
38663866 }
38673867
38683868 #[ test]
3869- #[ ignore = "Missing parser support for lookaround" ]
38703869 fn parse_lookbehinds ( ) {
3871- todo ! ( "write tests for lookbehinds" ) ;
3870+ assert_eq ! (
3871+ parser( r"(?<=)" ) . parse( ) ,
3872+ Ok ( Ast :: lookaround( ast:: LookAround {
3873+ span: span( 0 ..5 ) ,
3874+ ast: Box :: new( Ast :: empty( span( 4 ..4 ) ) ) ,
3875+ kind: ast:: LookAroundKind :: PositiveLookBehind
3876+ } ) )
3877+ ) ;
3878+ assert_eq ! (
3879+ parser( r"(?<=a)" ) . parse( ) ,
3880+ Ok ( Ast :: lookaround( ast:: LookAround {
3881+ span: span( 0 ..6 ) ,
3882+ ast: Box :: new( lit( 'a' , 4 ) ) ,
3883+ kind: ast:: LookAroundKind :: PositiveLookBehind
3884+ } ) )
3885+ ) ;
3886+ assert_eq ! (
3887+ parser( r"(?<!a)" ) . parse( ) ,
3888+ Ok ( Ast :: lookaround( ast:: LookAround {
3889+ span: span( 0 ..6 ) ,
3890+ ast: Box :: new( lit( 'a' , 4 ) ) ,
3891+ kind: ast:: LookAroundKind :: NegativeLookBehind
3892+ } ) )
3893+ ) ;
3894+ assert_eq ! (
3895+ parser( r"(?<=a|b)" ) . parse( ) ,
3896+ Ok ( Ast :: lookaround( ast:: LookAround {
3897+ span: span( 0 ..8 ) ,
3898+ ast: Box :: new( alt( 4 ..7 , vec![ lit( 'a' , 4 ) , lit( 'b' , 6 ) ] ) ) ,
3899+ kind: ast:: LookAroundKind :: PositiveLookBehind
3900+ } ) )
3901+ ) ;
3902+ assert_eq ! (
3903+ parser( r"(?<!a|b)" ) . parse( ) ,
3904+ Ok ( Ast :: lookaround( ast:: LookAround {
3905+ span: span( 0 ..8 ) ,
3906+ ast: Box :: new( alt( 4 ..7 , vec![ lit( 'a' , 4 ) , lit( 'b' , 6 ) ] ) ) ,
3907+ kind: ast:: LookAroundKind :: NegativeLookBehind
3908+ } ) )
3909+ ) ;
3910+ assert_eq ! (
3911+ parser( r"(?<=(?<!a))" ) . parse( ) ,
3912+ Ok ( Ast :: lookaround( ast:: LookAround {
3913+ span: span( 0 ..11 ) ,
3914+ ast: Box :: new( Ast :: lookaround( ast:: LookAround {
3915+ span: span( 4 ..10 ) ,
3916+ ast: Box :: new( lit( 'a' , 8 ) ) ,
3917+ kind: ast:: LookAroundKind :: NegativeLookBehind
3918+ } ) ) ,
3919+ kind: ast:: LookAroundKind :: PositiveLookBehind
3920+ } ) )
3921+ ) ;
3922+
3923+ assert_eq ! (
3924+ parser( r"(?<=a" ) . parse( ) . unwrap_err( ) ,
3925+ TestError {
3926+ span: span( 0 ..1 ) ,
3927+ kind: ast:: ErrorKind :: LookAroundUnclosed ,
3928+ }
3929+ ) ;
3930+ assert_eq ! (
3931+ parser( r"(?<!a" ) . parse( ) . unwrap_err( ) ,
3932+ TestError {
3933+ span: span( 0 ..1 ) ,
3934+ kind: ast:: ErrorKind :: LookAroundUnclosed ,
3935+ }
3936+ ) ;
3937+ assert_eq ! (
3938+ parser( r"(?<!a|b" ) . parse( ) . unwrap_err( ) ,
3939+ TestError {
3940+ span: span( 0 ..1 ) ,
3941+ kind: ast:: ErrorKind :: LookAroundUnclosed ,
3942+ }
3943+ ) ;
3944+ assert_eq ! (
3945+ parser( r"(?<!a|" ) . parse( ) . unwrap_err( ) ,
3946+ TestError {
3947+ span: span( 0 ..1 ) ,
3948+ kind: ast:: ErrorKind :: LookAroundUnclosed ,
3949+ }
3950+ ) ;
38723951 }
38733952
38743953 #[ test]
0 commit comments