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
76 builder := orig.Builder()
77 builder.Add(NameVariableGlobal, "#f30")
78 deriv, err := builder.Build()
79 assert.NoError(t, err)
80
81
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
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