#![cfg(test)] use assert_cmd::Command; use assert_fs::{fixture::FileWriteStr, NamedTempFile}; use std::fs::read_to_string; use tempfile::tempdir; use unindent::unindent; #[test] #[cfg_attr(miri, ignore)] fn cli_file_stdout_test() -> anyhow::Result<()> { let mut command = Command::cargo_bin("melody")?; let melody_file = NamedTempFile::new("test.mdy")?; let source = r#" /* comment */ 5 of 'A\''; match { capture test { "x"; "y"; } } `[abc]`; // comment either { "a\""; "b"; ; } some of "a"; "#; let expected_output = "(?:A'){5}(?:(?xy))[abc](?:a\"|b|.)a+\n"; melody_file.write_str(&unindent(source))?; command.arg(melody_file.path()).assert().stdout(expected_output); Ok(()) } #[test] #[cfg_attr(miri, ignore)] fn cli_stdin_stdout_test() -> anyhow::Result<()> { let mut command = Command::cargo_bin("melody")?; let source = r#" some of "a"; some of "b"; "#; let expected_output = "a+b+\n"; command.write_stdin(source).arg("-").assert().stdout(expected_output); Ok(()) } #[test] #[cfg_attr(miri, ignore)] fn cli_stdin_test_test() -> anyhow::Result<()> { let mut command = Command::cargo_bin("melody")?; let source = r#" some of "a"; some of "b"; "#; let expected_output = "'aabb' matched\n"; command .arg("-t") .arg("aabb") .write_stdin(source) .assert() .stdout(expected_output); Ok(()) } #[test] #[cfg_attr(miri, ignore)] fn cli_stdin_unmatching_test_test() -> anyhow::Result<()> { let mut command = Command::cargo_bin("melody")?; let source = r#" some of "a"; some of "b"; "#; let expected_output = "'zzz' did not match\n"; command .arg("-t") .arg("zzz") .write_stdin(source) .assert() .stdout(expected_output); Ok(()) } #[test] #[cfg_attr(miri, ignore)] fn cli_stdin_stdout_no_hyphen_test() -> anyhow::Result<()> { let mut command = Command::cargo_bin("melody")?; let source = r#" some of "a"; some of "b"; "#; let expected_output = "a+b+\n"; command.write_stdin(source).assert().stdout(expected_output); Ok(()) } #[test] #[cfg_attr(miri, ignore)] fn cli_file_test() -> anyhow::Result<()> { let mut command = Command::cargo_bin("melody")?; let melody_file = NamedTempFile::new("test.mdy")?; let dir = tempdir()?; let source = r#" /* comment */ 5 of 'A\''; match { capture test { "x"; "y"; } } `[abc]`; // comment either { "a\""; "b"; ; } some of "a"; "#; let expected_output = "(?:A'){5}(?:(?xy))[abc](?:a\"|b|.)a+"; melody_file.write_str(&unindent(source))?; let file_path = dir.path().join("output.txt"); command .arg(melody_file.path()) .arg("-o") .arg(&file_path) .assert() .success(); let output = read_to_string(file_path)?; assert_eq!(output, expected_output); Ok(()) }