From 8215b74032de15481af15d3c5805c67158d80d96 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 27 Feb 2020 14:15:32 +0100 Subject: Move tests to a new file --- crates/ra_ide/src/syntax_highlighting/tests.rs | 127 +++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 crates/ra_ide/src/syntax_highlighting/tests.rs (limited to 'crates/ra_ide/src/syntax_highlighting') diff --git a/crates/ra_ide/src/syntax_highlighting/tests.rs b/crates/ra_ide/src/syntax_highlighting/tests.rs new file mode 100644 index 000000000..ff23d4ac5 --- /dev/null +++ b/crates/ra_ide/src/syntax_highlighting/tests.rs @@ -0,0 +1,127 @@ +use std::fs; + +use test_utils::{assert_eq_text, project_dir, read_text}; + +use crate::{ + mock_analysis::{single_file, MockAnalysis}, + FileRange, TextRange, +}; + +#[test] +fn test_highlighting() { + let (analysis, file_id) = single_file( + r#" +#[derive(Clone, Debug)] +struct Foo { + pub x: i32, + pub y: i32, +} + +fn foo() -> T { + unimplemented!(); + foo::(); +} + +macro_rules! def_fn { + ($($tt:tt)*) => {$($tt)*} +} + +def_fn!{ + fn bar() -> u32 { + 100 + } +} + +// comment +fn main() { + println!("Hello, {}!", 92); + + let mut vec = Vec::new(); + if true { + let x = 92; + vec.push(Foo { x, y: 1 }); + } + unsafe { vec.set_len(0); } + + let mut x = 42; + let y = &mut x; + let z = &y; + + y; +} + +enum E { + V(X) +} + +impl E { + fn new() -> E {} +} +"# + .trim(), + ); + let dst_file = project_dir().join("crates/ra_ide/src/snapshots/highlighting.html"); + let actual_html = &analysis.highlight_as_html(file_id, false).unwrap(); + let expected_html = &read_text(&dst_file); + fs::write(dst_file, &actual_html).unwrap(); + assert_eq_text!(expected_html, actual_html); +} + +#[test] +fn test_rainbow_highlighting() { + let (analysis, file_id) = single_file( + r#" +fn main() { + let hello = "hello"; + let x = hello.to_string(); + let y = hello.to_string(); + + let x = "other color please!"; + let y = x.to_string(); +} + +fn bar() { + let mut hello = "hello"; +} +"# + .trim(), + ); + let dst_file = project_dir().join("crates/ra_ide/src/snapshots/rainbow_highlighting.html"); + let actual_html = &analysis.highlight_as_html(file_id, true).unwrap(); + let expected_html = &read_text(&dst_file); + fs::write(dst_file, &actual_html).unwrap(); + assert_eq_text!(expected_html, actual_html); +} + +#[test] +fn accidentally_quadratic() { + let file = project_dir().join("crates/ra_syntax/test_data/accidentally_quadratic"); + let src = fs::read_to_string(file).unwrap(); + + let mut mock = MockAnalysis::new(); + let file_id = mock.add_file("/main.rs", &src); + let host = mock.analysis_host(); + + // let t = std::time::Instant::now(); + let _ = host.analysis().highlight(file_id).unwrap(); + // eprintln!("elapsed: {:?}", t.elapsed()); +} + +#[test] +fn test_ranges() { + let (analysis, file_id) = single_file( + r#" + #[derive(Clone, Debug)] + struct Foo { + pub x: i32, + pub y: i32, + }"#, + ); + + // The "x" + let highlights = &analysis + .highlight_range(FileRange { file_id, range: TextRange::offset_len(82.into(), 1.into()) }) + .unwrap(); + + assert_eq!(&highlights[0].highlight.to_string(), "field"); +} -- cgit v1.2.3