提交 c7bdfd44 编写于 作者: B bors

Auto merge of #32341 - frewsxcv:compiletest-enum, r=nikomatsakis

Use enum for message kind in compiletest harness.

None
......@@ -9,14 +9,54 @@
// except according to those terms.
use self::WhichLine::*;
use std::fmt;
use std::fs::File;
use std::io::BufReader;
use std::io::prelude::*;
use std::path::Path;
use std::str::FromStr;
#[derive(Clone, Debug, PartialEq)]
pub enum ErrorKind {
Help,
Error,
Note,
Suggestion,
Warning,
}
impl FromStr for ErrorKind {
type Err = ();
fn from_str(s: &str) -> Result<Self, Self::Err> {
match &s.trim_right_matches(':') as &str {
"HELP" => Ok(ErrorKind::Help),
"ERROR" => Ok(ErrorKind::Error),
"NOTE" => Ok(ErrorKind::Note),
"SUGGESTION" => Ok(ErrorKind::Suggestion),
"WARN" => Ok(ErrorKind::Warning),
"WARNING" => Ok(ErrorKind::Warning),
_ => Err(()),
}
}
}
impl fmt::Display for ErrorKind {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
ErrorKind::Help => write!(f, "help"),
ErrorKind::Error => write!(f, "error"),
ErrorKind::Note => write!(f, "note"),
ErrorKind::Suggestion => write!(f, "suggestion"),
ErrorKind::Warning => write!(f, "warning"),
}
}
}
pub struct ExpectedError {
pub line_num: usize,
pub kind: String,
/// What kind of message we expect (e.g. warning, error, suggestion).
/// `None` if not specified or unknown message kind.
pub kind: Option<ErrorKind>,
pub msg: String,
}
......@@ -81,11 +121,11 @@ fn parse_expected(last_nonfollow_error: Option<usize>,
(false, line[start + tag.len()..].chars().take_while(|c| *c == '^').count())
};
let kind_start = start + tag.len() + adjusts + (follow as usize);
let letters = line[kind_start..].chars();
let kind = letters.skip_while(|c| c.is_whitespace())
.take_while(|c| !c.is_whitespace())
.flat_map(|c| c.to_lowercase())
.collect::<String>();
let kind = line[kind_start..].split_whitespace()
.next()
.expect("Encountered unexpected empty comment")
.parse::<ErrorKind>()
.ok();
let letters = line[kind_start..].chars();
let msg = letters.skip_while(|c| c.is_whitespace())
.skip_while(|c| !c.is_whitespace())
......
......@@ -11,7 +11,7 @@
use common::Config;
use common::{CompileFail, ParseFail, Pretty, RunFail, RunPass, RunPassValgrind};
use common::{Codegen, DebugInfoLldb, DebugInfoGdb, Rustdoc, CodegenUnits};
use errors;
use errors::{self, ErrorKind};
use header::TestProps;
use header;
use procsrv;
......@@ -1033,8 +1033,8 @@ fn check_expected_errors(revision: Option<&str>,
expected_errors.iter()
.fold((false, false),
|(acc_help, acc_note), ee|
(acc_help || ee.kind == "help:" || ee.kind == "help",
acc_note || ee.kind == "note:" || ee.kind == "note"));
(acc_help || ee.kind == Some(ErrorKind::Help),
acc_note || ee.kind == Some(ErrorKind::Note)));
// Scan and extract our error/warning messages,
// which look like:
......@@ -1052,15 +1052,15 @@ fn check_expected_errors(revision: Option<&str>,
let mut prev = 0;
for (i, ee) in expected_errors.iter().enumerate() {
if !found_flags[i] {
debug!("prefix={} ee.kind={} ee.msg={} line={}",
debug!("prefix={} ee.kind={:?} ee.msg={} line={}",
prefixes[i],
ee.kind,
ee.msg,
line);
// Suggestions have no line number in their output, so take on the line number of
// the previous expected error
if ee.kind == "suggestion" {
assert!(expected_errors[prev].kind == "help",
if ee.kind == Some(ErrorKind::Suggestion) {
assert!(expected_errors[prev].kind == Some(ErrorKind::Help),
"SUGGESTIONs must be preceded by a HELP");
if line.contains(&ee.msg) {
found_flags[i] = true;
......@@ -1070,7 +1070,7 @@ fn check_expected_errors(revision: Option<&str>,
}
if
(prefix_matches(line, &prefixes[i]) || continuation(line)) &&
line.contains(&ee.kind) &&
(ee.kind.is_none() || line.contains(&ee.kind.as_ref().unwrap().to_string())) &&
line.contains(&ee.msg)
{
found_flags[i] = true;
......@@ -1096,7 +1096,10 @@ fn check_expected_errors(revision: Option<&str>,
if !flag {
let ee = &expected_errors[i];
error(revision, &format!("expected {} on line {} not found: {}",
ee.kind, ee.line_num, ee.msg));
ee.kind.as_ref()
.map_or("message".into(),
|k| k.to_string()),
ee.line_num, ee.msg));
not_found += 1;
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册