Use ANSI colors for test results; more polish (#771)

Any thrown Pkl Errors are colored in the simple test report!

Also:
* Refactor `TextFormatter` to be more generic; rename to `TextFormattingStringBuilder`
* Adjust test report slightly (no emojis, add more spacing).
* Introduce `ColorTheme` class.
* Make stack frame descriptors colored as "faint"

Also: this changes the summary so it summarizes _all_ modules, rather than a summary per module.

---------

Co-authored-by: Islon Scherer <islonscherer@gmail.com>
Co-authored-by: Philip K.F. Hölzenspies <holzensp@gmail.com>
This commit is contained in:
Daniel Chao
2024-11-04 14:14:19 -08:00
committed by GitHub
parent 4b4d81ba93
commit 40a08affa6
18 changed files with 688 additions and 381 deletions

View File

@@ -30,7 +30,7 @@ class TestsTest : AbstractTest() {
writePklFile()
val res = runTask("evalTest")
assertThat(res.output).contains(" should pass")
assertThat(res.output).contains(" should pass")
}
@Test
@@ -49,7 +49,7 @@ class TestsTest : AbstractTest() {
)
val res = runTask("evalTest", expectFailure = true)
assertThat(res.output).contains(" should fail")
assertThat(res.output).contains(" should fail")
assertThat(res.output).contains("1 == 3")
assertThat(res.output).contains(""""foo" == "bar"""")
}
@@ -81,15 +81,16 @@ class TestsTest : AbstractTest() {
> Task :evalTest FAILED
module test
facts
should pass
error
should pass
error
Pkl Error
exception
9 | throw("exception")
^^^^^^^^^^^^^^^^^^
at test#facts["error"][#1] (file:///file, line x)
❌ 50.0% tests pass [1/2 failed], 66.7% asserts pass [1/3 failed]
50.0% tests pass [1/2 failed], 66.7% asserts pass [1/3 failed]
"""
.trimIndent()
)
@@ -118,15 +119,15 @@ class TestsTest : AbstractTest() {
pkl: TRACE: 8 = 8 (file:///file, line x)
module test
facts
sum numbers
divide numbers
fail
sum numbers
divide numbers
fail
4 == 9 (file:///file, line x)
"foo" == "bar" (file:///file, line x)
examples
user 0
user 1
#1 (file:///file, line x):
user 0
user 1
#1: (file:///file, line x)
Expected: (file:///file, line x)
new {
name = "Parrot"
@@ -137,7 +138,8 @@ class TestsTest : AbstractTest() {
name = "Welma"
age = 35
}
❌ 60.0% tests pass [2/5 failed], 66.7% asserts pass [3/9 failed]
60.0% tests pass [2/5 failed], 66.7% asserts pass [3/9 failed]
"""
.trimIndent()
)
@@ -187,8 +189,8 @@ class TestsTest : AbstractTest() {
> Task :evalTest FAILED
module test
facts
should pass
error
should pass
error
Pkl Error
exception
@@ -196,9 +198,9 @@ class TestsTest : AbstractTest() {
^^^^^^^^^^^^^^^^^^
at test#facts["error"][#1] (file:///file, line x)
examples
user 0
user 1
#1 (file:///file, line x):
user 0
user 1
#1: (file:///file, line x)
Expected: (file:///file, line x)
new {
name = "Parrot"
@@ -209,7 +211,8 @@ class TestsTest : AbstractTest() {
name = "Welma"
age = 35
}
❌ 50.0% tests pass [2/4 failed], 66.7% asserts pass [2/6 failed]
50.0% tests pass [2/4 failed], 66.7% asserts pass [2/6 failed]
"""
.trimIndent()
@@ -241,7 +244,7 @@ class TestsTest : AbstractTest() {
</testcase>
<testcase classname="test.examples" name="user 0"></testcase>
<testcase classname="test.examples" name="user 1">
<failure message="Example Failure">#1 (file:///file, line x):
<failure message="Example Failure">#1: (file:///file, line x)
Expected: (file:///file, line x)
new {
name = &quot;Parrot&quot;
@@ -301,7 +304,7 @@ class TestsTest : AbstractTest() {
</testcase>
<testcase classname="test.examples" name="user 0"></testcase>
<testcase classname="test.examples" name="user 1">
<failure message="Example Failure">#1 (file:///file, line x):
<failure message="Example Failure">#1: (file:///file, line x)
Expected: (file:///file, line x)
new {
name = &quot;Parrot&quot;