Extend tests for new search parsing
(Also fix indentation)
This commit is contained in:
parent
ae01a5b3a2
commit
a16d271eb0
@ -592,7 +592,7 @@ mod test {
|
||||
})]
|
||||
);
|
||||
|
||||
// partially quoted text should handle escaping the same way
|
||||
// escaping is independent of quotation
|
||||
assert_eq!(
|
||||
parse(r#""field:va\"lue""#)?,
|
||||
vec![Search(SingleField {
|
||||
@ -602,13 +602,44 @@ mod test {
|
||||
})]
|
||||
);
|
||||
assert_eq!(parse(r#""field:va\"lue""#)?, parse(r#"field:"va\"lue""#)?,);
|
||||
assert_eq!(parse(r#""field:va\"lue""#)?, parse(r#"field:va\"lue"#)?,);
|
||||
|
||||
// any character should be escapable in quotes
|
||||
// only \":()*_ are escapable
|
||||
assert!(parse(r"\").is_err());
|
||||
assert!(parse(r"\a").is_err());
|
||||
assert!(parse(r"\%").is_err());
|
||||
assert_eq!(
|
||||
parse(r#""re:\btest""#)?,
|
||||
vec![Search(Regex(r"\btest".into()))]
|
||||
parse(r#"\\\"\:\(\)\*\_"#)?,
|
||||
vec![Search(UnqualifiedText(r#"\\":()*\_"#.into())),]
|
||||
);
|
||||
|
||||
// escaping parentheses is optional (only) inside quotes
|
||||
assert_eq!(parse(r#""\)\(""#), parse(r#"")(""#));
|
||||
assert!(parse(")(").is_err());
|
||||
|
||||
// escaping : is optional if it is preceded by another :
|
||||
assert!(parse(":test").is_err());
|
||||
assert!(parse(":").is_err());
|
||||
assert_eq!(parse("field:val:ue"), parse(r"field:val\:ue"));
|
||||
assert_eq!(parse(r#""field:val:ue""#), parse(r"field:val\:ue"));
|
||||
assert_eq!(parse(r#"field:"val:ue""#), parse(r"field:val\:ue"));
|
||||
|
||||
// any character should be escapable on the right side of re:
|
||||
assert_eq!(
|
||||
parse(r#""re:\btest\%""#)?,
|
||||
vec![Search(Regex(r"\btest\%".into()))]
|
||||
);
|
||||
|
||||
// no exceptions for escaping "
|
||||
assert_eq!(
|
||||
parse(r#"re:te\"st"#)?,
|
||||
vec![Search(Regex(r#"te"st"#.into()))]
|
||||
);
|
||||
assert!(parse(r#"re:te"st"#).is_err());
|
||||
|
||||
// spaces are optional if node separation is clear
|
||||
assert_eq!(parse(r#"a"b"(c)"#)?, parse("a b (c)")?);
|
||||
|
||||
assert_eq!(parse("added:3")?, vec![Search(AddedInDays(3))]);
|
||||
assert_eq!(
|
||||
parse("card:front")?,
|
||||
@ -636,6 +667,10 @@ mod test {
|
||||
vec![Search(NoteType(Text("basic".into())))]
|
||||
);
|
||||
assert_eq!(parse("tag:hard")?, vec![Search(Tag("hard".to_string()))]);
|
||||
// wildcards in tags don't match whitespace
|
||||
assert_eq!(parse("tag:ha_d")?, vec![Search(Tag(r"ha\Sd".to_string()))]);
|
||||
assert_eq!(parse("tag:h*d")?, vec![Search(Tag(r"h\S*d".to_string()))]);
|
||||
|
||||
assert_eq!(
|
||||
parse("nid:1237123712,2,3")?,
|
||||
vec![Search(NoteIDs("1237123712,2,3".into()))]
|
||||
|
@ -192,15 +192,15 @@ impl SqlWriter<'_> {
|
||||
if s.contains(" ") {
|
||||
write!(self.sql, "false").unwrap();
|
||||
} else {
|
||||
match s.as_str() {
|
||||
"none" => write!(self.sql, "n.tags = ''").unwrap(),
|
||||
r"\S*" => write!(self.sql, "true").unwrap(),
|
||||
_ => {
|
||||
write!(self.sql, "n.tags regexp ?").unwrap();
|
||||
self.args.push(format!("(?i).* {} .*", s));
|
||||
match s.as_str() {
|
||||
"none" => write!(self.sql, "n.tags = ''").unwrap(),
|
||||
r"\S*" => write!(self.sql, "true").unwrap(),
|
||||
_ => {
|
||||
write!(self.sql, "n.tags regexp ?").unwrap();
|
||||
self.args.push(format!("(?i).* {} .*", s));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user