Add more failing tests for expecting on into opaque types.

This commit is contained in:
KtorZ 2024-03-13 13:05:44 +01:00 committed by rvcas
parent 3820d2af14
commit 961806617f
No known key found for this signature in database
GPG Key ID: C09B64E263F7D68C
1 changed files with 78 additions and 4 deletions

View File

@ -1812,16 +1812,15 @@ fn forbid_expect_into_opaque_type_from_data() {
} }
#[test] #[test]
fn forbid_expect_into_opaque_type_constructor() { fn forbid_expect_into_opaque_type_constructor_without_typecasting() {
let source_code = r#" let source_code = r#"
opaque type Thing { opaque type Thing {
Foo(Int) Foo(Int)
Bar(Int) Bar(Int)
} }
fn bar(n: Thing) { fn bar(thing: Thing) {
expect Foo(a) = n expect Foo(a) = thing
a a
} }
"#; "#;
@ -1831,3 +1830,78 @@ fn forbid_expect_into_opaque_type_constructor() {
Err((_, Error::ExpectOnOpaqueType { .. })) Err((_, Error::ExpectOnOpaqueType { .. }))
)) ))
} }
#[test]
fn forbid_expect_into_opaque_type_constructor_with_typecasting() {
let source_code = r#"
opaque type Thing {
Foo(Int)
Bar(Int)
}
fn bar(data: Data) {
expect Foo(a): Thing = data
a
}
"#;
assert!(matches!(
check(parse(source_code)),
Err((_, Error::ExpectOnOpaqueType { .. }))
))
}
#[test]
fn forbid_expect_into_nested_opaque_in_record_without_typecasting() {
let source_code = r#"
opaque type Thing { inner: Int }
type Foo { foo: Thing }
fn bar(thing: Thing) {
expect Foo { foo: Thing { inner } } : Foo = thing
Void
}
"#;
assert!(matches!(
check(parse(source_code)),
Err((_, Error::ExpectOnOpaqueType { .. }))
))
}
#[test]
fn forbid_expect_into_nested_opaque_in_record_with_typecasting() {
let source_code = r#"
opaque type Thing { inner: Int }
type Foo { foo: Thing }
fn bar(a: Data) {
expect Foo { foo: Thing { inner } } : Foo = a
Void
}
"#;
assert!(matches!(
check(parse(source_code)),
Err((_, Error::ExpectOnOpaqueType { .. }))
))
}
#[test]
fn forbid_expect_into_nested_opaque_in_list() {
let source_code = r#"
opaque type Thing { inner: Int }
fn bar(a: Data) {
expect [x]: List<Thing> = [a]
Void
}
"#;
assert!(matches!(
check(parse(source_code)),
Err((_, Error::ExpectOnOpaqueType { .. }))
))
}