Add failing test scenario for recursive types.

This commit is contained in:
KtorZ 2023-03-10 09:14:05 +01:00 committed by Lucas
parent 31c280552d
commit e44f18bae5
1 changed files with 64 additions and 2 deletions

View File

@ -265,7 +265,7 @@ mod test {
} }
} }
fn assert_validator(source_code: &str, json: serde_json::Value) { fn assert_validator(source_code: &str, expected: serde_json::Value) {
let mut project = TestProject::new(); let mut project = TestProject::new();
let modules = CheckedModules::singleton(project.check(project.parse(source_code))); let modules = CheckedModules::singleton(project.check(project.parse(source_code)));
@ -283,7 +283,9 @@ mod test {
let validator = Validator::from_checked_module(&modules, &mut generator, validator, def) let validator = Validator::from_checked_module(&modules, &mut generator, validator, def)
.expect("Failed to create validator blueprint"); .expect("Failed to create validator blueprint");
assert_json_eq!(serde_json::to_value(&validator).unwrap(), json); println!("{}", serde_json::to_string_pretty(&validator).unwrap());
assert_json_eq!(serde_json::to_value(&validator).unwrap(), expected);
} }
#[test] #[test]
@ -734,4 +736,64 @@ mod test {
), ),
); );
} }
#[test]
fn recursive_type() {
assert_validator(
r#"
pub type LinkedList<a> {
Nil
Cons(a, LinkedList<a>)
}
pub type Foo {
Foo {
foo: LinkedList<Bool>,
}
Bar {
bar: Int,
baz: (ByteArray, List<LinkedList<Int>>)
}
}
validator spend {
fn(datum: Foo, redeemer: LinkedList<Int>, ctx: Void) {
True
}
}
"#,
json!({
"redeemer": {
"schema": {
"$ref": "#/$defs/LinkedList_Int"
}
},
"$defs": {
"LinkedList_Int": {
"anyOf": [
{
"title": "Nil",
"dataType": "constructor",
"index": 0,
"fields": []
},
{
"title": "Cons",
"dataType": "constructor",
"index": 1,
"fields": [
{
"dataType": "integer"
},
{
"$ref": "#/$defs/LinkedList_Int"
},
]
}
],
},
}
}),
)
}
} }