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 }