Initial Dever 0.0.1

This commit is contained in:
Codex committed 2026-11-03 03:32:07 +00:00
commit 81233d098c
1479 files changed
+163782

No files matched your search

+102
View File
@@ -0,0 +1,102 @@
use super::{Directory, fixture};
use dever::{
compiler::{build, project::Project},
syntax::source::Source,
};
#[test]
fn native_uuid_values_and_maps_use_only_the_uuid_feature() {
let directory = Directory::new();
let project = Project::load(&fixture().with_file_name("uuid.dever")).unwrap();
let program = project.check().unwrap();
let main = program
.functions
.iter()
.position(|function| function.signature.name == "verify")
.unwrap();
assert_eq!(
build::runtime_features(&program, &program.reachable([main])),
["uuid"]
);
let binary = build::build(
&program,
&project.sources,
"verify",
&directory.0.join("verify"),
)
.unwrap();
let result = std::process::Command::new(binary).output().unwrap();
assert!(
result.status.success(),
"{}",
String::from_utf8_lossy(&result.stderr)
);
assert_eq!(result.stdout, b"true\n");
}
#[test]
fn infallible_batches_preserve_nullable_values_and_pending_task_cleanup() {
let directory = Directory::new();
let project = Project::load(&fixture().with_file_name("uuid.dever")).unwrap();
let program = project.check().unwrap();
for entry in ["batchVerify", "taskVerify"] {
let binary =
build::build(&program, &project.sources, entry, &directory.0.join(entry)).unwrap();
let result = std::process::Command::new(binary).output().unwrap();
assert!(
result.status.success(),
"{entry}: {}",
String::from_utf8_lossy(&result.stderr)
);
assert_eq!(result.stdout, b"true\n");
}
}
#[test]
fn uuid_command_fields_normalize_and_reject_noncanonical_input() {
let directory = Directory::new();
let mut project = Project::load(&fixture().with_file_name("application")).unwrap();
let source = project
.sources
.iter_mut()
.find(|source| source.path.ends_with("greeting/app.dever"))
.unwrap();
let text = source.text.replace("id: Id", "id: Uuid");
*source = Source::new(source.id, source.path.clone(), text);
let program = project.check().unwrap();
let binary = build::build(
&program,
&project.sources,
"main",
&directory.0.join("commands"),
)
.unwrap();
let input =
r#"{"value":{"id":"550E8400-E29B-41D4-A716-446655440000","name":"雪","scores":[]}}"#;
let result = std::process::Command::new(&binary)
.args(["demo.greeting.echo", input])
.output()
.unwrap();
assert!(
result.status.success(),
"{}",
String::from_utf8_lossy(&result.stderr)
);
assert_eq!(
String::from_utf8(result.stdout).unwrap(),
"{\"code\":0,\"message\":\"ok\",\"data\":{\"id\":\"550e8400-e29b-41d4-a716-446655440000\",\"name\":\"雪\",\"scores\":[],\"ratio\":null}}\n"
);
for value in [
"550e8400e29b41d4a716446655440000",
"00000000-0000-0000-0000-00000000000-",
] {
let input = input.replace("550E8400-E29B-41D4-A716-446655440000", value);
let result = std::process::Command::new(&binary)
.args(["demo.greeting.echo", &input])
.output()
.unwrap();
assert!(!result.status.success());
assert!(result.stdout.is_empty());
assert!(String::from_utf8_lossy(&result.stderr).contains("invalid command input"));
}
}