Change-Id: I6c6847fac56f0a9a1a2209792e00a3aec5e672b9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/10809 Autosubmit: aspen <root@gws.fyi> Reviewed-by: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI Reviewed-by: lukegb <lukegb@tvl.fyi>
		
			
				
	
	
		
			79 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
use std::process::Command;
 | 
						|
 | 
						|
use crate_root::root;
 | 
						|
 | 
						|
struct Fixture {
 | 
						|
    name: &'static str,
 | 
						|
    exit_code: i32,
 | 
						|
    expected_output: &'static str,
 | 
						|
}
 | 
						|
 | 
						|
const FIXTURES: &[Fixture] = &[
 | 
						|
    Fixture {
 | 
						|
        name: "simple",
 | 
						|
        exit_code: 5,
 | 
						|
        expected_output: "",
 | 
						|
    },
 | 
						|
    Fixture {
 | 
						|
        name: "functions",
 | 
						|
        exit_code: 9,
 | 
						|
        expected_output: "",
 | 
						|
    },
 | 
						|
    Fixture {
 | 
						|
        name: "externs",
 | 
						|
        exit_code: 0,
 | 
						|
        expected_output: "foobar\n",
 | 
						|
    },
 | 
						|
    Fixture {
 | 
						|
        name: "units",
 | 
						|
        exit_code: 0,
 | 
						|
        expected_output: "hi\n",
 | 
						|
    },
 | 
						|
];
 | 
						|
 | 
						|
#[test]
 | 
						|
fn compile_and_run_files() {
 | 
						|
    let ach = root().unwrap().join("ach");
 | 
						|
 | 
						|
    println!("Running: `make clean`");
 | 
						|
    assert!(
 | 
						|
        Command::new("make")
 | 
						|
            .arg("clean")
 | 
						|
            .current_dir(&ach)
 | 
						|
            .spawn()
 | 
						|
            .unwrap()
 | 
						|
            .wait()
 | 
						|
            .unwrap()
 | 
						|
            .success(),
 | 
						|
        "make clean failed"
 | 
						|
    );
 | 
						|
 | 
						|
    for Fixture {
 | 
						|
        name,
 | 
						|
        exit_code,
 | 
						|
        expected_output,
 | 
						|
    } in FIXTURES
 | 
						|
    {
 | 
						|
        println!(">>> Testing: {}", name);
 | 
						|
 | 
						|
        println!("    Running: `make {}`", name);
 | 
						|
        assert!(
 | 
						|
            Command::new("make")
 | 
						|
                .arg(name)
 | 
						|
                .current_dir(&ach)
 | 
						|
                .spawn()
 | 
						|
                .unwrap()
 | 
						|
                .wait()
 | 
						|
                .unwrap()
 | 
						|
                .success(),
 | 
						|
            "make failed"
 | 
						|
        );
 | 
						|
 | 
						|
        let out_path = ach.join(name);
 | 
						|
        println!("    Running: `{}`", out_path.to_str().unwrap());
 | 
						|
        let output = Command::new(out_path).output().unwrap();
 | 
						|
        assert_eq!(output.status.code().unwrap(), *exit_code,);
 | 
						|
        assert_eq!(output.stdout, expected_output.as_bytes());
 | 
						|
        println!("    OK");
 | 
						|
    }
 | 
						|
}
 |