src.elv.sh@v0.21.0-dev.0.20240515223629-06979efb9a2a/pkg/ui/style_regions_test.go (about)

     1  package ui_test
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  
     7  	"src.elv.sh/pkg/diag"
     8  	"src.elv.sh/pkg/ui"
     9  )
    10  
    11  var styleRegionsTests = []struct {
    12  	Name     string
    13  	String   string
    14  	Regions  []ui.StylingRegion
    15  	WantText ui.Text
    16  }{
    17  	{
    18  		Name:   "empty string and regions",
    19  		String: "", Regions: nil, WantText: nil,
    20  	},
    21  	{
    22  		Name:   "a single region",
    23  		String: "foobar",
    24  		Regions: []ui.StylingRegion{
    25  			{r(1, 3), ui.FgRed, 0},
    26  		},
    27  		WantText: ui.Concat(ui.T("f"), ui.T("oo", ui.FgRed), ui.T("bar")),
    28  	},
    29  
    30  	{
    31  		Name:   "multiple continuous regions",
    32  		String: "foobar",
    33  		Regions: []ui.StylingRegion{
    34  			{r(1, 3), ui.FgRed, 0},
    35  			{r(3, 4), ui.FgGreen, 0},
    36  		},
    37  		WantText: ui.Concat(ui.T("f"), ui.T("oo", ui.FgRed), ui.T("b", ui.FgGreen), ui.T("ar")),
    38  	},
    39  
    40  	{
    41  		Name:   "multiple discontinuous regions in wrong order",
    42  		String: "foobar",
    43  		Regions: []ui.StylingRegion{
    44  			{r(4, 5), ui.FgGreen, 0},
    45  			{r(1, 3), ui.FgRed, 0},
    46  		},
    47  		WantText: ui.Concat(ui.T("f"), ui.T("oo", ui.FgRed), ui.T("b"), ui.T("a", ui.FgGreen), ui.T("r")),
    48  	},
    49  	{
    50  		Name:   "regions with the same starting position but differeng priorities",
    51  		String: "foobar",
    52  		Regions: []ui.StylingRegion{
    53  			{r(1, 3), ui.FgRed, 0},
    54  			{r(1, 2), ui.FgGreen, 1},
    55  		},
    56  		WantText: ui.Concat(ui.T("f"), ui.T("o", ui.FgGreen), ui.T("obar")),
    57  	},
    58  	{
    59  		Name:   "overlapping regions with different starting positions",
    60  		String: "foobar",
    61  		Regions: []ui.StylingRegion{
    62  			{r(1, 3), ui.FgRed, 0},
    63  			{r(2, 4), ui.FgGreen, 0},
    64  		},
    65  		WantText: ui.Concat(ui.T("f"), ui.T("oo", ui.FgRed), ui.T("bar")),
    66  	},
    67  }
    68  
    69  func r(a, b int) diag.Ranging { return diag.Ranging{From: a, To: b} }
    70  
    71  func TestStyleRegions(t *testing.T) {
    72  	for _, test := range styleRegionsTests {
    73  		text := ui.StyleRegions(test.String, test.Regions)
    74  		if !reflect.DeepEqual(text, test.WantText) {
    75  			t.Errorf("got %v, want %v", text, test.WantText)
    76  		}
    77  	}
    78  }