2019-10-25 06:16:46 -05:00
|
|
|
//! Each assist definition has a special comment, which specifies docs and
|
|
|
|
//! example.
|
|
|
|
//!
|
|
|
|
//! We collect all the example and write the as tests in this module.
|
|
|
|
|
|
|
|
mod generated;
|
|
|
|
|
2019-11-04 13:12:49 -06:00
|
|
|
use ra_db::{fixture::WithFixture, FileRange};
|
2019-10-26 11:58:18 -05:00
|
|
|
use test_utils::{assert_eq_text, extract_range_or_offset};
|
2019-10-25 06:16:46 -05:00
|
|
|
|
2019-11-04 13:28:47 -06:00
|
|
|
use crate::test_db::TestDB;
|
|
|
|
|
2019-10-25 06:16:46 -05:00
|
|
|
fn check(assist_id: &str, before: &str, after: &str) {
|
2019-10-26 11:58:18 -05:00
|
|
|
let (selection, before) = extract_range_or_offset(before);
|
2019-11-04 13:21:15 -06:00
|
|
|
let (db, file_id) = TestDB::with_single_file(&before);
|
2019-10-26 11:58:18 -05:00
|
|
|
let frange = FileRange { file_id, range: selection.into() };
|
2019-10-25 06:16:46 -05:00
|
|
|
|
2020-01-11 16:40:36 -06:00
|
|
|
let assist = crate::assists(&db, frange)
|
2019-10-25 15:38:15 -05:00
|
|
|
.into_iter()
|
2020-01-11 16:40:36 -06:00
|
|
|
.find(|assist| assist.label.id.0 == assist_id)
|
2019-10-27 08:56:53 -05:00
|
|
|
.unwrap_or_else(|| {
|
|
|
|
panic!(
|
|
|
|
"\n\nAssist is not applicable: {}\nAvailable assists: {}",
|
|
|
|
assist_id,
|
|
|
|
crate::assists(&db, frange)
|
|
|
|
.into_iter()
|
2020-01-11 16:40:36 -06:00
|
|
|
.map(|assist| assist.label.id.0)
|
2019-10-27 08:56:53 -05:00
|
|
|
.collect::<Vec<_>>()
|
|
|
|
.join(", ")
|
|
|
|
)
|
|
|
|
});
|
2019-10-25 06:16:46 -05:00
|
|
|
|
2020-01-11 16:40:36 -06:00
|
|
|
let actual = assist.get_first_action().edit.apply(&before);
|
2019-10-25 06:16:46 -05:00
|
|
|
assert_eq_text!(after, &actual);
|
|
|
|
}
|