test: retain complete mixed Project warning oracle
This commit is contained in:
@@ -166,6 +166,37 @@ fn span(source: &str, context: &str, offset: usize, len: usize) -> Span {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn expected_leaf_work_warnings(span: Span, line: usize, column: usize) -> [SourceDiagnostic; 2] {
|
||||||
|
// Ordinary allocation validation precedes advisory behavior coverage. Both
|
||||||
|
// diagnostics fall back to the full Work declaration, with no related site.
|
||||||
|
[
|
||||||
|
(
|
||||||
|
"unallocated_leaf",
|
||||||
|
Some("allocation"),
|
||||||
|
"Allocate leaf 'Work' to a performer.",
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"work_without_behavior_context",
|
||||||
|
None,
|
||||||
|
"Include this leaf activity/function in a process/chain or scenario through a work action or exchange occurrence.",
|
||||||
|
),
|
||||||
|
]
|
||||||
|
.map(|(code, field, message)| SourceDiagnostic {
|
||||||
|
path: "main.arcadia".into(),
|
||||||
|
diagnostic: language::Diagnostic {
|
||||||
|
severity: validation::Severity::Warning,
|
||||||
|
code: code.into(),
|
||||||
|
object_id: Some(id(2)),
|
||||||
|
field: field.map(str::to_owned),
|
||||||
|
line,
|
||||||
|
column,
|
||||||
|
message: message.into(),
|
||||||
|
span,
|
||||||
|
},
|
||||||
|
related: Vec::new(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn complete_oa_sa_forward_model_warning_and_original_authority() {
|
fn complete_oa_sa_forward_model_warning_and_original_authority() {
|
||||||
for layer in [Layer::Oa, Layer::Sa] {
|
for layer in [Layer::Oa, Layer::Sa] {
|
||||||
@@ -183,19 +214,6 @@ fn complete_oa_sa_forward_model_warning_and_original_authority() {
|
|||||||
resolved.syntax.files[0].source.as_ptr(),
|
resolved.syntax.files[0].source.as_ptr(),
|
||||||
bundle.files["main.arcadia"].as_ptr()
|
bundle.files["main.arcadia"].as_ptr()
|
||||||
));
|
));
|
||||||
assert_eq!(resolved.warnings().len(), 1);
|
|
||||||
let warning = &resolved.warnings()[0];
|
|
||||||
assert_eq!(
|
|
||||||
(&warning.path, warning.diagnostic.object_id),
|
|
||||||
(&bundle.entry, Some(id(2)))
|
|
||||||
);
|
|
||||||
assert_eq!(warning.diagnostic.severity, validation::Severity::Warning);
|
|
||||||
assert_eq!(warning.diagnostic.code, "unallocated_leaf");
|
|
||||||
assert_eq!(warning.diagnostic.field.as_deref(), Some("allocation"));
|
|
||||||
assert_eq!(
|
|
||||||
warning.diagnostic.message,
|
|
||||||
"Allocate leaf 'Work' to a performer."
|
|
||||||
);
|
|
||||||
let declaration = format!(
|
let declaration = format!(
|
||||||
"{} w \"Work\" id \"{}\" {{}}",
|
"{} w \"Work\" id \"{}\" {{}}",
|
||||||
if layer == Layer::Oa {
|
if layer == Layer::Oa {
|
||||||
@@ -206,13 +224,19 @@ fn complete_oa_sa_forward_model_warning_and_original_authority() {
|
|||||||
id(2)
|
id(2)
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
warning.diagnostic.span,
|
resolved.warnings(),
|
||||||
span(
|
expected_leaf_work_warnings(
|
||||||
&bundle.files["main.arcadia"],
|
span(
|
||||||
&declaration,
|
&bundle.files["main.arcadia"],
|
||||||
0,
|
&declaration,
|
||||||
declaration.len()
|
0,
|
||||||
)
|
declaration.len()
|
||||||
|
),
|
||||||
|
5,
|
||||||
|
1
|
||||||
|
),
|
||||||
|
"complete {layer:?} warning oracle; actual diagnostics: {:#?}",
|
||||||
|
resolved.warnings()
|
||||||
);
|
);
|
||||||
assert_eq!(resolved.expressions.len(), 1);
|
assert_eq!(resolved.expressions.len(), 1);
|
||||||
assert_eq!(resolved.occurrences.len(), 1);
|
assert_eq!(resolved.occurrences.len(), 1);
|
||||||
@@ -575,9 +599,22 @@ fn complete_static_architecture_and_unicode_warning_mapping() {
|
|||||||
let source = bundle.files.get_mut("main.arcadia").unwrap();
|
let source = bundle.files.get_mut("main.arcadia").unwrap();
|
||||||
*source = format!("// 雪\r\n{}", source.replace('\n', "\r\n"));
|
*source = format!("// 雪\r\n{}", source.replace('\n', "\r\n"));
|
||||||
let resolved = accepted(&bundle);
|
let resolved = accepted(&bundle);
|
||||||
let warning = &resolved.warnings()[0].diagnostic;
|
let declaration = format!("oa_activity w \"Work\" id \"{}\" {{}}", id(2));
|
||||||
assert_eq!(warning.line, 6);
|
assert_eq!(
|
||||||
assert_eq!(warning.column, 1);
|
resolved.warnings(),
|
||||||
|
expected_leaf_work_warnings(
|
||||||
|
span(
|
||||||
|
&bundle.files["main.arcadia"],
|
||||||
|
&declaration,
|
||||||
|
0,
|
||||||
|
declaration.len()
|
||||||
|
),
|
||||||
|
6,
|
||||||
|
1
|
||||||
|
),
|
||||||
|
"complete CRLF warning oracle; actual diagnostics: {:#?}",
|
||||||
|
resolved.warnings()
|
||||||
|
);
|
||||||
// Same physical line: the two header-name scalars occupy seven UTF-8
|
// Same physical line: the two header-name scalars occupy seven UTF-8
|
||||||
// bytes. Independently authored coordinates distinguish column60 from
|
// bytes. Independently authored coordinates distinguish column60 from
|
||||||
// byte-column65; the warning covers the complete Work declaration.
|
// byte-column65; the warning covers the complete Work declaration.
|
||||||
@@ -593,19 +630,18 @@ fn complete_static_architecture_and_unicode_warning_mapping() {
|
|||||||
)]),
|
)]),
|
||||||
};
|
};
|
||||||
let inline_value = accepted(&inline);
|
let inline_value = accepted(&inline);
|
||||||
assert_eq!(inline_value.warnings().len(), 1);
|
|
||||||
let inline_warning = &inline_value.warnings()[0];
|
|
||||||
assert_eq!(inline_warning.path, "main.arcadia");
|
|
||||||
assert_eq!(inline_warning.diagnostic.code, "unallocated_leaf");
|
|
||||||
assert_eq!(inline_warning.diagnostic.object_id, Some(id(2)));
|
|
||||||
assert_eq!(inline_warning.diagnostic.line, 2);
|
|
||||||
assert_eq!(inline_warning.diagnostic.column, 60);
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
inline_warning.diagnostic.span,
|
inline_value.warnings(),
|
||||||
Span {
|
expected_leaf_work_warnings(
|
||||||
start: 76,
|
Span {
|
||||||
end: 141
|
start: 76,
|
||||||
}
|
end: 141
|
||||||
|
},
|
||||||
|
2,
|
||||||
|
60
|
||||||
|
),
|
||||||
|
"complete same-line Unicode warning oracle; actual diagnostics: {:#?}",
|
||||||
|
inline_value.warnings()
|
||||||
);
|
);
|
||||||
let mut bad = bundle.clone();
|
let mut bad = bundle.clone();
|
||||||
*bad.files.get_mut("main.arcadia").unwrap() =
|
*bad.files.get_mut("main.arcadia").unwrap() =
|
||||||
|
|||||||
Reference in New Issue
Block a user