Skip to content

Commit 45e768e

Browse files
committed
[#148] parse_between_expression 테스트코드 작성
1 parent 86b663a commit 45e768e

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

src/parser/test/expressions.rs

+86
Original file line numberDiff line numberDiff line change
@@ -1140,3 +1140,89 @@ fn test_parse_function_call_expression() {
11401140
}
11411141
}
11421142
}
1143+
1144+
#[test]
1145+
fn test_parse_between_expression() {
1146+
struct TestCase {
1147+
name: String,
1148+
a: SQLExpression,
1149+
input: Vec<Token>,
1150+
expected: SQLExpression,
1151+
want_error: bool,
1152+
}
1153+
1154+
let test_cases = vec![
1155+
TestCase {
1156+
name: "3 BETWEEN 1 AND 5".into(),
1157+
a: SQLExpression::Integer(3),
1158+
input: vec![
1159+
Token::Between,
1160+
Token::Integer(1),
1161+
Token::And,
1162+
Token::Integer(5),
1163+
],
1164+
expected: BetweenExpression {
1165+
a: SQLExpression::Integer(3),
1166+
x: SQLExpression::Integer(1),
1167+
y: SQLExpression::Integer(5),
1168+
}
1169+
.into(),
1170+
want_error: false,
1171+
},
1172+
TestCase {
1173+
name: "오류: 3 NOT".into(),
1174+
a: SQLExpression::Integer(3),
1175+
input: vec![Token::Not],
1176+
expected: Default::default(),
1177+
want_error: true,
1178+
},
1179+
TestCase {
1180+
name: "오류: 3 NOT DROP".into(),
1181+
a: SQLExpression::Integer(3),
1182+
input: vec![Token::Not, Token::Drop],
1183+
expected: Default::default(),
1184+
want_error: true,
1185+
},
1186+
TestCase {
1187+
name: "오류: 빈 토큰".into(),
1188+
a: SQLExpression::Integer(3),
1189+
input: vec![],
1190+
expected: Default::default(),
1191+
want_error: true,
1192+
},
1193+
TestCase {
1194+
name: "오류: AND".into(),
1195+
a: SQLExpression::Integer(3),
1196+
input: vec![Token::And],
1197+
expected: Default::default(),
1198+
want_error: true,
1199+
},
1200+
TestCase {
1201+
name: "오류: 1".into(),
1202+
a: SQLExpression::Integer(3),
1203+
input: vec![Token::Integer(1)],
1204+
expected: Default::default(),
1205+
want_error: true,
1206+
},
1207+
];
1208+
1209+
for t in test_cases {
1210+
let mut parser = Parser::new(t.input);
1211+
1212+
let got: Result<SQLExpression, crate::errors::RRDBError> =
1213+
parser.parse_between_expression(t.a, Default::default());
1214+
1215+
assert_eq!(
1216+
got.is_err(),
1217+
t.want_error,
1218+
"{}: want_error: {}, error: {:?}",
1219+
t.name,
1220+
t.want_error,
1221+
got.err()
1222+
);
1223+
1224+
if let Ok(statements) = got {
1225+
assert_eq!(statements, t.expected, "TC: {}", t.name);
1226+
}
1227+
}
1228+
}

0 commit comments

Comments
 (0)