Skip to content

Commit 8352a9e

Browse files
committed
Add tests for parsing lookbehinds
1 parent 71c1a90 commit 8352a9e

File tree

1 file changed

+81
-2
lines changed

1 file changed

+81
-2
lines changed

regex-syntax/src/ast/parse.rs

Lines changed: 81 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)