Skip to content

Commit ff68f2f

Browse files
committed
[#148] parse_binary_expression 테스트코드 작성
1 parent 1ece9bf commit ff68f2f

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

src/parser/test/expressions.rs

+53
Original file line numberDiff line numberDiff line change
@@ -973,3 +973,56 @@ fn test_parse_parentheses_expression() {
973973
}
974974
}
975975
}
976+
977+
#[test]
978+
fn test_parse_binary_expression() {
979+
struct TestCase {
980+
name: String,
981+
lhs: SQLExpression,
982+
input: Vec<Token>,
983+
expected: SQLExpression,
984+
want_error: bool,
985+
}
986+
987+
let test_cases = vec![
988+
TestCase {
989+
name: "3 + 5".into(),
990+
lhs: SQLExpression::Integer(3),
991+
input: vec![Token::Operator(OperatorToken::Plus), Token::Integer(5)],
992+
expected: BinaryOperatorExpression {
993+
operator: BinaryOperator::Add,
994+
lhs: SQLExpression::Integer(3),
995+
rhs: SQLExpression::Integer(5),
996+
}
997+
.into(),
998+
want_error: false,
999+
},
1000+
TestCase {
1001+
name: "실패: 빈 토큰".into(),
1002+
lhs: SQLExpression::Integer(3),
1003+
input: vec![],
1004+
expected: Default::default(),
1005+
want_error: true,
1006+
},
1007+
];
1008+
1009+
for t in test_cases {
1010+
let mut parser = Parser::new(t.input);
1011+
1012+
let got: Result<SQLExpression, crate::errors::RRDBError> =
1013+
parser.parse_binary_expression(t.lhs, Default::default());
1014+
1015+
assert_eq!(
1016+
got.is_err(),
1017+
t.want_error,
1018+
"{}: want_error: {}, error: {:?}",
1019+
t.name,
1020+
t.want_error,
1021+
got.err()
1022+
);
1023+
1024+
if let Ok(statements) = got {
1025+
assert_eq!(statements, t.expected, "TC: {}", t.name);
1026+
}
1027+
}
1028+
}

0 commit comments

Comments
 (0)