Skip to content

Commit

Permalink
test: skip terminfo parsing in Miri
Browse files Browse the repository at this point in the history
  • Loading branch information
RalfJung committed Aug 7, 2022
1 parent 1f5d8d4 commit 5076c90
Showing 1 changed file with 20 additions and 0 deletions.
20 changes: 20 additions & 0 deletions library/test/src/term/terminfo/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,17 @@ impl TermInfo {

/// Creates a TermInfo for the named terminal.
pub(crate) fn from_name(name: &str) -> Result<TermInfo, Error> {
if cfg!(miri) {
// Avoid all the work of parsing the terminfo (it's pretty slow under Miri), and just
// assume that the standard color codes work (like e.g. the 'colored' crate).
return Ok(TermInfo {
names: Default::default(),
bools: Default::default(),
numbers: Default::default(),
strings: Default::default(),
});
}

get_dbpath_for_term(name)
.ok_or_else(|| {
Error::IoError(io::Error::new(io::ErrorKind::NotFound, "terminfo file not found"))
Expand Down Expand Up @@ -119,13 +130,22 @@ pub(crate) struct TerminfoTerminal<T> {
impl<T: Write + Send> Terminal for TerminfoTerminal<T> {
fn fg(&mut self, color: color::Color) -> io::Result<bool> {
let color = self.dim_if_necessary(color);
if cfg!(miri) && color < 8 {
// The Miri logic for this only works for the most basic 8 colors, which we just assume
// the terminal will support. (`num_colors` is always 0 in Miri, so higher colors will
// just fail. But libtest doesn't use any higher colors anyway.)
return write!(self.out, "\x1B[3{color}m").and(Ok(true));
}
if self.num_colors > color {
return self.apply_cap("setaf", &[Param::Number(color as i32)]);
}
Ok(false)
}

fn reset(&mut self) -> io::Result<bool> {
if cfg!(miri) {
return write!(self.out, "\x1B[0m").and(Ok(true));
}
// are there any terminals that have color/attrs and not sgr0?
// Try falling back to sgr, then op
let cmd = match ["sgr0", "sgr", "op"].iter().find_map(|cap| self.ti.strings.get(*cap)) {
Expand Down

0 comments on commit 5076c90

Please sign in to comment.