use std::env; use std::fs::{create_dir_all, read_to_string}; use std::path::PathBuf; use std::process::Command; use test_utilities::*; struct TestDir { paths: Vec, } impl Drop for TestDir { fn drop(&mut self) { for path in &self.paths { cleanup_test_dir(path); } } } #[test] fn test_basic_generation() { let test_dir = setup_test_dir(); let input_dir = test_dir.join("tezt"); let output_dir = test_dir.join("output"); let html_dir = output_dir.join("page").join("tezt").join("html"); let gemini_dir = output_dir.join("page").join("tezt").join("gemini"); create_dir_all(&input_dir).expect("Could not create input directory"); create_dir_all(&output_dir).expect("Could not create output directory"); let _cleanup = TestDir { paths: vec![test_dir.clone()], }; // Create test input files create_test_file( &input_dir.join("_layout.html"), "\ {{ title }} {{ content }} ", ); create_test_file( &input_dir.join("test.gmi"), "\ --- title: Page Is Cool! # Test Hello world ", ); create_test_file(&input_dir.join("test.png"), "A picture of a cute cat"); // Run the program from the test directory let status = Command::new(env!("CARGO_BIN_EXE_page")) .current_dir(&input_dir) .env("PAGE_OUTPUT_DIRECTORY", &output_dir) .status() .expect("Failed to execute command"); assert!(status.success()); assert!(html_dir.exists()); assert!(gemini_dir.exists()); let html_output = html_dir.join("test.html"); assert_file_contents( &html_output, "\ Page Is Cool!

Test

Hello world

", ); let html_asset_output = html_dir.join("test.png"); assert_file_contents(&html_asset_output, "A picture of a cute cat"); let gemini_output = gemini_dir.join("test.gmi"); assert_file_contents( &gemini_output, "\ # Test Hello world ", ); let gemini_asset_output = gemini_dir.join("test.png"); assert!(gemini_asset_output.exists()); let gemini_asset_content = read_to_string(gemini_asset_output).unwrap(); assert_eq!(gemini_asset_content, "A picture of a cute cat"); } #[test] fn test_missing_layout() { let test_dir = setup_test_dir(); let input_dir = test_dir.join("tezt2"); let output_dir = test_dir.join("output"); let html_dir = output_dir.join("page").join("tezt2").join("html"); let gemini_dir = output_dir.join("page").join("tezt2").join("gemini"); create_dir_all(&input_dir).expect("Could not create input directory"); create_dir_all(&output_dir).expect("Could not create output directory"); let _cleanup = TestDir { paths: vec![test_dir.clone()], }; // Create test input files create_test_file( &input_dir.join("test.gmi"), "\ --- title: Page Is Cool! # Test Hello world ", ); create_test_file(&input_dir.join("test.png"), "A picture of a cute cat"); // Run the program from the test directory let status = Command::new(env!("CARGO_BIN_EXE_page")) .current_dir(&input_dir) .env("PAGE_OUTPUT_DIRECTORY", &output_dir) .status() .expect("Failed to execute command"); assert!(!status.success()); assert!(!html_dir.exists()); assert!(!gemini_dir.exists()); }