diff options
| author | Oliver Schneider <git1984941651981@oli-obk.de> | 2015-06-23 11:43:27 +0200 |
|---|---|---|
| committer | Oliver Schneider <git1984941651981@oli-obk.de> | 2015-06-24 12:25:40 +0200 |
| commit | c5dfd34c615b0586a101e9e66770a5c4fd31c852 (patch) | |
| tree | 3b70b0cc38d614ca0eae3b15e489fa07eaa26b0e /src/libsyntax | |
| parent | 599bf45ac9afc309332388fe4bc42a100e3d1586 (diff) | |
| download | rust-c5dfd34c615b0586a101e9e66770a5c4fd31c852.tar.gz rust-c5dfd34c615b0586a101e9e66770a5c4fd31c852.zip | |
Added unit test for code indent of multi-line errors
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/diagnostic.rs | 67 |
1 files changed, 66 insertions, 1 deletions
diff --git a/src/libsyntax/diagnostic.rs b/src/libsyntax/diagnostic.rs index 6c2e3dc6330..ec93d2c5536 100644 --- a/src/libsyntax/diagnostic.rs +++ b/src/libsyntax/diagnostic.rs @@ -598,7 +598,11 @@ fn highlight_lines(err: &mut EmitterWriter, assert!(display_line_infos.len() > 0); let mut max_line_num = display_line_infos[display_line_infos.len() - 1].line_index + 1; let mut digits = 0; - while max_line_num > 0 { max_line_num /= 10; digits += 1; } + while max_line_num > 0 { + max_line_num /= 10; + digits += 1; + } + // Print the offending lines for (line_info, line) in display_line_infos.iter().zip(display_line_strings) { try!(write!(&mut err.dst, "{}:{:>width$} {}\n", @@ -801,3 +805,64 @@ pub fn expect<T, M>(diag: &SpanHandler, opt: Option<T>, msg: M) -> T where None => diag.handler().bug(&msg()), } } + +#[cfg(test)] +mod test { + use super::{EmitterWriter, highlight_lines, Level}; + use codemap::{mk_sp, CodeMap, BytePos}; + use std::sync::{Arc, Mutex}; + use std::io::{self, Write}; + use std::str::from_utf8; + + // Diagnostic doesn't align properly in span where line number increases by one digit + #[test] + fn test_hilight_suggestion_issue_11715() { + struct Sink(Arc<Mutex<Vec<u8>>>); + impl Write for Sink { + fn write(&mut self, data: &[u8]) -> io::Result<usize> { + Write::write(&mut *self.0.lock().unwrap(), data) + } + fn flush(&mut self) -> io::Result<()> { Ok(()) } + } + let data = Arc::new(Mutex::new(Vec::new())); + let mut ew = EmitterWriter::new(Box::new(Sink(data.clone())), None); + let cm = CodeMap::new(); + let content = "abcdefg + koksi + line3 + line4 + cinq + line6 + line7 + line8 + line9 + line10 + e-lä-vän + tolv + dreizehn + "; + let file = cm.new_filemap("dummy.txt".to_string(), content.to_string()); + for (i, b) in content.bytes().enumerate() { + if b == b'\n' { + file.next_line(BytePos(i as u32)); + } + } + let start = file.lines.borrow()[7]; + let end = file.lines.borrow()[11]; + let sp = mk_sp(start, end); + let lvl = Level::Error; + println!("span_to_lines"); + let lines = cm.span_to_lines(sp); + println!("highlight_lines"); + highlight_lines(&mut ew, &cm, sp, lvl, lines).unwrap(); + println!("done"); + let vec = data.lock().unwrap().clone(); + let vec: &[u8] = &vec; + println!("{}", from_utf8(vec).unwrap()); + assert_eq!(vec, "dummy.txt: 8 \n\ + dummy.txt: 9 \n\ + dummy.txt:10 \n\ + dummy.txt:11 \n\ + dummy.txt:12 \n".as_bytes()); + } +} |
