use super::{Directory, fixture}; use dever::compiler::{build, project::Project}; #[test] fn json_nominal_documents_typed_encoding_and_failures_work_end_to_end() { let directory = Directory::new(); let project = Project::load(&fixture().with_file_name("json.dever")).unwrap(); let program = project.check().unwrap(); for entry in [ "encodeVerify", "manualVerify", "failureVerify", "nativeValueVerify", ] { let binary = build::build(&program, &project.sources, entry, &directory.0.join(entry)).unwrap(); let output = std::process::Command::new(binary).output().unwrap(); assert!( output.status.success(), "{entry}: {}", String::from_utf8_lossy(&output.stderr) ); assert_eq!(output.stdout, b"true\n", "{entry}"); } } #[test] fn json_library_preserves_raw_numbers_and_property_values() { let directory = Directory::new(); let project = Project::load(&fixture().with_file_name("json.dever")).unwrap(); let program = project.check().unwrap(); let binary = build::build( &program, &project.sources, "verify", &directory.0.join("verify"), ) .unwrap(); let output = std::process::Command::new(binary).output().unwrap(); assert!( output.status.success(), "{}", String::from_utf8_lossy(&output.stderr) ); assert_eq!(output.stdout, b"true\n"); } #[test] fn json_document_api_parses_properties_and_stringifies() { let directory = Directory::new(); let project = Project::load(&fixture().with_file_name("json.dever")).unwrap(); let program = project.check().unwrap(); let binary = build::build( &program, &project.sources, "documentVerify", &directory.0.join("documentVerify"), ) .unwrap(); let output = std::process::Command::new(binary).output().unwrap(); assert!( output.status.success(), "{}", String::from_utf8_lossy(&output.stderr) ); assert_eq!(output.stdout, b"true\n"); } #[test] fn json_library_reports_parse_failure_at_the_intrinsic_call() { let directory = Directory::new(); let project = Project::load(&fixture().with_file_name("json.dever")).unwrap(); let program = project.check().unwrap(); let binary = build::build( &program, &project.sources, "invalid", &directory.0.join("invalid"), ) .unwrap(); let output = std::process::Command::new(binary).output().unwrap(); assert!(!output.status.success()); let error = String::from_utf8(output.stderr).unwrap(); assert!(error.contains("JsonResult.Failed"), "{error}"); assert!(error.contains("json.dever"), "{error}"); } #[test] fn json_record_views_preserve_values_finite_checks_and_initialization_failures() { let directory = Directory::new(); let project = Project::load(&fixture().with_file_name("json-record.dever")).unwrap(); let program = project.check().unwrap(); for entry in ["verify", "faultEntry"] { let binary = build::build(&program, &project.sources, entry, &directory.0.join(entry)).unwrap(); let output = std::process::Command::new(binary).output().unwrap(); let error = String::from_utf8(output.stderr).unwrap(); if entry == "verify" { assert!(output.status.success(), "{error}"); assert_eq!(output.stdout, b"true\n"); } else { assert!(!output.status.success()); assert!(output.stdout.is_empty()); assert!(error.contains("Failure.Second"), "{error}"); assert!(!error.contains("Failure.First"), "{error}"); } } }