Merge pull request #139 from dwijnand/fix-EscHelpers.removeEscapeSequences

Make EscHelpers.removeEscapeSequences handle partial escape sequences
This commit is contained in:
eugene yokota 2017-12-21 22:38:51 -05:00 committed by GitHub
commit 0ed5cb6573
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 1 deletions

View File

@ -66,8 +66,9 @@ object EscHelpers {
} else {
sb.append(s, start, escIndex)
val next: Int =
if (escIndex + 1 >= s.length) skipESC(s, escIndex + 1)
// If it's a CSI we skip past it and then look for a terminator.
if (isCSI(s.charAt(escIndex + 1))) skipESC(s, escIndex + 2)
else if (isCSI(s.charAt(escIndex + 1))) skipESC(s, escIndex + 2)
else if (isAnsiTwoCharacterTerminator(s.charAt(escIndex + 1))) escIndex + 2
else {
// There could be non-ANSI character sequences we should make sure we handle here.

View File

@ -34,6 +34,16 @@ object Escapes extends Properties("Escapes") {
!hasEscapeSequence(removed)
}
private[this] final val ecs = ESC.toString
private val partialEscapeSequences =
Gen.oneOf(Gen const ecs, Gen const ecs ++ "[", Gen.choose('@', '_').map(ecs :+ _))
property("removeEscapeSequences handles partial escape sequences") =
forAll(partialEscapeSequences) { s =>
val removed: String = removeEscapeSequences(s)
s"Escape sequence removed: '$removed'" |: !hasEscapeSequence(removed)
}
property("removeEscapeSequences returns string without escape sequences") =
forAllNoShrink(genWithoutEscape, genEscapePairs) {
(start: String, escapes: List[EscapeAndNot]) =>