Skip to content

Commit

Permalink
Test parsing of mismatched quotes
Browse files Browse the repository at this point in the history
  • Loading branch information
fwcd committed Mar 24, 2024
1 parent 88c5513 commit ef6120a
Showing 1 changed file with 22 additions and 13 deletions.
35 changes: 22 additions & 13 deletions src/line/parse.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,8 @@ mod tests {

use super::Statement;

fn parse(line: &str) -> Statement {
Result::<Statement>::from_iter(lex(line)).unwrap()
fn parse(line: &str) -> Result<Statement> {
Result::<Statement>::from_iter(lex(line))
}

fn invocation(args: &[&str], redirect: Option<&str>) -> Statement {
Expand All @@ -76,24 +76,33 @@ mod tests {

#[test]
fn whitespace() {
assert_eq!(parse(""), invocation(&[], None));
assert_eq!(parse(" "), invocation(&[], None));
assert_eq!(parse("").unwrap(), invocation(&[], None));
assert_eq!(parse(" ").unwrap(), invocation(&[], None));
}

#[test]
fn simple_commands() {
assert_eq!(parse("echo"), invocation(&["echo"], None));
assert_eq!(parse("echo 123"), invocation(&["echo", "123"], None));
assert_eq!(parse("echo \"123\""), invocation(&["echo", "123"], None));
assert_eq!(parse("echo").unwrap(), invocation(&["echo"], None));
assert_eq!(parse("echo 123").unwrap(), invocation(&["echo", "123"], None));
assert_eq!(parse("echo \"123\"").unwrap(), invocation(&["echo", "123"], None));
}

#[test]
fn redirects() {
assert_eq!(parse("cat hello >123"), invocation(&["cat", "hello"], Some("123")));
assert_eq!(parse("echo 123 > /dev/null"), invocation(&["echo", "123"], Some("/dev/null")));
assert_eq!(parse("\"\">a/b"), invocation(&[""], Some("a/b")));
assert_eq!(parse("\"\">a/b>c/d"), invocation(&[""], Some("c/d")));
assert_eq!(parse("\"\">a/b > c/d"), invocation(&[""], Some("c/d")));
assert_eq!(parse(r#"echo '{"x": 23,"y":3}' > /dev/null"#), invocation(&["echo", "{\"x\": 23,\"y\":3}"], Some("/dev/null")));
assert_eq!(parse("cat hello >123").unwrap(), invocation(&["cat", "hello"], Some("123")));
assert_eq!(parse("echo 123 > /dev/null").unwrap(), invocation(&["echo", "123"], Some("/dev/null")));
assert_eq!(parse("\"\">a/b").unwrap(), invocation(&[""], Some("a/b")));
assert_eq!(parse("\"\">a/b>c/d").unwrap(), invocation(&[""], Some("c/d")));
assert_eq!(parse("\"\">a/b > c/d").unwrap(), invocation(&[""], Some("c/d")));
assert_eq!(parse(r#"echo '{"x": 23,"y":3}' > /dev/null"#).unwrap(), invocation(&["echo", "{\"x\": 23,\"y\":3}"], Some("/dev/null")));
}

#[test]
fn quotes() {
assert!(parse("'").is_err());
assert!(parse(r#"""#).is_err());
assert!(parse(r#" "'' "" "#).is_err());
assert_eq!(parse("''").unwrap(), invocation(&[""], None));
assert_eq!(parse(r#" "''" "" "#).unwrap(), invocation(&["''", ""], None));
}
}

0 comments on commit ef6120a

Please sign in to comment.