Initial Dever 0.0.1
This commit is contained in:
commit
81233d098c
1479 files changed
+163782
No files matched your search
@@ -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"));
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user