github.com/aretext/aretext@v1.3.0/file/save_test.go (about)

     1  package file
     2  
     3  import (
     4  	"os"
     5  	"path/filepath"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  	"github.com/stretchr/testify/require"
    10  
    11  	"github.com/aretext/aretext/text"
    12  )
    13  
    14  func TestSaveNewFile(t *testing.T) {
    15  	tmpDir := t.TempDir()
    16  
    17  	path := filepath.Join(tmpDir, "test.txt")
    18  	saveAndAssertContents(t, path, "abcd1234", 0644)
    19  }
    20  
    21  func TestSaveModifyExistingFile(t *testing.T) {
    22  	path := createTestFile(t, "old contents")
    23  	saveAndAssertContents(t, path, "new contents", 0644)
    24  }
    25  
    26  func TestSaveModifyExistingFilePreservePermissions(t *testing.T) {
    27  	path := createTestFile(t, "old contents")
    28  
    29  	err := os.Chmod(path, 0600)
    30  	require.NoError(t, err)
    31  	saveAndAssertContents(t, path, "new contents", 0600)
    32  }
    33  
    34  func saveAndAssertContents(t *testing.T, path string, contents string, perms os.FileMode) {
    35  	tree, err := text.NewTreeFromString(contents)
    36  	require.NoError(t, err)
    37  
    38  	watcher, err := Save(path, tree, testWatcherPollInterval)
    39  	require.NoError(t, err)
    40  	assert.Equal(t, path, watcher.Path())
    41  	defer watcher.Stop()
    42  
    43  	fileBytes, err := os.ReadFile(path)
    44  	require.NoError(t, err)
    45  
    46  	expectedContents := contents + "\n" // Append POSIX EOF
    47  	assert.Equal(t, expectedContents, string(fileBytes))
    48  
    49  	fileInfo, err := os.Stat(path)
    50  	require.NoError(t, err)
    51  	assert.Equal(t, fileInfo.Mode().Perm(), perms)
    52  }