extern crate assert_cli;
extern crate tempfile;
use tempfile::NamedTempFile;
use std::io::Write;
#[test]
fn test_stdin_invalid_json() {
assert_cli::Assert::main_binary()
.stdin("{ \"foo\": \"bar\"")
.fails()
.and()
.stderr().contains("EOF while parsing an object at line 1 column 14")
.unwrap();
}
#[test]
fn test_stdin_valid_json() {
assert_cli::Assert::main_binary()
.stdin("{ \"foo\": \"bar\" }")
.succeeds()
.unwrap();
}
#[test]
fn test_stdin_valid_with_unicode_bom() {
assert_cli::Assert::main_binary()
.stdin("\u{FEFF}{ \"foo\": \"bar\" }")
.succeeds()
.unwrap();
}
#[test]
fn test_files_single_invalid() {
let mut file: NamedTempFile = NamedTempFile::new().unwrap();
write!(file, "{{ \"foo\": \"bar\"").unwrap();
assert_cli::Assert::main_binary()
.with_args(&[file.path().to_str().unwrap()])
.fails()
.and()
.stderr().contains("EOF while parsing an object at line 1 column 14")
.unwrap();
}
#[test]
fn test_files_single_valid() {
let mut file: NamedTempFile = NamedTempFile::new().unwrap();
write!(file, "{{ \"foo\": \"bar\" }}").unwrap();
assert_cli::Assert::main_binary()
.with_args(&[file.path().to_str().unwrap()])
.succeeds()
.unwrap();
}
#[test]
fn test_files_single_valid_with_unicode_bom() {
let mut file: NamedTempFile = NamedTempFile::new().unwrap();
write!(file, "\u{FEFF}{{ \"foo\": \"bar\" }}").unwrap();
assert_cli::Assert::main_binary()
.with_args(&[file.path().to_str().unwrap()])
.succeeds()
.unwrap();
}
#[test]
fn test_files_multiple_invalid() {
let mut file1: NamedTempFile = NamedTempFile::new().unwrap();
write!(file1, "{{ \"foo\": \"bar\"").unwrap();
let file1_path = file1.path().to_str().unwrap();
let mut file2: NamedTempFile = NamedTempFile::new().unwrap();
write!(file2, "{{ \"lux\": BLAH }}").unwrap();
let file2_path = file2.path().to_str().unwrap();
assert_cli::Assert::main_binary()
.with_args(&[file1_path, file2_path])
.fails()
.and()
.stderr().contains(format!("Error in file {}: EOF while parsing an object at line 1 column 14", file1_path))
.and()
.stderr().contains(format!("Error in file {}: expected value at line 1 column 10", file2_path))
.unwrap();
}
#[test]
fn test_files_multiple_mixed() {
let mut file1: NamedTempFile = NamedTempFile::new().unwrap();
write!(file1, "{{ \"foo\": \"bar\" }}").unwrap();
let file1_path = file1.path().to_str().unwrap();
let mut file2: NamedTempFile = NamedTempFile::new().unwrap();
write!(file2, "{{ \"lux\": BLAH }}").unwrap();
let file2_path = file2.path().to_str().unwrap();
assert_cli::Assert::main_binary()
.with_args(&[file1_path, file2_path])
.fails()
.and()
.stderr().contains(format!("Error in file {}: expected value at line 1 column 10", file2_path))
.unwrap();
}
#[test]
fn test_files_multiple_valid() {
let mut file1: NamedTempFile = NamedTempFile::new().unwrap();
write!(file1, "{{ \"foo\": \"bar\" }}").unwrap();
let file1_path = file1.path().to_str().unwrap();
let mut file2: NamedTempFile = NamedTempFile::new().unwrap();
write!(file2, "{{ \"lux\": true }}").unwrap();
let file2_path = file2.path().to_str().unwrap();
assert_cli::Assert::main_binary()
.with_args(&[file1_path, file2_path])
.succeeds()
.unwrap();
}