1 // ██████╗ █████╗ ███████╗███████╗██╗███╗ ██╗ ██████╗ 2 // ██╔══██╗██╔══██╗██╔════╝██╔════╝██║████╗ ██║██╔════╝ 3 // ██████╔╝███████║███████╗███████╗██║██╔██╗ ██║██║ ███╗ 4 // ██╔═══╝ ██╔══██║╚════██║╚════██║██║██║╚██╗██║██║ ██║ 5 // ██║ ██║ ██║███████║███████║██║██║ ╚████║╚██████╔╝ 6 // ╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚═╝╚═╝ ╚═══╝ ╚═════╝ 7 8 #[cfg(test)] 9 mod passing { 10 use assert_cmd::prelude::*; 11 use std::env; 12 use std::fs; 13 use std::path::Path; 14 use std::process::{Command, Stdio}; 15 use url::Url; 16 17 #[test] print_help_information()18 fn print_help_information() { 19 let mut cmd = Command::cargo_bin(env!("CARGO_PKG_NAME")).unwrap(); 20 let out = cmd.arg("-h").output().unwrap(); 21 22 // STDERR should be empty 23 assert_eq!(String::from_utf8_lossy(&out.stderr), ""); 24 25 // STDOUT should contain program name, version, and usage information 26 // TODO 27 28 // Exit code should be 0 29 out.assert().code(0); 30 } 31 32 #[test] print_version()33 fn print_version() { 34 let mut cmd = Command::cargo_bin(env!("CARGO_PKG_NAME")).unwrap(); 35 let out = cmd.arg("-V").output().unwrap(); 36 37 // STDERR should be empty 38 assert_eq!(String::from_utf8_lossy(&out.stderr), ""); 39 40 // STDOUT should contain program name and version 41 assert_eq!( 42 String::from_utf8_lossy(&out.stdout), 43 format!("{} {}\n", env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION")) 44 ); 45 46 // Exit code should be 0 47 out.assert().code(0); 48 } 49 50 #[test] stdin_target_input()51 fn stdin_target_input() { 52 let mut echo = Command::new("echo") 53 .arg("Hello from STDIN") 54 .stdout(Stdio::piped()) 55 .spawn() 56 .unwrap(); 57 let echo_out = echo.stdout.take().unwrap(); 58 echo.wait().unwrap(); 59 60 let mut cmd = Command::cargo_bin(env!("CARGO_PKG_NAME")).unwrap(); 61 cmd.stdin(echo_out); 62 let out = cmd.arg("-M").arg("-").output().unwrap(); 63 64 // STDERR should be empty 65 assert_eq!(String::from_utf8_lossy(&out.stderr), ""); 66 67 // STDOUT should contain HTML created out of STDIN 68 assert_eq!( 69 String::from_utf8_lossy(&out.stdout), 70 "<html><head></head><body>Hello from STDIN\n</body></html>\n" 71 ); 72 73 // Exit code should be 0 74 out.assert().code(0); 75 } 76 77 #[test] css_import_string()78 fn css_import_string() { 79 let mut cmd = Command::cargo_bin(env!("CARGO_PKG_NAME")).unwrap(); 80 let path_html: &Path = Path::new("src/tests/data/css/index.html"); 81 let path_css: &Path = Path::new("src/tests/data/css/style.css"); 82 83 assert!(path_html.is_file()); 84 assert!(path_css.is_file()); 85 86 let out = cmd.arg("-M").arg(path_html.as_os_str()).output().unwrap(); 87 88 // STDERR should list files that got retrieved 89 assert_eq!( 90 String::from_utf8_lossy(&out.stderr), 91 format!( 92 "\ 93 {file_url_html}\n \ 94 {file_url_css}\n \ 95 {file_url_css}\n \ 96 {file_url_css}\n\ 97 ", 98 file_url_html = Url::from_file_path(fs::canonicalize(&path_html).unwrap()).unwrap(), 99 file_url_css = Url::from_file_path(fs::canonicalize(&path_css).unwrap()).unwrap(), 100 ) 101 ); 102 103 // STDOUT should contain embedded CSS url()'s 104 assert_eq!( 105 String::from_utf8_lossy(&out.stdout), 106 "<html><head><style>\n\n @charset \"UTF-8\";\n\n @import \"data:text/css;base64,Ym9keXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7Y29sb3I6I2ZmZn0K\";\n\n @import url(\"data:text/css;base64,Ym9keXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7Y29sb3I6I2ZmZn0K\");\n\n @import url(\"data:text/css;base64,Ym9keXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7Y29sb3I6I2ZmZn0K\");\n\n</style>\n</head><body></body></html>\n" 107 ); 108 109 // Exit code should be 0 110 out.assert().code(0); 111 } 112 } 113 114 // ███████╗ █████╗ ██╗██╗ ██╗███╗ ██╗ ██████╗ 115 // ██╔════╝██╔══██╗██║██║ ██║████╗ ██║██╔════╝ 116 // █████╗ ███████║██║██║ ██║██╔██╗ ██║██║ ███╗ 117 // ██╔══╝ ██╔══██║██║██║ ██║██║╚██╗██║██║ ██║ 118 // ██║ ██║ ██║██║███████╗██║██║ ╚████║╚██████╔╝ 119 // ╚═╝ ╚═╝ ╚═╝╚═╝╚══════╝╚═╝╚═╝ ╚═══╝ ╚═════╝ 120 121 #[cfg(test)] 122 mod failing { 123 use assert_cmd::prelude::*; 124 use std::env; 125 use std::process::Command; 126 127 #[test] bad_input_empty_target()128 fn bad_input_empty_target() { 129 let mut cmd = Command::cargo_bin(env!("CARGO_PKG_NAME")).unwrap(); 130 let out = cmd.arg("").output().unwrap(); 131 132 // STDERR should contain error description 133 assert_eq!( 134 String::from_utf8_lossy(&out.stderr), 135 "No target specified\n" 136 ); 137 138 // STDOUT should be empty 139 assert_eq!(String::from_utf8_lossy(&out.stdout), ""); 140 141 // Exit code should be 1 142 out.assert().code(1); 143 } 144 } 145