Skip to content

Commit b6444da

Browse files
committed
[#148] parse_unary_expression 테스트코드 작성
1 parent fda1357 commit b6444da

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

src/parser/test/expressions.rs

+63
Original file line numberDiff line numberDiff line change
@@ -802,3 +802,66 @@ fn test_parse_expression() {
802802
}
803803
}
804804
}
805+
806+
#[test]
807+
fn test_parse_unary_expression() {
808+
struct TestCase {
809+
name: String,
810+
operator: UnaryOperator,
811+
input: Vec<Token>,
812+
expected: SQLExpression,
813+
want_error: bool,
814+
}
815+
816+
let test_cases = vec![
817+
TestCase {
818+
name: "! 3 BETWEEN 2 AND 5".into(),
819+
operator: UnaryOperator::Not,
820+
input: vec![
821+
Token::Integer(3),
822+
Token::Between,
823+
Token::Integer(2),
824+
Token::And,
825+
Token::Integer(5),
826+
],
827+
expected: BetweenExpression {
828+
a: UnaryOperatorExpression {
829+
operator: UnaryOperator::Not,
830+
operand: SQLExpression::Integer(3),
831+
}
832+
.into(),
833+
x: SQLExpression::Integer(2),
834+
y: SQLExpression::Integer(5),
835+
}
836+
.into(),
837+
want_error: false,
838+
},
839+
TestCase {
840+
name: "실패: 빈 토큰".into(),
841+
operator: UnaryOperator::Not,
842+
input: vec![],
843+
expected: Default::default(),
844+
want_error: true,
845+
},
846+
];
847+
848+
for t in test_cases {
849+
let mut parser = Parser::new(t.input);
850+
851+
let got: Result<SQLExpression, crate::errors::RRDBError> =
852+
parser.parse_unary_expression(t.operator, Default::default());
853+
854+
assert_eq!(
855+
got.is_err(),
856+
t.want_error,
857+
"{}: want_error: {}, error: {:?}",
858+
t.name,
859+
t.want_error,
860+
got.err()
861+
);
862+
863+
if let Ok(statements) = got {
864+
assert_eq!(statements, t.expected, "TC: {}", t.name);
865+
}
866+
}
867+
}

0 commit comments

Comments
 (0)