From 87659987d86bcb2a6e2ad601df355eb05128a522 Mon Sep 17 00:00:00 2001 From: Paul Masurel Date: Wed, 3 Aug 2016 22:31:40 +0900 Subject: [PATCH] add more test to query parser --- src/query/multi_term_query.rs | 2 ++ src/query/query_parser.rs | 37 +++++++++++++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/query/multi_term_query.rs b/src/query/multi_term_query.rs index ba43150d6..69d8323a9 100644 --- a/src/query/multi_term_query.rs +++ b/src/query/multi_term_query.rs @@ -17,6 +17,7 @@ use fastfield::U32FastFieldReader; use ScoredDoc; +#[derive(Eq, PartialEq, Debug)] pub struct MultiTermQuery { terms: Vec, } @@ -52,6 +53,7 @@ impl Query for MultiTermQuery { } } + impl MultiTermQuery { diff --git a/src/query/query_parser.rs b/src/query/query_parser.rs index e964e51a3..a6b990c4a 100644 --- a/src/query/query_parser.rs +++ b/src/query/query_parser.rs @@ -20,6 +20,7 @@ pub struct QueryParser { default_fields: Vec, } +#[derive(Eq, PartialEq, Debug)] pub enum StandardQuery { MultiTerm(MultiTermQuery), } @@ -147,10 +148,13 @@ pub fn query_language(input: State<&str>) -> ParseResult, &str> mod tests { use combine::*; + use schema::*; + use query::MultiTermQuery; use super::*; + #[test] - pub fn test_query_parser() { + pub fn test_query_grammar() { let mut query_parser = parser(query_language); assert_eq!(query_parser.parse("abc:toto").unwrap().0, vec!(Literal::WithField(String::from("abc"), String::from("toto")))); @@ -176,7 +180,7 @@ mod tests { } #[test] - pub fn test_error() { + pub fn test_invalid_queries() { let mut query_parser = parser(query_language); println!("{:?}", query_parser.parse("ab!c:")); assert!(query_parser.parse("ab!c:").is_err()); @@ -186,5 +190,34 @@ mod tests { assert!(query_parser.parse(":field").is_err()); assert!(query_parser.parse("f:@e!e").is_err()); } + + #[test] + pub fn test_query_parser() { + let mut schema = Schema::new(); + let text_field = schema.add_text_field("text", STRING); + let title_field = schema.add_text_field("title", STRING); + let author_field = schema.add_text_field("author", STRING); + let query_parser = QueryParser::new(schema, vec!(text_field, author_field)); + assert!(query_parser.parse_query("a:b").is_err()); + { + let terms = vec!(Term::from_field_text(title_field, "abctitle")); + let query = StandardQuery::MultiTerm(MultiTermQuery::new(terms)); + assert_eq!( + query_parser.parse_query("title:abctitle").unwrap(), + query + ); + } + { + let terms = vec!( + Term::from_field_text(text_field, "abctitle"), + Term::from_field_text(author_field, "abctitle"), + ); + let query = StandardQuery::MultiTerm(MultiTermQuery::new(terms)); + assert_eq!( + query_parser.parse_query("abctitle").unwrap(), + query + ); + } + } }