diff --git a/src/parser/test/other.rs b/src/parser/test/other.rs index e1915ca..6c2fbf8 100644 --- a/src/parser/test/other.rs +++ b/src/parser/test/other.rs @@ -74,6 +74,83 @@ fn test_parse_show_query() { } } +#[test] +fn test_parse_desc_query() { + struct TestCase { + name: String, + input: Vec, + context: ParserContext, + expected: SQLStatement, + want_error: bool, + } + + let test_cases = vec![ + TestCase { + name: "Desc Table".into(), + input: vec![Token::Identifier("asdf".into())], + context: Default::default(), + expected: DescTableQuery { + table_name: TableName { + database_name: None, + table_name: "asdf".into(), + }, + } + .into(), + want_error: false, + }, + TestCase { + name: "Desc Table with Database".into(), + input: vec![ + Token::Identifier("rrdb".into()), + Token::Period, + Token::Identifier("asdf".into()), + ], + context: Default::default(), + expected: DescTableQuery { + table_name: TableName { + database_name: Some("rrdb".into()), + table_name: "asdf".into(), + }, + } + .into(), + want_error: false, + }, + TestCase { + name: "오류: 빈 토큰".into(), + input: vec![], + context: Default::default(), + expected: Default::default(), + want_error: true, + }, + TestCase { + name: "오류: DELETe".into(), + input: vec![Token::Delete], + context: Default::default(), + expected: Default::default(), + want_error: true, + }, + ]; + + for t in test_cases { + let mut parser = Parser::new(t.input); + + let got = parser.parse_desc_query(t.context); + + 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.into(), "TC: {}", t.name); + } + } +} + #[test] pub fn show_databases_2() { let text = r#" @@ -109,25 +186,3 @@ pub fn use_databases_1() { vec![expected.into()], ); } - -#[test] -pub fn desc_table_1() { - let text = r#" - desc asdf; - "# - .to_owned(); - - let mut parser = Parser::with_string(text).unwrap(); - - let expected = DescTableQuery { - table_name: TableName { - database_name: None, - table_name: "asdf".into(), - }, - }; - - assert_eq!( - parser.parse(ParserContext::default()).unwrap(), - vec![expected.into()], - ); -}