diff options
Diffstat (limited to 'pkg/field/blank_test.go')
-rw-r--r-- | pkg/field/blank_test.go | 346 |
1 files changed, 346 insertions, 0 deletions
diff --git a/pkg/field/blank_test.go b/pkg/field/blank_test.go new file mode 100644 index 0000000..260c50b --- /dev/null +++ b/pkg/field/blank_test.go @@ -0,0 +1,346 @@ +package field + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestBlankInside(t *testing.T) { + input := Field{ + x: 0, + y: 0, + lx: 3, + ly: 1, + lines: []Line{ + Line{x: 0, l: 3, columns: []int{'@', 'a', 'b'}}, + }, + } + expected := Field{ + x: 0, + y: 0, + lx: 3, + ly: 1, + lines: []Line{ + Line{x: 0, l: 3, columns: []int{'@', ' ', 'b'}}, + }, + } + // Test cases + testCases := []struct { + name string + input *Field + inputX int + inputY int + expected *Field + }{ + {"inside", &input, 1, 0, &expected}, + } + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + tc.input.Blank(tc.inputX, tc.inputY) + require.Equal(t, tc.expected, tc.input) + }) + } +} + +func TestBlankInsideLine(t *testing.T) { + input := Field{ + x: 0, + y: 0, + lx: 3, + ly: 3, + lines: []Line{ + Line{x: 0, l: 3, columns: []int{'@', 'a', 'b'}}, + Line{x: 0, l: 1, columns: []int{'d'}}, + Line{x: 0, l: 1, columns: []int{'c'}}, + }, + } + expected := Field{ + x: 0, + y: 0, + lx: 3, + ly: 3, + lines: []Line{ + Line{x: 0, l: 3, columns: []int{'@', 'a', 'b'}}, + Line{columns: []int{}}, + Line{x: 0, l: 1, columns: []int{'c'}}, + }, + } + // Test cases + testCases := []struct { + name string + input *Field + inputX int + inputY int + expected *Field + }{ + {"inside", &input, 0, 1, &expected}, + } + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + tc.input.Blank(tc.inputX, tc.inputY) + require.Equal(t, tc.expected, tc.input) + }) + } +} + +func TestBlankOutside(t *testing.T) { + input := Field{ + x: 0, + y: 0, + lx: 1, + ly: 1, + lines: []Line{ + Line{x: 0, l: 1, columns: []int{'@'}}, + }, + } + expected := Field{ + x: 0, + y: 0, + lx: 1, + ly: 1, + lines: []Line{ + Line{x: 0, l: 1, columns: []int{'@'}}, + }, + } + // Test cases + testCases := []struct { + name string + input *Field + inputX int + inputY int + expected *Field + }{ + {"xappend", &input, 1, 0, &expected}, + {"xprepend", &input, -1, 0, &expected}, + {"yappend", &input, 0, 1, &expected}, + {"yprepend", &input, 0, -1, &expected}, + } + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + tc.input.Blank(tc.inputX, tc.inputY) + require.Equal(t, tc.expected, tc.input) + }) + } +} + +func TestBlankOutsideLine(t *testing.T) { + input := Field{ + x: -1, + y: 0, + lx: 3, + ly: 2, + lines: []Line{ + Line{x: -1, l: 3, columns: []int{'@', '@', '@'}}, + Line{x: 0, l: 1, columns: []int{'@'}}, + }, + } + expected := Field{ + x: -1, + y: 0, + lx: 3, + ly: 2, + lines: []Line{ + Line{x: -1, l: 3, columns: []int{'@', '@', '@'}}, + Line{x: -0, l: 1, columns: []int{'@'}}, + }, + } + // Test cases + testCases := []struct { + name string + input *Field + inputX int + inputY int + expected *Field + }{ + {"xappend", &input, 1, 1, &expected}, + {"xprepend", &input, -1, 1, &expected}, + } + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + tc.input.Blank(tc.inputX, tc.inputY) + require.Equal(t, tc.expected, tc.input) + }) + } +} + +func TestBlankLineTrim(t *testing.T) { + expected := Field{ + x: -1, + y: 0, + lx: 3, + ly: 1, + lines: []Line{ + Line{x: -1, l: 3, columns: []int{'@', '@', '@'}}, + }, + } + bottomCenter := Field{ + x: -1, + y: 0, + lx: 3, + ly: 3, + lines: []Line{ + Line{x: -1, l: 3, columns: []int{'@', '@', '@'}}, + Line{}, + Line{x: 0, l: 1, columns: []int{'@'}}, + }, + } + bottomLeft := Field{ + x: -4, + y: 0, + lx: 6, + ly: 3, + lines: []Line{ + Line{x: -1, l: 3, columns: []int{'@', '@', '@'}}, + Line{}, + Line{x: -4, l: 1, columns: []int{'@'}}, + }, + } + bottomRight := Field{ + x: -1, + y: 0, + lx: 6, + ly: 3, + lines: []Line{ + Line{x: -1, l: 3, columns: []int{'@', '@', '@'}}, + Line{}, + Line{x: 4, l: 1, columns: []int{'@'}}, + }, + } + topCenter := Field{ + x: -1, + y: -2, + lx: 3, + ly: 3, + lines: []Line{ + Line{x: 0, l: 1, columns: []int{'@'}}, + Line{}, + Line{x: -1, l: 3, columns: []int{'@', '@', '@'}}, + }, + } + topLeft := Field{ + x: -4, + y: -2, + lx: 6, + ly: 3, + lines: []Line{ + Line{x: -4, l: 1, columns: []int{'@'}}, + Line{}, + Line{x: -1, l: 3, columns: []int{'@', '@', '@'}}, + }, + } + topRight := Field{ + x: -1, + y: -2, + lx: 6, + ly: 3, + lines: []Line{ + Line{x: 4, l: 1, columns: []int{'@'}}, + Line{}, + Line{x: -1, l: 3, columns: []int{'@', '@', '@'}}, + }, + } + // Test cases + testCases := []struct { + name string + input *Field + inputX int + inputY int + expected *Field + }{ + {"bottomCenter", &bottomCenter, 0, 2, &expected}, + {"bottomLeft", &bottomLeft, -4, 2, &expected}, + {"bottomRight", &bottomRight, 4, 2, &expected}, + {"topCenter", &topCenter, 0, -2, &expected}, + {"topLeft", &topLeft, -4, -2, &expected}, + {"topRight", &topRight, 4, -2, &expected}, + } + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + tc.input.Blank(tc.inputX, tc.inputY) + require.Equal(t, tc.expected, tc.input) + }) + } +} + +func TestBlankcolumnsTrim(t *testing.T) { + expectedBottom := Field{ + x: -1, + y: 0, + lx: 3, + ly: 2, + lines: []Line{ + Line{x: -1, l: 3, columns: []int{'@', '@', '@'}}, + Line{x: 0, l: 1, columns: []int{'@'}}, + }, + } + expectedTop := Field{ + x: -1, + y: -1, + lx: 3, + ly: 2, + lines: []Line{ + Line{x: 0, l: 1, columns: []int{'@'}}, + Line{x: -1, l: 3, columns: []int{'@', '@', '@'}}, + }, + } + bottomLeft := Field{ + x: -4, + y: 0, + lx: 6, + ly: 2, + lines: []Line{ + Line{x: -1, l: 3, columns: []int{'@', '@', '@'}}, + Line{x: -4, l: 5, columns: []int{'@', ' ', ' ', ' ', '@'}}, + }, + } + bottomRight := Field{ + x: -1, + y: 0, + lx: 6, + ly: 2, + lines: []Line{ + Line{x: -1, l: 3, columns: []int{'@', '@', '@'}}, + Line{x: 0, l: 5, columns: []int{'@', ' ', ' ', ' ', '@'}}, + }, + } + topLeft := Field{ + x: -4, + y: -1, + lx: 6, + ly: 2, + lines: []Line{ + Line{x: -4, l: 5, columns: []int{'@', ' ', ' ', ' ', '@'}}, + Line{x: -1, l: 3, columns: []int{'@', '@', '@'}}, + }, + } + topRight := Field{ + x: -1, + y: -1, + lx: 6, + ly: 2, + lines: []Line{ + Line{x: 0, l: 5, columns: []int{'@', ' ', ' ', ' ', '@'}}, + Line{x: -1, l: 3, columns: []int{'@', '@', '@'}}, + }, + } + // Test cases + testCases := []struct { + name string + input *Field + inputX int + inputY int + expected *Field + }{ + {"bottomLeft", &bottomLeft, -4, 1, &expectedBottom}, + {"bottomRight", &bottomRight, 4, 1, &expectedBottom}, + {"topLeft", &topLeft, -4, -1, &expectedTop}, + {"topRight", &topRight, 4, -1, &expectedTop}, + } + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + tc.input.Blank(tc.inputX, tc.inputY) + require.Equal(t, tc.expected, tc.input) + }) + } +} |