github.com/aretext/aretext@v1.3.0/state/config_test.go (about)

     1  package state
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  )
     8  
     9  func TestToggleShowLineNumbers(t *testing.T) {
    10  	testCases := []struct {
    11  		name                string
    12  		screenWidth         uint64
    13  		numLines            int
    14  		numToggles          int
    15  		expectLineNumMargin uint64
    16  	}{
    17  		{
    18  			name:                "empty document, no toggle",
    19  			screenWidth:         100,
    20  			numLines:            0,
    21  			numToggles:          0,
    22  			expectLineNumMargin: 0,
    23  		},
    24  		{
    25  			name:                "empty document, single toggle",
    26  			screenWidth:         100,
    27  			numLines:            0,
    28  			numToggles:          1,
    29  			expectLineNumMargin: 3,
    30  		},
    31  		{
    32  			name:                "single line, one toggle",
    33  			screenWidth:         100,
    34  			numLines:            1,
    35  			numToggles:          1,
    36  			expectLineNumMargin: 3,
    37  		},
    38  		{
    39  			name:                "single line, two toggles",
    40  			screenWidth:         100,
    41  			numLines:            1,
    42  			numToggles:          2,
    43  			expectLineNumMargin: 0,
    44  		},
    45  		{
    46  			name:                "nine lines, one toggle",
    47  			screenWidth:         100,
    48  			numLines:            9,
    49  			numToggles:          1,
    50  			expectLineNumMargin: 3,
    51  		},
    52  		{
    53  			name:                "ten lines, one toggle",
    54  			screenWidth:         100,
    55  			numLines:            10,
    56  			numToggles:          1,
    57  			expectLineNumMargin: 3,
    58  		},
    59  		{
    60  			name:                "eleven lines, one toggle",
    61  			screenWidth:         100,
    62  			numLines:            11,
    63  			numToggles:          1,
    64  			expectLineNumMargin: 3,
    65  		},
    66  		{
    67  			name:                "eleven lines, screen width 4",
    68  			screenWidth:         4,
    69  			numLines:            11,
    70  			numToggles:          1,
    71  			expectLineNumMargin: 3,
    72  		},
    73  		{
    74  			name:                "eleven lines, screen width 3",
    75  			screenWidth:         3,
    76  			numLines:            11,
    77  			numToggles:          1,
    78  			expectLineNumMargin: 0,
    79  		},
    80  		{
    81  			name:                "eleven lines, screen width 2",
    82  			screenWidth:         2,
    83  			numLines:            11,
    84  			numToggles:          1,
    85  			expectLineNumMargin: 0,
    86  		},
    87  		{
    88  			name:                "eleven lines, screen width 1",
    89  			screenWidth:         1,
    90  			numLines:            11,
    91  			numToggles:          1,
    92  			expectLineNumMargin: 0,
    93  		},
    94  		{
    95  			name:                "ninety nine lines, one toggle",
    96  			screenWidth:         100,
    97  			numLines:            99,
    98  			numToggles:          1,
    99  			expectLineNumMargin: 3,
   100  		},
   101  		{
   102  			name:                "one hundred lines, one toggle",
   103  			screenWidth:         100,
   104  			numLines:            100,
   105  			numToggles:          1,
   106  			expectLineNumMargin: 4,
   107  		},
   108  		{
   109  			name:                "one hundred lines, screen width 5",
   110  			screenWidth:         5,
   111  			numLines:            100,
   112  			numToggles:          1,
   113  			expectLineNumMargin: 4,
   114  		},
   115  		{
   116  			name:                "one hundred lines, screen width 4",
   117  			screenWidth:         4,
   118  			numLines:            100,
   119  			numToggles:          1,
   120  			expectLineNumMargin: 0,
   121  		},
   122  		{
   123  			name:                "one hundred lines, screen width 3",
   124  			screenWidth:         3,
   125  			numLines:            100,
   126  			numToggles:          1,
   127  			expectLineNumMargin: 0,
   128  		},
   129  	}
   130  
   131  	for _, tc := range testCases {
   132  		t.Run(tc.name, func(t *testing.T) {
   133  			state := NewEditorState(tc.screenWidth, 100, nil, nil)
   134  			for i := 0; i < tc.numLines-1; i++ {
   135  				InsertNewline(state)
   136  			}
   137  			for i := 0; i < tc.numToggles; i++ {
   138  				ToggleShowLineNumbers(state)
   139  			}
   140  			lineNumMargin := state.DocumentBuffer().LineNumMarginWidth()
   141  			assert.Equal(t, tc.expectLineNumMargin, lineNumMargin)
   142  		})
   143  	}
   144  }