properly handles unknown ansi escapes by adding them as plain text

This commit is contained in:
David Bittner
2019-05-02 23:04:41 -04:00
parent c1764f73ab
commit b1c17325f7
4 changed files with 30 additions and 65 deletions

View File

@@ -207,8 +207,11 @@ impl<'a> Iterator for ParserIterator<'a> {
self.dat = &ret.0;
Some(ret.1)
}else{
let pos = self.dat[loc..].find('\x1b');
let pos = self.dat[(loc+1)..].find('\u{1b}');
if let Some(loc) = pos {
//Added to because it's based one character ahead
let loc = loc+1;
let temp = &self.dat[..loc];
self.dat = &self.dat[loc..];

View File

@@ -1,9 +1,20 @@
use super::*;
macro_rules! test_parser {
($func:expr, $string:expr) => ($func($string));
}
#[test]
fn test_invalid_escapes() {
let parse = "4;31;1;5m";
let temp = parse_escape(parse);
assert!(!temp.is_ok());
}
#[test]
fn test_graphics_mode() {
let parse = "4;31;42m";
let temp = graphics_mode(parse);
let temp = test_parser!(graphics_mode, "4;31;42m");
assert!(temp.is_ok());
assert_eq!(AnsiSequence::SetGraphicsMode(
@@ -12,8 +23,7 @@ fn test_graphics_mode() {
temp.unwrap().1
);
let parse = "4m";
let temp = graphics_mode(parse);
let temp = test_parser!(graphics_mode, "4m");
assert!(temp.is_ok());
assert_eq!(AnsiSequence::SetGraphicsMode(vec![4]),
@@ -23,9 +33,7 @@ fn test_graphics_mode() {
#[test]
fn test_set_mode() {
let parse = "=7h";
let temp = set_mode(parse);
let temp = test_parser!(set_mode, "=7h");
assert_eq!(AnsiSequence::SetMode(7), temp.unwrap().1);
}
@@ -46,3 +54,13 @@ fn test_parser_iterator() {
assert_eq!(strings.len(), 6);
}
#[test]
fn test_parser_iterator_failure() {
let parse_str = "\x1b[=25l\x1b[=7l\x1b[0m\x1b[36;1;15;2m\x1b[1m-`";
let strings: Vec<Output> = ParserIterator::new(parse_str)
.collect();
println!("{:#?}", strings);
assert_eq!(strings.len(), 6);
}