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  }