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 }