Skip to content

Commit ccd8d68

Browse files
authoredSep 21, 2023
lexers: move to comparing bytes in tests (#856)
* test: fix up writing up float scores with trailing newlines This ensures we consistently write a trailing newline when RECORD=true is set. * lexers: update expected files using proper newlines This is the mechanical result of running: RECORD=true go test ./lexers * Assert lexer tests based on equality of byte encodings This helps to ensure that running RECORD=true go test ./lexers on a given commit for which the tests pass will not result in any changes in the working tree. Notes that as a result of this change, the following command results in a clean working tree: RECORD=true go test ./lexers Fixes #855
1 parent def00e9 commit ccd8d68

File tree

3 files changed

+45
-44
lines changed

3 files changed

+45
-44
lines changed
 

‎lexers/lexers_test.go

+43-42
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package lexers_test
22

33
import (
4-
"encoding/json"
4+
"bytes"
5+
"fmt"
56
"io"
67
"os"
78
"path/filepath"
@@ -64,41 +65,41 @@ func BenchmarkGet(b *testing.B) {
6465
}
6566
}
6667

67-
func FileTest(t *testing.T, lexer chroma.Lexer, actualFilename, expectedFilename string) {
68+
func FileTest(t *testing.T, lexer chroma.Lexer, sourceFile, expectedFilename string) {
6869
t.Helper()
69-
t.Run(lexer.Config().Name+"/"+actualFilename, func(t *testing.T) {
70+
t.Run(lexer.Config().Name+"/"+sourceFile, func(t *testing.T) {
7071
// Read and tokenise source text.
71-
actualText, err := os.ReadFile(actualFilename)
72+
sourceBytes, err := os.ReadFile(sourceFile)
7273
assert.NoError(t, err)
73-
actual, err := chroma.Tokenise(lexer, nil, string(actualText))
74+
actualTokens, err := chroma.Tokenise(lexer, nil, string(sourceBytes))
7475
assert.NoError(t, err)
7576

76-
if os.Getenv("RECORD") != "" {
77-
// Update the expected file with the generated output of this lexer
78-
f, err := os.Create(expectedFilename)
79-
defer f.Close() // nolint: gosec
80-
assert.NoError(t, err)
81-
for _, token := range actual {
82-
if token.Type == chroma.Error {
83-
t.Logf("Found Error token in lexer %s output: %s", lexer.Config().Name, repr.String(token))
84-
}
77+
// Check for error tokens early
78+
for _, token := range actualTokens {
79+
if token.Type == chroma.Error {
80+
t.Logf("Found Error token in lexer %s output: %s", lexer.Config().Name, repr.String(token))
8581
}
86-
assert.NoError(t, formatters.JSON.Format(f, nil, chroma.Literator(actual...)))
87-
} else {
88-
// Read expected JSON into token slice.
89-
var expected []chroma.Token
90-
r, err := os.Open(expectedFilename)
91-
assert.NoError(t, err)
92-
err = json.NewDecoder(r).Decode(&expected)
93-
assert.NoError(t, err)
82+
}
9483

95-
assert.Equal(t, expected, actual)
84+
// Use a bytes.Buffer to "render" the actual bytes
85+
var actualBytes bytes.Buffer
86+
err = formatters.JSON.Format(&actualBytes, nil, chroma.Literator(actualTokens...))
87+
assert.NoError(t, err)
9688

97-
// Check for error tokens.
98-
for _, token := range actual {
99-
if token.Type == chroma.Error {
100-
t.Logf("Found Error token in lexer %s output: %s", lexer.Config().Name, repr.String(token))
101-
}
89+
expectedBytes, err := os.ReadFile(expectedFilename)
90+
assert.NoError(t, err)
91+
92+
// Check that the expected bytes are identical
93+
if !bytes.Equal(actualBytes.Bytes(), expectedBytes) {
94+
if os.Getenv("RECORD") == "true" {
95+
f, err := os.Create(expectedFilename)
96+
assert.NoError(t, err)
97+
_, err = f.Write(actualBytes.Bytes())
98+
assert.NoError(t, err)
99+
assert.NoError(t, f.Close())
100+
} else {
101+
// fail via an assertion of string values for diff output
102+
assert.Equal(t, string(expectedBytes), actualBytes.String())
102103
}
103104
}
104105
})
@@ -167,20 +168,20 @@ func FileTestAnalysis(t *testing.T, lexer chroma.Lexer, actualFilepath, expected
167168
assert.NoError(t, err)
168169

169170
actual := analyser.AnalyseText(string(data))
170-
171-
if os.Getenv("RECORD") == "true" {
172-
// Update the expected file with the generated output of this lexer
173-
f, err := os.Create(expectedFilepath)
174-
defer f.Close() // nolint: gosec
175-
assert.NoError(t, err)
176-
177-
_, err = f.WriteString(strconv.FormatFloat(float64(actual), 'f', -1, 32))
178-
assert.NoError(t, err)
179-
} else {
180-
expected, err := strconv.ParseFloat(strings.TrimSpace(string(expectedData)), 32)
181-
assert.NoError(t, err)
182-
183-
assert.Equal(t, float32(expected), actual)
171+
var actualData bytes.Buffer
172+
fmt.Fprintf(&actualData, "%s\n", strconv.FormatFloat(float64(actual), 'f', -1, 32))
173+
174+
if !bytes.Equal(expectedData, actualData.Bytes()) {
175+
if os.Getenv("RECORD") == "true" {
176+
f, err := os.Create(expectedFilepath)
177+
assert.NoError(t, err)
178+
_, err = f.Write(actualData.Bytes())
179+
assert.NoError(t, err)
180+
assert.NoError(t, f.Close())
181+
} else {
182+
// fail via an assertion of string comparison for nicer diff output
183+
assert.Equal(t, string(expectedData), actualData.String())
184+
}
184185
}
185186
})
186187
}
+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.0
1+
1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.5
1+
0.5

0 commit comments

Comments
 (0)
Please sign in to comment.