@@ -973,3 +973,56 @@ fn test_parse_parentheses_expression() {
973
973
}
974
974
}
975
975
}
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