2024-06-19 02:03:41 +00:00
|
|
|
// Reuse these tests when structures are reimplemented
|
|
|
|
// use dust_lang::{
|
|
|
|
// abstract_tree::{Type, WithPos},
|
|
|
|
// error::{DustError, TypeConflict, ValidationError},
|
|
|
|
// identifier::Identifier,
|
|
|
|
// interpret, Value,
|
|
|
|
// };
|
2024-03-24 19:35:19 +00:00
|
|
|
|
2024-06-19 02:03:41 +00:00
|
|
|
// #[test]
|
|
|
|
// fn simple_structure() {
|
|
|
|
// assert_eq!(
|
|
|
|
// interpret(
|
|
|
|
// "test",
|
|
|
|
// "
|
|
|
|
// struct Foo {
|
|
|
|
// bar : int,
|
|
|
|
// baz : str,
|
|
|
|
// }
|
2024-03-19 23:16:33 +00:00
|
|
|
|
2024-06-19 02:03:41 +00:00
|
|
|
// Foo {
|
|
|
|
// bar = 42,
|
|
|
|
// baz = 'hiya',
|
|
|
|
// }
|
|
|
|
// "
|
|
|
|
// ),
|
|
|
|
// Ok(Some(Value::structure(
|
|
|
|
// Identifier::new("Foo").with_position((127, 130)),
|
|
|
|
// vec![
|
|
|
|
// (Identifier::new("bar"), Value::integer(42)),
|
|
|
|
// (Identifier::new("baz"), Value::string("hiya".to_string())),
|
|
|
|
// ]
|
|
|
|
// )))
|
|
|
|
// )
|
|
|
|
// }
|
2024-03-19 23:33:02 +00:00
|
|
|
|
2024-06-19 02:03:41 +00:00
|
|
|
// #[test]
|
|
|
|
// fn field_type_error() {
|
|
|
|
// assert_eq!(
|
|
|
|
// interpret(
|
|
|
|
// "test",
|
|
|
|
// "
|
|
|
|
// struct Foo {
|
|
|
|
// bar : int,
|
|
|
|
// }
|
2024-03-20 05:29:07 +00:00
|
|
|
|
2024-06-19 02:03:41 +00:00
|
|
|
// Foo {
|
|
|
|
// bar = 'hiya',
|
|
|
|
// }
|
|
|
|
// "
|
|
|
|
// )
|
|
|
|
// .unwrap_err()
|
|
|
|
// .errors(),
|
|
|
|
// &vec![DustError::Validation {
|
|
|
|
// error: ValidationError::TypeCheck {
|
|
|
|
// conflict: TypeConflict {
|
|
|
|
// actual: Type::String,
|
|
|
|
// expected: Type::Integer
|
|
|
|
// },
|
|
|
|
// actual_position: (128, 134).into(),
|
|
|
|
// expected_position: Some((56, 59).into()),
|
|
|
|
// },
|
|
|
|
// position: (96, 153).into()
|
|
|
|
// }]
|
|
|
|
// )
|
|
|
|
// }
|
2024-03-20 05:29:07 +00:00
|
|
|
|
2024-06-19 02:03:41 +00:00
|
|
|
// #[test]
|
|
|
|
// fn nested_structure() {
|
|
|
|
// assert_eq!(
|
|
|
|
// interpret(
|
|
|
|
// "test",
|
|
|
|
// "
|
|
|
|
// struct Bar {
|
|
|
|
// baz : int
|
|
|
|
// }
|
|
|
|
// struct Foo {
|
|
|
|
// bar : Bar
|
|
|
|
// }
|
2024-03-19 23:33:02 +00:00
|
|
|
|
2024-06-19 02:03:41 +00:00
|
|
|
// Foo {
|
|
|
|
// bar = Bar {
|
|
|
|
// baz = 42
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// "
|
|
|
|
// ),
|
|
|
|
// Ok(Some(Value::structure(
|
|
|
|
// Identifier::new("Foo").with_position((172, 175)),
|
|
|
|
// vec![(
|
|
|
|
// Identifier::new("bar"),
|
|
|
|
// Value::structure(
|
|
|
|
// Identifier::new("Bar").with_position((204, 207)),
|
|
|
|
// vec![(Identifier::new("baz"), Value::integer(42))]
|
|
|
|
// )
|
|
|
|
// ),]
|
|
|
|
// )))
|
|
|
|
// )
|
|
|
|
// }
|
2024-03-19 23:46:41 +00:00
|
|
|
|
2024-06-19 02:03:41 +00:00
|
|
|
// #[test]
|
|
|
|
// fn undefined_struct() {
|
|
|
|
// assert_eq!(
|
|
|
|
// interpret(
|
|
|
|
// "test",
|
|
|
|
// "
|
|
|
|
// Foo {
|
|
|
|
// bar = 42
|
|
|
|
// }
|
|
|
|
// "
|
|
|
|
// )
|
|
|
|
// .unwrap_err()
|
|
|
|
// .errors(),
|
|
|
|
// &vec![DustError::Validation {
|
|
|
|
// error: ValidationError::VariableNotFound {
|
|
|
|
// identifier: Identifier::new("Foo"),
|
|
|
|
// position: (17, 20).into()
|
|
|
|
// },
|
|
|
|
// position: (17, 69).into()
|
|
|
|
// }]
|
|
|
|
// )
|
|
|
|
// }
|