@@ -44,49 +44,76 @@ func BenchmarkGet(b *testing.B) {
44
44
}
45
45
}
46
46
47
+ func FileTest (t * testing.T , lexer chroma.Lexer , actualFilename , expectedFilename string ) {
48
+ t .Helper ()
49
+ t .Run (lexer .Config ().Name + "/" + actualFilename , func (t * testing.T ) {
50
+ // Read and tokenise source text.
51
+ actualText , err := ioutil .ReadFile (actualFilename )
52
+ assert .NoError (t , err )
53
+ actual , err := chroma .Tokenise (lexer , nil , string (actualText ))
54
+ assert .NoError (t , err )
55
+
56
+ if os .Getenv ("RECORD" ) == "true" {
57
+ // Update the expected file with the generated output of this lexer
58
+ f , err := os .Create (expectedFilename )
59
+ defer f .Close () // nolint: gosec
60
+ assert .NoError (t , err )
61
+ assert .NoError (t , formatters .JSON .Format (f , nil , chroma .Literator (actual ... )))
62
+ } else {
63
+ // Read expected JSON into token slice.
64
+ var expected []chroma.Token
65
+ r , err := os .Open (expectedFilename )
66
+ assert .NoError (t , err )
67
+ err = json .NewDecoder (r ).Decode (& expected )
68
+ assert .NoError (t , err )
69
+
70
+ // Equal?
71
+ assert .Equal (t , expected , actual )
72
+ }
73
+ })
74
+ }
75
+
47
76
// Test source files are in the form <key>.<key> and validation data is in the form <key>.<key>.expected.
48
77
func TestLexers (t * testing.T ) {
49
78
files , err := ioutil .ReadDir ("testdata" )
50
79
assert .NoError (t , err )
51
80
52
81
for _ , file := range files {
53
- ext := filepath . Ext ( file .Name ())[ 1 :]
54
- if ext != "actual" {
55
- continue
56
- }
82
+ if file .IsDir () {
83
+ dirname := filepath . Join ( "testdata" , file . Name ())
84
+ lexer := lexers . Get ( file . Name ())
85
+ assert . NotNil ( t , lexer )
57
86
58
- base := strings .Split (strings .TrimSuffix (file .Name (), filepath .Ext (file .Name ())), "." )[0 ]
59
- lexer := lexers .Get (base )
60
- assert .NotNil (t , lexer )
87
+ subFiles , err := ioutil .ReadDir (dirname )
88
+ assert .NoError (t , err )
61
89
62
- filename := filepath .Join ("testdata" , file .Name ())
63
- expectedFilename := strings .TrimSuffix (filename , filepath .Ext (filename )) + ".expected"
90
+ for _ , subFile := range subFiles {
91
+ ext := filepath .Ext (subFile .Name ())[1 :]
92
+ if ext != "actual" {
93
+ continue
94
+ }
64
95
65
- lexer = chroma .Coalesce (lexer )
66
- t .Run (lexer .Config ().Name , func (t * testing.T ) {
67
- // Read and tokenise source text.
68
- actualText , err := ioutil .ReadFile (filename )
69
- assert .NoError (t , err )
70
- actual , err := chroma .Tokenise (lexer , nil , string (actualText ))
71
- assert .NoError (t , err )
96
+ filename := filepath .Join (dirname , subFile .Name ())
97
+ expectedFilename := strings .TrimSuffix (filename , filepath .Ext (filename )) + ".expected"
72
98
73
- if os .Getenv ("RECORD" ) == "true" {
74
- // Update the expected file with the generated output of this lexer
75
- f , err := os .Create (expectedFilename )
76
- defer f .Close () // nolint: gosec
77
- assert .NoError (t , err )
78
- assert .NoError (t , formatters .JSON .Format (f , nil , chroma .Literator (actual ... )))
79
- } else {
80
- // Read expected JSON into token slice.
81
- var expected []chroma.Token
82
- r , err := os .Open (expectedFilename )
83
- assert .NoError (t , err )
84
- err = json .NewDecoder (r ).Decode (& expected )
85
- assert .NoError (t , err )
86
-
87
- // Equal?
88
- assert .Equal (t , expected , actual )
99
+ lexer = chroma .Coalesce (lexer )
100
+ FileTest (t , lexer , filename , expectedFilename )
101
+ }
102
+ } else {
103
+ ext := filepath .Ext (file .Name ())[1 :]
104
+ if ext != "actual" {
105
+ continue
89
106
}
90
- })
107
+
108
+ base := strings .Split (strings .TrimSuffix (file .Name (), filepath .Ext (file .Name ())), "." )[0 ]
109
+ lexer := lexers .Get (base )
110
+ assert .NotNil (t , lexer )
111
+
112
+ filename := filepath .Join ("testdata" , file .Name ())
113
+ expectedFilename := strings .TrimSuffix (filename , filepath .Ext (filename )) + ".expected"
114
+
115
+ lexer = chroma .Coalesce (lexer )
116
+ FileTest (t , lexer , filename , expectedFilename )
117
+ }
91
118
}
92
119
}
0 commit comments