Skip to content

Commit

Permalink
[#142] parse_select_item 테스트코드 작성
Browse files Browse the repository at this point in the history
  • Loading branch information
myyrakle committed Jul 29, 2024
1 parent c871b1b commit 33bd79a
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/ast/dml/parts/select_item.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ pub struct SelectWildCard {
pub alias: Option<String>,
}

#[derive(Deserialize, Serialize, Clone, Debug, PartialEq)]
#[derive(Deserialize, Serialize, Clone, Debug, PartialEq, Default)]
pub struct SelectItem {
pub item: Option<SQLExpression>, // select 요소
pub alias: Option<String>, // as 절이 있을 경우 alias 정보
Expand Down
71 changes: 71 additions & 0 deletions src/parser/test/select.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1788,3 +1788,74 @@ fn test_select_query() {
}
}
}

#[test]
fn test_parse_select_item() {
struct TestCase {
name: String,
input: Vec<Token>,
expected: SelectItem,
want_error: bool,
}

let test_cases = vec![
TestCase {
name: "1".into(),
input: vec![Token::Integer(1)],
expected: SelectItem::builder()
.set_item(SQLExpression::Integer(1))
.build(),
want_error: false,
},
TestCase {
name: "1 as one".into(),
input: vec![
Token::Integer(1),
Token::As,
Token::Identifier("one".into()),
],
expected: SelectItem::builder()
.set_item(SQLExpression::Integer(1))
.set_alias("one".into())
.build(),
want_error: false,
},
TestCase {
name: "실패: 1 as".into(),
input: vec![Token::Integer(1), Token::As],
expected: Default::default(),
want_error: true,
},
TestCase {
name: "실패: 1 as SELECT".into(),
input: vec![Token::Integer(1), Token::As, Token::Select],
expected: Default::default(),
want_error: true,
},
TestCase {
name: "실패: 빈 토큰".into(),
input: vec![],
expected: Default::default(),
want_error: true,
},
];

for t in test_cases {
let mut parser = Parser::new(t.input);

let got = parser.parse_select_item(Default::default());

assert_eq!(
got.is_err(),
t.want_error,
"{}: want_error: {}, error: {:?}",
t.name,
t.want_error,
got.err()
);

if let Ok(statements) = got {
assert_eq!(statements, t.expected, "TC: {}", t.name);
}
}
}

0 comments on commit 33bd79a

Please sign in to comment.