use std::env; use duct::cmd; #[test] fn import_stdin() { let bin = env!("CARGO_BIN_EXE_automerge"); let initial_state_json = serde_json::json!({ "birds": { "wrens": 3.0, "sparrows": 15.0 } }); let json_bytes = serde_json::to_string_pretty(&initial_state_json).unwrap(); let no_pipe_no_file = cmd!(bin, "import").stdin_bytes(json_bytes.clone()).run(); assert!(no_pipe_no_file.is_err()); let pipe_no_file = cmd!(bin, "import") .stdin_bytes(json_bytes.clone()) .stdout_capture() .run(); assert!(pipe_no_file.is_ok()); let mut temp_file = std::env::temp_dir(); temp_file.push("import_test.mpl"); let no_pipe_file = cmd!(bin, "import", "--out", &temp_file) .stdin_bytes(json_bytes) .run(); assert!(no_pipe_file.is_ok()); std::fs::remove_file(temp_file).unwrap(); } #[test] fn export_stdout() { let bin = env!("CARGO_BIN_EXE_automerge"); let no_pipe_no_file = cmd!(bin, "export").stdout_capture().run(); assert!(no_pipe_no_file.is_err()); } #[test] fn import_export_isomorphic() { let bin = env!("CARGO_BIN_EXE_automerge"); let initial_state_json = serde_json::json!({ "birds": { "wrens": 3.0, "sparrows": 15.0 } }); let json_bytes = serde_json::to_string_pretty(&initial_state_json).unwrap(); let stdout = cmd!(bin, "import") .stdin_bytes(json_bytes.clone()) .pipe(cmd!(bin, "export")) .read() .unwrap(); assert_eq!(stdout, json_bytes); } #[test] fn import_change_export() { let bin = env!("CARGO_BIN_EXE_automerge"); let initial_state_json = serde_json::json!({ "birds": { "wrens": 3.0, "sparrows": 15.0 } }); let json_bytes = serde_json::to_string_pretty(&initial_state_json).unwrap(); let stdout = cmd!(bin, "import") .stdin_bytes(json_bytes.clone()) .pipe(cmd!(bin, "change", "set $[\"birds\"][\"owls\"] 12.0")) .stdin_bytes(json_bytes) .pipe(cmd!(bin, "export")) .read() .unwrap(); let result: serde_json::Value = serde_json::from_str(stdout.as_str()).unwrap(); let expected = serde_json::json!({ "birds": { "wrens": 3.0, "sparrows": 15.0, "owls": 12.0, } }); assert_eq!(result, expected); }