mod utils;
use crate::utils::ink_version_from_path;
use ink_analyzer::{Analysis, TextRange, TextSize};
use test_utils::{TestCaseParams, TestCaseResults};
#[test]
fn hover_works() {
for test_group in test_utils::fixtures::hover_fixtures() {
let original_code = test_utils::read_source_code(test_group.source);
for test_case in test_group.test_cases {
let mut test_code = original_code.clone();
if let Some(modifications) = test_case.modifications {
test_utils::apply_test_modifications(&mut test_code, &modifications);
}
let (range_start_pat, range_end_pat) = match test_case.params.unwrap() {
TestCaseParams::Hover(it) => Some((it.start_pat, it.end_pat)),
_ => None,
}
.unwrap();
let range = TextRange::new(
TextSize::from(
test_utils::parse_offset_at(&test_code, range_start_pat).unwrap() as u32,
),
TextSize::from(
test_utils::parse_offset_at(&test_code, range_end_pat).unwrap() as u32,
),
);
let version = ink_version_from_path(test_group.source);
let results = Analysis::new(&test_code, version).hover(range);
let expected_results = match test_case.results {
TestCaseResults::Hover(it) => Some(it),
_ => None,
}
.unwrap();
assert_eq!(
results.is_some(),
expected_results.is_some(),
"source: {}",
test_group.source
);
if results.is_some() {
assert!(
results
.as_ref()
.unwrap()
.content
.contains(expected_results.as_ref().unwrap().text),
"source: {}",
test_group.source
);
}
assert_eq!(
results.as_ref().map(|hover| hover.range),
expected_results.map(|result| TextRange::new(
TextSize::from(
test_utils::parse_offset_at(&test_code, result.start_pat).unwrap() as u32
),
TextSize::from(
test_utils::parse_offset_at(&test_code, result.end_pat).unwrap() as u32
),
)),
"source: {}",
test_group.source
);
}
}
}