From ceac524eddb3fc0e235dad77dea4c15cf7e2271f Mon Sep 17 00:00:00 2001 From: radarsh Date: Thu, 7 Feb 2019 21:35:00 +0000 Subject: [PATCH] Fix double escaping of brackets --- .../gradle/testlogger/theme/MochaTheme.groovy | 3 ++- .../gradle/testlogger/theme/PlainTheme.groovy | 3 ++- .../gradle/testlogger/theme/StandardTheme.groovy | 3 ++- .../gradle/testlogger/util/RendererUtils.groovy | 4 ++++ .../gradle/testlogger/theme/BaseThemeSpec.groovy | 2 +- .../testlogger/theme/MochaParallelThemeSpec.groovy | 4 ++-- .../gradle/testlogger/theme/MochaThemeSpec.groovy | 4 ++-- .../testlogger/theme/PlainParallelThemeSpec.groovy | 4 ++-- .../gradle/testlogger/theme/PlainThemeSpec.groovy | 4 ++-- .../theme/StandardParallelThemeSpec.groovy | 4 ++-- .../gradle/testlogger/theme/StandardThemeSpec.groovy | 4 ++-- .../gradle/testlogger/util/RendererUtilsSpec.groovy | 12 ++++++++++++ 12 files changed, 35 insertions(+), 16 deletions(-) diff --git a/src/main/groovy/com/adarshr/gradle/testlogger/theme/MochaTheme.groovy b/src/main/groovy/com/adarshr/gradle/testlogger/theme/MochaTheme.groovy index 60116e3..b2d375f 100644 --- a/src/main/groovy/com/adarshr/gradle/testlogger/theme/MochaTheme.groovy +++ b/src/main/groovy/com/adarshr/gradle/testlogger/theme/MochaTheme.groovy @@ -6,6 +6,7 @@ import groovy.transform.CompileStatic import groovy.transform.InheritConstructors import org.gradle.api.tasks.testing.TestResult.ResultType +import static com.adarshr.gradle.testlogger.util.RendererUtils.preserveAnsi import static java.lang.System.lineSeparator import static org.gradle.api.tasks.testing.TestResult.ResultType.* @@ -116,7 +117,7 @@ class MochaTheme extends AbstractTheme { return '' } - lines = lines.replace('[', '\\[') + lines = preserveAnsi(lines) def indentation = ' ' * indent def line = new StringBuilder("[grey]${lineSeparator()}") diff --git a/src/main/groovy/com/adarshr/gradle/testlogger/theme/PlainTheme.groovy b/src/main/groovy/com/adarshr/gradle/testlogger/theme/PlainTheme.groovy index b814a28..389f714 100644 --- a/src/main/groovy/com/adarshr/gradle/testlogger/theme/PlainTheme.groovy +++ b/src/main/groovy/com/adarshr/gradle/testlogger/theme/PlainTheme.groovy @@ -5,6 +5,7 @@ import com.adarshr.gradle.testlogger.TestResultWrapper import groovy.transform.CompileStatic import groovy.transform.InheritConstructors +import static com.adarshr.gradle.testlogger.util.RendererUtils.preserveAnsi import static java.lang.System.lineSeparator import static org.gradle.api.tasks.testing.TestResult.ResultType.* @@ -91,7 +92,7 @@ class PlainTheme extends AbstractTheme { return '' } - lines = lines.replace('[', '\\[') + lines = preserveAnsi(lines) def indentation = ' ' * indent def line = new StringBuilder(lineSeparator()) diff --git a/src/main/groovy/com/adarshr/gradle/testlogger/theme/StandardTheme.groovy b/src/main/groovy/com/adarshr/gradle/testlogger/theme/StandardTheme.groovy index f0d7fd3..5007b78 100644 --- a/src/main/groovy/com/adarshr/gradle/testlogger/theme/StandardTheme.groovy +++ b/src/main/groovy/com/adarshr/gradle/testlogger/theme/StandardTheme.groovy @@ -5,6 +5,7 @@ import com.adarshr.gradle.testlogger.TestResultWrapper import groovy.transform.CompileStatic import groovy.transform.InheritConstructors +import static com.adarshr.gradle.testlogger.util.RendererUtils.preserveAnsi import static java.lang.System.lineSeparator import static org.gradle.api.tasks.testing.TestResult.ResultType.* @@ -108,7 +109,7 @@ class StandardTheme extends AbstractTheme { return '' } - lines = lines.replace('[', '\\[') + lines = preserveAnsi(lines) def indentation = ' ' * indent def line = new StringBuilder("[default]${lineSeparator()}") diff --git a/src/main/groovy/com/adarshr/gradle/testlogger/util/RendererUtils.groovy b/src/main/groovy/com/adarshr/gradle/testlogger/util/RendererUtils.groovy index 2a859ba..8092b94 100644 --- a/src/main/groovy/com/adarshr/gradle/testlogger/util/RendererUtils.groovy +++ b/src/main/groovy/com/adarshr/gradle/testlogger/util/RendererUtils.groovy @@ -8,4 +8,8 @@ class RendererUtils { static String escape(String text) { text?.replace('\u001B', '')?.replace('[', '\\[')?.replace(']', '\\]') } + + static String preserveAnsi(String text) { + text?.replace('\u001B[', '\u001B\\[') + } } diff --git a/src/test/groovy/com/adarshr/gradle/testlogger/theme/BaseThemeSpec.groovy b/src/test/groovy/com/adarshr/gradle/testlogger/theme/BaseThemeSpec.groovy index 79a9b6e..708c3b1 100644 --- a/src/test/groovy/com/adarshr/gradle/testlogger/theme/BaseThemeSpec.groovy +++ b/src/test/groovy/com/adarshr/gradle/testlogger/theme/BaseThemeSpec.groovy @@ -12,7 +12,7 @@ abstract class BaseThemeSpec extends Specification { protected def testLoggerExtensionMock = Mock(TestLoggerExtension) protected def testDescriptorMock = Mock(TestDescriptorWrapper) protected def testResultMock = Mock(TestResultWrapper) - protected def streamLines = "Hello${lineSeparator()}World" + protected def streamLines = "Hello${lineSeparator()}World [brackets] \u001B[0mANSI" def setup() { testResultMock.loggable >> true diff --git a/src/test/groovy/com/adarshr/gradle/testlogger/theme/MochaParallelThemeSpec.groovy b/src/test/groovy/com/adarshr/gradle/testlogger/theme/MochaParallelThemeSpec.groovy index 3a66f1f..57eeeba 100644 --- a/src/test/groovy/com/adarshr/gradle/testlogger/theme/MochaParallelThemeSpec.groovy +++ b/src/test/groovy/com/adarshr/gradle/testlogger/theme/MochaParallelThemeSpec.groovy @@ -187,7 +187,7 @@ class MochaParallelThemeSpec extends BaseThemeSpec { theme.testStandardStreamText(streamLines, testResultMock) == '''|[grey] | Hello - | World[/] + | World [brackets] \u001B\\[0mANSI[/] |'''.stripMargin().replace('\n', lineSeparator()) } @@ -207,7 +207,7 @@ class MochaParallelThemeSpec extends BaseThemeSpec { theme.suiteStandardStreamText(streamLines, testResultMock) == '''|[grey] | Hello - | World[/] + | World [brackets] \u001B\\[0mANSI[/] |'''.stripMargin().replace('\n', lineSeparator()) } diff --git a/src/test/groovy/com/adarshr/gradle/testlogger/theme/MochaThemeSpec.groovy b/src/test/groovy/com/adarshr/gradle/testlogger/theme/MochaThemeSpec.groovy index cdef6de..808e56d 100644 --- a/src/test/groovy/com/adarshr/gradle/testlogger/theme/MochaThemeSpec.groovy +++ b/src/test/groovy/com/adarshr/gradle/testlogger/theme/MochaThemeSpec.groovy @@ -188,7 +188,7 @@ class MochaThemeSpec extends BaseThemeSpec { theme.testStandardStreamText(streamLines, testResultMock) == '''|[grey] | Hello - | World[/] + | World [brackets] \u001B\\[0mANSI[/] |'''.stripMargin().replace('\n', lineSeparator()) } @@ -208,7 +208,7 @@ class MochaThemeSpec extends BaseThemeSpec { theme.suiteStandardStreamText(streamLines, testResultMock) == '''|[grey] | Hello - | World[/] + | World [brackets] \u001B\\[0mANSI[/] |'''.stripMargin().replace('\n', lineSeparator()) } diff --git a/src/test/groovy/com/adarshr/gradle/testlogger/theme/PlainParallelThemeSpec.groovy b/src/test/groovy/com/adarshr/gradle/testlogger/theme/PlainParallelThemeSpec.groovy index 17f283e..5738657 100644 --- a/src/test/groovy/com/adarshr/gradle/testlogger/theme/PlainParallelThemeSpec.groovy +++ b/src/test/groovy/com/adarshr/gradle/testlogger/theme/PlainParallelThemeSpec.groovy @@ -141,7 +141,7 @@ class PlainParallelThemeSpec extends BaseThemeSpec { theme.testStandardStreamText(streamLines, testResultMock) == '''| | Hello - | World + | World [brackets] \u001B\\[0mANSI |'''.stripMargin().replace('\n', lineSeparator()) } @@ -163,7 +163,7 @@ class PlainParallelThemeSpec extends BaseThemeSpec { theme.suiteStandardStreamText(streamLines, testResultMock) == '''| | Hello - | World + | World [brackets] \u001B\\[0mANSI |'''.stripMargin().replace('\n', lineSeparator()) } diff --git a/src/test/groovy/com/adarshr/gradle/testlogger/theme/PlainThemeSpec.groovy b/src/test/groovy/com/adarshr/gradle/testlogger/theme/PlainThemeSpec.groovy index 177504a..b1209c2 100644 --- a/src/test/groovy/com/adarshr/gradle/testlogger/theme/PlainThemeSpec.groovy +++ b/src/test/groovy/com/adarshr/gradle/testlogger/theme/PlainThemeSpec.groovy @@ -142,7 +142,7 @@ class PlainThemeSpec extends BaseThemeSpec { theme.testStandardStreamText(streamLines, testResultMock) == '''| | Hello - | World + | World [brackets] \u001B\\[0mANSI |'''.stripMargin().replace('\n', lineSeparator()) } @@ -162,7 +162,7 @@ class PlainThemeSpec extends BaseThemeSpec { theme.suiteStandardStreamText(streamLines, testResultMock) == '''| | Hello - | World + | World [brackets] \u001B\\[0mANSI |'''.stripMargin().replace('\n', lineSeparator()) } diff --git a/src/test/groovy/com/adarshr/gradle/testlogger/theme/StandardParallelThemeSpec.groovy b/src/test/groovy/com/adarshr/gradle/testlogger/theme/StandardParallelThemeSpec.groovy index 28a5017..a8e6962 100644 --- a/src/test/groovy/com/adarshr/gradle/testlogger/theme/StandardParallelThemeSpec.groovy +++ b/src/test/groovy/com/adarshr/gradle/testlogger/theme/StandardParallelThemeSpec.groovy @@ -167,7 +167,7 @@ class StandardParallelThemeSpec extends BaseThemeSpec { theme.testStandardStreamText(streamLines, testResultMock) == '''|[default] | Hello - | World[/] + | World [brackets] \u001B\\[0mANSI[/] |'''.stripMargin().replace('\n', lineSeparator()) } @@ -187,7 +187,7 @@ class StandardParallelThemeSpec extends BaseThemeSpec { theme.suiteStandardStreamText(streamLines, testResultMock) == '''|[default] | Hello - | World[/] + | World [brackets] \u001B\\[0mANSI[/] |'''.stripMargin().replace('\n', lineSeparator()) } diff --git a/src/test/groovy/com/adarshr/gradle/testlogger/theme/StandardThemeSpec.groovy b/src/test/groovy/com/adarshr/gradle/testlogger/theme/StandardThemeSpec.groovy index 3998c2f..beedc62 100644 --- a/src/test/groovy/com/adarshr/gradle/testlogger/theme/StandardThemeSpec.groovy +++ b/src/test/groovy/com/adarshr/gradle/testlogger/theme/StandardThemeSpec.groovy @@ -164,7 +164,7 @@ class StandardThemeSpec extends BaseThemeSpec { theme.testStandardStreamText(streamLines, testResultMock) == '''|[default] | Hello - | World[/] + | World [brackets] \u001B\\[0mANSI[/] |'''.stripMargin().replace('\n', lineSeparator()) } @@ -184,7 +184,7 @@ class StandardThemeSpec extends BaseThemeSpec { theme.suiteStandardStreamText(streamLines, testResultMock) == '''|[default] | Hello - | World[/] + | World [brackets] \u001B\\[0mANSI[/] |'''.stripMargin().replace('\n', lineSeparator()) } diff --git a/src/test/groovy/com/adarshr/gradle/testlogger/util/RendererUtilsSpec.groovy b/src/test/groovy/com/adarshr/gradle/testlogger/util/RendererUtilsSpec.groovy index 87315d2..55e474f 100644 --- a/src/test/groovy/com/adarshr/gradle/testlogger/util/RendererUtilsSpec.groovy +++ b/src/test/groovy/com/adarshr/gradle/testlogger/util/RendererUtilsSpec.groovy @@ -17,4 +17,16 @@ class RendererUtilsSpec extends Specification { '[escape]' | '\\[escape\\]' '\u001Btext' | 'text' } + + @Unroll + def "preserve ansi #text"() { + expect: + RendererUtils.preserveAnsi(text) == expected + where: + text | expected + null | null + '' | '' + '[do not escape]' | '[do not escape]' + '\u001B[0mANSI' | '\u001B\\[0mANSI' + } }