use crate::test_helpers::*;
use slicec::diagnostics::{Diagnostic, Error};
use slicec::grammar::CompilationMode;
#[test]
fn slice1_enums_can_be_used_by_slice2_definitions() {
let slice1 = "
mode = Slice1
module Test
enum E {
A,
B = 4,
}
";
let slice2 = "
module Test
struct S { e: E}
";
_ = parse_multiple_for_ast(&[slice1, slice2]);
}
mod slice1 {
use super::*;
#[test]
fn underlying_types_fail() {
let slice = "
mode = Slice1
module Test
unchecked enum E : int32 {}
";
let diagnostics = parse_for_diagnostics(slice);
let expected = Diagnostic::new(Error::NotSupportedInCompilationMode {
kind: "enum".to_owned(),
identifier: "E".to_owned(),
mode: CompilationMode::Slice1,
})
.add_note("enums defined in Slice1 mode cannot have underlying types", None);
check_diagnostics(diagnostics, [expected]);
}
#[test]
fn associated_fields_fail() {
let slice = "
mode = Slice1
module Test
unchecked enum E {
A(b: bool)
}
";
let diagnostics = parse_for_diagnostics(slice);
let expected = Diagnostic::new(Error::NotSupportedInCompilationMode {
kind: "enum".to_owned(),
identifier: "E".to_owned(),
mode: CompilationMode::Slice1,
})
.add_note(
"field syntax cannot be used with enumerators declared in Slice1 mode",
None,
);
check_diagnostics(diagnostics, [expected]);
}
#[test]
fn empty_associated_fields_fail() {
let slice = "
mode = Slice1
module Test
unchecked enum E {
A()
}
";
let diagnostics = parse_for_diagnostics(slice);
let expected = Diagnostic::new(Error::NotSupportedInCompilationMode {
kind: "enum".to_owned(),
identifier: "E".to_owned(),
mode: CompilationMode::Slice1,
})
.add_note(
"field syntax cannot be used with enumerators declared in Slice1 mode",
None,
);
check_diagnostics(diagnostics, [expected]);
}
#[test]
fn compact_enums_fail() {
let slice = "
mode = Slice1
module Test
compact enum E {
A
}
";
let diagnostics = parse_for_diagnostics(slice);
let expected = Diagnostic::new(Error::NotSupportedInCompilationMode {
kind: "enum".to_owned(),
identifier: "E".to_owned(),
mode: CompilationMode::Slice1,
})
.add_note("enums defined in Slice1 mode cannot be 'compact'", None);
check_diagnostics(diagnostics, [expected]);
}
}