github.com/aretext/aretext@v1.3.0/state/quit_test.go (about) 1 package state 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 8 "github.com/aretext/aretext/undo" 9 ) 10 11 func TestQuit(t *testing.T) { 12 testCases := []struct { 13 name string 14 force bool 15 hasUnsavedChanges bool 16 expectQuitFlag bool 17 }{ 18 { 19 name: "no force, no unsaved changes", 20 expectQuitFlag: true, 21 }, 22 { 23 name: "force, no unsaved changes", 24 force: true, 25 expectQuitFlag: true, 26 }, 27 { 28 name: "no force, unsaved changes", 29 hasUnsavedChanges: true, 30 expectQuitFlag: false, 31 }, 32 { 33 name: "force, unsaved changes", 34 force: true, 35 hasUnsavedChanges: true, 36 expectQuitFlag: true, 37 }, 38 } 39 40 for _, tc := range testCases { 41 t.Run(tc.name, func(t *testing.T) { 42 state := NewEditorState(100, 100, nil, nil) 43 44 if tc.hasUnsavedChanges { 45 state.documentBuffer.undoLog.BeginEntry(0) 46 state.documentBuffer.undoLog.TrackOp(undo.InsertOp(0, "a")) 47 state.documentBuffer.undoLog.CommitEntry(1) 48 } 49 50 if tc.force { 51 Quit(state) 52 } else { 53 AbortIfUnsavedChanges(state, "Document has unsaved changes", Quit) 54 } 55 56 assert.Equal(t, tc.expectQuitFlag, state.QuitFlag()) 57 if !tc.expectQuitFlag { 58 assert.Equal(t, StatusMsgStyleError, state.statusMsg.Style) 59 assert.Contains(t, state.statusMsg.Text, "Document has unsaved changes") 60 } 61 }) 62 } 63 }