...

Source file src/github.com/alecthomas/chroma/v2/style_test.go

Documentation: github.com/alecthomas/chroma/v2

     1  package chroma
     2  
     3  import (
     4  	"encoding/xml"
     5  	"testing"
     6  
     7  	assert "github.com/alecthomas/assert/v2"
     8  )
     9  
    10  func TestStyleInherit(t *testing.T) {
    11  	s, err := NewStyle("test", StyleEntries{
    12  		Name:         "bold #f00",
    13  		NameVariable: "#fff",
    14  	})
    15  	assert.NoError(t, err)
    16  	assert.Equal(t, StyleEntry{Colour: 0x1000000, Bold: Yes}, s.Get(NameVariable))
    17  }
    18  
    19  func TestStyleColours(t *testing.T) {
    20  	s, err := NewStyle("test", StyleEntries{
    21  		Name: "#f00 bg:#001 border:#ansiblue",
    22  	})
    23  	assert.NoError(t, err)
    24  	assert.Equal(t, StyleEntry{Colour: 0xff0001, Background: 0x000012, Border: 0x000100}, s.Get(Name))
    25  }
    26  
    27  func TestStyleClone(t *testing.T) {
    28  	parent, err := NewStyle("test", StyleEntries{
    29  		Background: "bg:#ffffff",
    30  	})
    31  	assert.NoError(t, err)
    32  	clone, err := parent.Builder().Add(Comment, "#0f0").Build()
    33  	assert.NoError(t, err)
    34  
    35  	assert.Equal(t, "bg:#ffffff", clone.Get(Background).String())
    36  	assert.Equal(t, "#00ff00 bg:#ffffff", clone.Get(Comment).String())
    37  	assert.Equal(t, "bg:#ffffff", parent.Get(Comment).String())
    38  }
    39  
    40  func TestSynthesisedStyleEntries(t *testing.T) {
    41  	style, err := NewStyle("test", StyleEntries{
    42  		Background: "bg:#ffffff",
    43  	})
    44  	assert.NoError(t, err)
    45  	assert.True(t, style.Has(LineHighlight))
    46  	assert.True(t, style.Has(LineNumbersTable))
    47  	assert.True(t, style.Has(LineNumbers))
    48  	assert.Equal(t, "bg:#e5e5e5", style.Get(LineHighlight).String())
    49  	assert.Equal(t, "#7f7f7f bg:#ffffff", style.Get(LineNumbers).String())
    50  	assert.Equal(t, "#7f7f7f bg:#ffffff", style.Get(LineNumbersTable).String())
    51  }
    52  
    53  func TestSynthesisedStyleClone(t *testing.T) {
    54  	style, err := NewStyle("test", StyleEntries{
    55  		Background:    "bg:#ffffff",
    56  		LineHighlight: "bg:#ffffff",
    57  		LineNumbers:   "bg:#fffff1",
    58  	})
    59  	assert.NoError(t, err)
    60  	style, err = style.Builder().Build()
    61  	assert.NoError(t, err)
    62  	assert.True(t, style.Has(LineHighlight))
    63  	assert.True(t, style.Has(LineNumbers))
    64  	assert.Equal(t, "bg:#ffffff", style.Get(LineHighlight).String())
    65  	assert.Equal(t, "bg:#fffff1", style.Get(LineNumbers).String())
    66  }
    67  
    68  func TestStyleBuilderTransform(t *testing.T) {
    69  	orig, err := NewStyle("test", StyleEntries{
    70  		Name:         "#000",
    71  		NameVariable: "bold #f00",
    72  	})
    73  	assert.NoError(t, err)
    74  
    75  	// Derive a style that inherits entries from orig.
    76  	builder := orig.Builder()
    77  	builder.Add(NameVariableGlobal, "#f30")
    78  	deriv, err := builder.Build()
    79  	assert.NoError(t, err)
    80  
    81  	// Use Transform to brighten or darken all of the colours in the derived style.
    82  	light, err := deriv.Builder().Transform(func(se StyleEntry) StyleEntry {
    83  		se.Colour = se.Colour.ClampBrightness(0.9, 1)
    84  		return se
    85  	}).Build()
    86  	assert.NoError(t, err, "Transform failed: %v", err)
    87  	assert.True(t, light.Get(Name).Colour.Brightness() >= 0.89)
    88  	assert.True(t, light.Get(NameVariable).Colour.Brightness() >= 0.89)
    89  	assert.True(t, light.Get(NameVariableGlobal).Colour.Brightness() >= 0.89)
    90  
    91  	dark, err := deriv.Builder().Transform(func(se StyleEntry) StyleEntry {
    92  		se.Colour = se.Colour.ClampBrightness(0, 0.1)
    93  		return se
    94  	}).Build()
    95  	assert.NoError(t, err, "Transform failed: %v", err)
    96  	assert.True(t, dark.Get(Name).Colour.Brightness() <= 0.11)
    97  	assert.True(t, dark.Get(NameVariable).Colour.Brightness() <= 0.11)
    98  	assert.True(t, dark.Get(NameVariableGlobal).Colour.Brightness() <= 0.11)
    99  
   100  	// The original styles should be unchanged.
   101  	assert.Equal(t, "#000000", orig.Get(Name).Colour.String())
   102  	assert.Equal(t, "#ff0000", orig.Get(NameVariable).Colour.String())
   103  	assert.Equal(t, "#ff3300", deriv.Get(NameVariableGlobal).Colour.String())
   104  }
   105  
   106  func TestStyleMarshaller(t *testing.T) {
   107  	expected, err := NewStyle("test", StyleEntries{
   108  		Whitespace: "bg:#ffffff",
   109  		Text:       "#000000 underline",
   110  	})
   111  	assert.NoError(t, err)
   112  	data, err := xml.MarshalIndent(expected, "", "  ")
   113  	assert.NoError(t, err)
   114  	assert.Equal(t, `<style name="test">
   115    <entry type="Text" style="underline #000000"></entry>
   116    <entry type="TextWhitespace" style="bg:#ffffff"></entry>
   117  </style>`, string(data))
   118  	actual := &Style{}
   119  	err = xml.Unmarshal(data, actual)
   120  	assert.NoError(t, err)
   121  	assert.Equal(t, expected, actual)
   122  }
   123  

View as plain text