Get tests working

This commit is contained in:
Sam Mohr 2024-08-14 19:31:45 -07:00
parent 3662c90346
commit 4ec213a114
No known key found for this signature in database
GPG key ID: EA41D161A3C1BC99
2 changed files with 75 additions and 71 deletions

View file

@ -12,8 +12,7 @@ mod helpers;
#[cfg(test)]
mod glue_cli_run {
use crate::helpers::fixtures_dir;
use cli_utils::helpers::{has_error, run_glue, run_roc, Out};
use std::fs;
use cli_utils::helpers::{Out, Run};
use std::path::{Path, PathBuf};
#[cfg(all(target_os = "linux", target_arch = "x86_64"))]
@ -46,7 +45,7 @@ mod glue_cli_run {
fn $test_name() {
let dir = fixtures_dir($fixture_dir);
generate_glue_for(&dir, std::iter::empty());
// generate_glue_for(&dir, std::iter::empty());
fn validate<'a, I: IntoIterator<Item = &'a str>>(dir: PathBuf, args: I) {
let out = run_app(&dir.join("app.roc"), args);
@ -198,83 +197,76 @@ mod glue_cli_run {
assert_eq!(all_fixtures, &mut VecSet::default());
}
fn generate_glue_for<'a, I: IntoIterator<Item = &'a str>>(
platform_dir: &'a Path,
args: I,
) -> Out {
let platform_module_path = platform_dir.join("platform.roc");
let glue_dir = platform_dir.join("test_glue");
let fixture_templates_dir = platform_dir
.parent()
.unwrap()
.parent()
.unwrap()
.join("fixture-templates");
// fn generate_glue_for<'a, I: IntoIterator<Item = &'a str>>(
// platform_dir: &'a Path,
// args: I,
// ) -> Out {
// let platform_module_path = platform_dir.join("platform.roc");
// let glue_dir = platform_dir.join("test_glue");
// let fixture_templates_dir = platform_dir
// .parent()
// .unwrap()
// .parent()
// .unwrap()
// .join("fixture-templates");
// Copy the rust template from the templates directory into the fixture dir.
dircpy::CopyBuilder::new(fixture_templates_dir.join("rust"), platform_dir)
.overwrite(true) // overwrite any files that were already present
.run()
.unwrap();
// // Copy the rust template from the templates directory into the fixture dir.
// dircpy::CopyBuilder::new(fixture_templates_dir.join("rust"), platform_dir)
// .overwrite(true) // overwrite any files that were already present
// .run()
// .unwrap();
// Delete the glue file to make sure we're actually regenerating it!
if glue_dir.exists() {
fs::remove_dir_all(&glue_dir)
.expect("Unable to remove test_glue dir in order to regenerate it in the test");
}
// // Delete the glue file to make sure we're actually regenerating it!
// if glue_dir.exists() {
// fs::remove_dir_all(&glue_dir)
// .expect("Unable to remove test_glue dir in order to regenerate it in the test");
// }
let rust_glue_spec = fixture_templates_dir
.parent()
.unwrap()
.parent()
.unwrap()
.join("src")
.join("RustGlue.roc");
// let rust_glue_spec = fixture_templates_dir
// .parent()
// .unwrap()
// .parent()
// .unwrap()
// .join("src")
// .join("RustGlue.roc");
// Generate a fresh test_glue for this platform
let parts : Vec<_> =
// converting these all to String avoids lifetime issues
std::iter::once("glue".to_string()).chain(
args.into_iter().map(|arg| arg.to_string()).chain([
rust_glue_spec.to_str().unwrap().to_string(),
glue_dir.to_str().unwrap().to_string(),
platform_module_path.to_str().unwrap().to_string(),
]),
).collect();
let glue_out = run_glue(parts.iter());
// // Generate a fresh test_glue for this platform
// let parts : Vec<_> =
// // converting these all to String avoids lifetime issues
// std::iter::once("glue".to_string()).chain(
// args.into_iter().map(|arg| arg.to_string()).chain([
// rust_glue_spec.to_str().unwrap().to_string(),
// glue_dir.to_str().unwrap().to_string(),
// platform_module_path.to_str().unwrap().to_string(),
// ]),
// ).collect();
// let glue_out = run_glue(parts.iter());
if has_error(&glue_out.stderr) {
panic!(
"`roc {}` command had unexpected stderr: {}",
parts.join(" "),
glue_out.stderr
);
}
// if has_error(&glue_out.stderr) {
// panic!(
// "`roc {}` command had unexpected stderr: {}",
// parts.join(" "),
// glue_out.stderr
// );
// }
assert!(glue_out.status.success(), "bad status {glue_out:?}");
// assert!(glue_out.status.success(), "bad status {glue_out:?}");
glue_out
}
// glue_out
// }
fn run_app<'a, 'b, I: IntoIterator<Item = &'a str>>(app_file: &'b Path, args: I) -> Out {
// Generate test_glue for this platform
let compile_out = run_roc(
let compile_out = Run::new_roc()
.add_args(
// converting these all to String avoids lifetime issues
args.into_iter()
.map(|arg| arg.to_string())
.chain([app_file.to_str().unwrap().to_string()]),
&[],
&[],
);
)
.run();
if has_error(&compile_out.stderr) {
panic!(
"`roc` command had unexpected stderr: {}",
compile_out.stderr
);
}
assert!(compile_out.status.success(), "bad status {compile_out:?}");
compile_out.assert_clean_success();
compile_out
}

View file

@ -1,5 +1,7 @@
#![cfg(test)]
use std::io::Read;
use indoc::indoc;
#[cfg(target_os = "linux")]
@ -160,10 +162,20 @@ fn run_with_valgrind(binary_path: &std::path::Path) {
.to_str()
.unwrap();
let (valgrind_out, raw_xml) =
cli_utils::helpers::run_with_valgrind([], &[generated_filename.to_string()]);
let valgrind_out = cli_utils::helpers::Run::new_roc()
.arg(generated_filename)
.run_with_valgrind();
if valgrind_out.status.success() {
let mut raw_xml = String::new();
valgrind_out
.valgrind_xml
.as_ref()
.unwrap()
.read_to_string(&mut raw_xml)
.unwrap();
let memory_errors = extract_valgrind_errors(&raw_xml).unwrap_or_else(|err| {
panic!(
indoc!(