@@ -127,7 +127,7 @@ func TestClassPrefix(t *testing.T) {
127127 var styleBuf bytes.Buffer
128128 err := withPrefix .WriteCSS (& styleBuf , styles .Fallback )
129129 assert .NoError (t , err )
130- if ! strings .Contains (styleBuf .String (), ".some-prefix-chroma " ) {
130+ if ! strings .Contains (styleBuf .String (), ".some-prefix-chroma.some-prefix- " ) {
131131 t .Error ("Stylesheets should have a class prefix" )
132132 }
133133}
@@ -235,9 +235,9 @@ func TestPreWrapper(t *testing.T) {
235235 err = f .Format (& buf , styles .Fallback , it )
236236 assert .NoError (t , err )
237237
238- assert .True (t , regexp .MustCompile ("<body class=\" bg\" >\n <pre.*class=\" chroma\" ><code><span class=\" line\" ><span class=\" cl\" ><span class=\" nb\" >echo</span> FOO</span></span></code></pre>\n </body>\n </html>" ).MatchString (buf .String ()))
239- assert .True (t , regexp .MustCompile (`\.bg { .+ }` ).MatchString (buf .String ()))
240- assert .True (t , regexp .MustCompile (`\.chroma { .+ }` ).MatchString (buf .String ()))
238+ assert .True (t , regexp .MustCompile ("<body class=\" bg dark \" >\n <pre.*class=\" chroma dark \" ><code><span class=\" line\" ><span class=\" cl\" ><span class=\" nb\" >echo</span> FOO</span></span></code></pre>\n </body>\n </html>" ).MatchString (buf .String ()))
239+ assert .True (t , regexp .MustCompile (`\.bg\.dark { .+ }` ).MatchString (buf .String ()))
240+ assert .True (t , regexp .MustCompile (`\.chroma\.dark { .+ }` ).MatchString (buf .String ()))
241241}
242242
243243func TestLinkeableLineNumbers (t * testing.T ) {
@@ -264,7 +264,7 @@ func TestTableLinkeableLineNumbers(t *testing.T) {
264264
265265 assert .Contains (t , buf .String (), `id="line1"><a class="lnlinks" href="#line1">1</a>` )
266266 assert .Contains (t , buf .String (), `id="line5"><a class="lnlinks" href="#line5">5</a>` )
267- assert .Contains (t , buf .String (), `/* LineLink */ .chroma .lnlinks { outline: none; text-decoration: none; color: inherit }` , buf .String ())
267+ assert .Contains (t , buf .String (), `/* LineLink */ .chroma.dark .lnlinks { outline: none; text-decoration: none; color: inherit }` , buf .String ())
268268}
269269
270270func TestTableLineNumberSpacing (t * testing.T ) {
@@ -335,7 +335,7 @@ func TestWithPreWrapper(t *testing.T) {
335335
336336 t .Run ("Regular" , func (t * testing.T ) {
337337 s := format (New (WithClasses (true )))
338- assert .Equal (t , s , `<pre class="chroma"><code><span class="line"><span class="cl"><span class="nb">echo</span> FOO</span></span></code></pre>` )
338+ assert .Equal (t , s , `<pre class="chroma dark "><code><span class="line"><span class="cl"><span class="nb">echo</span> FOO</span></span></code></pre>` )
339339 })
340340
341341 t .Run ("PreventSurroundingPre" , func (t * testing.T ) {
@@ -345,7 +345,7 @@ func TestWithPreWrapper(t *testing.T) {
345345
346346 t .Run ("InlineCode" , func (t * testing.T ) {
347347 s := format (New (InlineCode (true ), WithClasses (true )))
348- assert .Equal (t , s , `<code class="chroma"><span class="nb">echo</span> FOO</code>` )
348+ assert .Equal (t , s , `<code class="chroma dark "><span class="nb">echo</span> FOO</code>` )
349349 })
350350
351351 t .Run ("InlineCode, inline styles" , func (t * testing.T ) {
@@ -355,18 +355,18 @@ func TestWithPreWrapper(t *testing.T) {
355355
356356 t .Run ("Wrapper" , func (t * testing.T ) {
357357 s := format (New (WithPreWrapper (wrapper ), WithClasses (true )))
358- assert .Equal (t , s , `<foo class="chroma" id="code-true"><span class="line"><span class="cl"><span class="nb">echo</span> FOO</span></span></foo>` )
358+ assert .Equal (t , s , `<foo class="chroma dark " id="code-true"><span class="line"><span class="cl"><span class="nb">echo</span> FOO</span></span></foo>` )
359359 })
360360
361361 t .Run ("Wrapper, LineNumbersInTable" , func (t * testing.T ) {
362362 s := format (New (WithPreWrapper (wrapper ), WithClasses (true ), WithLineNumbers (true ), LineNumbersInTable (true )))
363363
364- assert .Equal (t , s , `<div class="chroma">
364+ assert .Equal (t , s , `<div class="chroma dark ">
365365<table class="lntable"><tr><td class="lntd">
366- <foo class="chroma" id="code-false"><span class="lnt">1
366+ <foo class="chroma dark " id="code-false"><span class="lnt">1
367367</span></foo></td>
368368<td class="lntd">
369- <foo class="chroma" id="code-true"><span class="line"><span class="cl"><span class="nb">echo</span> FOO</span></span></foo></td></tr></table>
369+ <foo class="chroma dark " id="code-true"><span class="line"><span class="cl"><span class="nb">echo</span> FOO</span></span></foo></td></tr></table>
370370</div>
371371` )
372372 })
@@ -389,7 +389,7 @@ func TestReconfigureOptions(t *testing.T) {
389389 err = f .Format (& buf , styles .Fallback , it )
390390
391391 assert .NoError (t , err )
392- assert .Equal (t , `<pre class="chroma"><code><span class="line"><span class="cl"><span class="nb">echo</span> FOO</span></span></code></pre>` , buf .String ())
392+ assert .Equal (t , `<pre class="chroma dark "><code><span class="line"><span class="cl"><span class="nb">echo</span> FOO</span></span></code></pre>` , buf .String ())
393393}
394394
395395func TestWriteCssWithAllClasses (t * testing.T ) {
@@ -402,6 +402,71 @@ func TestWriteCssWithAllClasses(t *testing.T) {
402402 assert .NotContains (t , buf .String (), ".chroma . {" , "Generated css doesn't contain invalid css" )
403403}
404404
405+ func TestModeClassOnWrapper (t * testing.T ) {
406+ tests := []struct {
407+ name string
408+ styleName string
409+ wantClass string
410+ }{
411+ {"LightStyle" , "github" , `class="chroma light"` },
412+ {"DarkStyle" , "github-dark" , `class="chroma dark"` },
413+ }
414+ for _ , tt := range tests {
415+ t .Run (tt .name , func (t * testing.T ) {
416+ f := New (WithClasses (true ))
417+ it , err := lexers .Get ("bash" ).Tokenise (nil , "echo FOO" )
418+ assert .NoError (t , err )
419+ var buf bytes.Buffer
420+ err = f .Format (& buf , styles .Get (tt .styleName ), it )
421+ assert .NoError (t , err )
422+ assert .Contains (t , buf .String (), tt .wantClass )
423+ })
424+ }
425+ }
426+
427+ func TestModeClassWithPrefix (t * testing.T ) {
428+ f := New (WithClasses (true ), ClassPrefix ("c-" ))
429+ it , err := lexers .Get ("bash" ).Tokenise (nil , "echo FOO" )
430+ assert .NoError (t , err )
431+ var buf bytes.Buffer
432+ err = f .Format (& buf , styles .Get ("github" ), it )
433+ assert .NoError (t , err )
434+ assert .Contains (t , buf .String (), `class="c-chroma c-light"` )
435+ }
436+
437+ func TestModeClassAbsentInInlineMode (t * testing.T ) {
438+ f := New ()
439+ it , err := lexers .Get ("bash" ).Tokenise (nil , "echo FOO" )
440+ assert .NoError (t , err )
441+ var buf bytes.Buffer
442+ err = f .Format (& buf , styles .Get ("github" ), it )
443+ assert .NoError (t , err )
444+ assert .NotContains (t , buf .String (), `light` )
445+ assert .NotContains (t , buf .String (), `dark` )
446+ }
447+
448+ func TestWriteCSSModeScoping (t * testing.T ) {
449+ tests := []struct {
450+ name string
451+ styleName string
452+ selector string
453+ }{
454+ {"Light" , "github" , ".chroma.light" },
455+ {"Dark" , "github-dark" , ".chroma.dark" },
456+ }
457+ for _ , tt := range tests {
458+ t .Run (tt .name , func (t * testing.T ) {
459+ f := New (WithClasses (true ))
460+ var buf bytes.Buffer
461+ err := f .WriteCSS (& buf , styles .Get (tt .styleName ))
462+ assert .NoError (t , err )
463+ out := buf .String ()
464+ assert .Contains (t , out , tt .selector )
465+ assert .Contains (t , out , tt .selector + " .k " )
466+ })
467+ }
468+ }
469+
405470func TestStyleCache (t * testing.T ) {
406471 f := New ()
407472
0 commit comments