Skip to content
Snippets Groups Projects
files_test.go 1.51 KiB
Newer Older
Androlo's avatar
Androlo committed
package files

import (
	"bytes"
	"os"
	"path"
	"testing"
Androlo's avatar
Androlo committed
	"github.com/stretchr/testify/assert"
Androlo's avatar
Androlo committed
)

Androlo's avatar
Androlo committed
var tempFolder = os.TempDir()
Androlo's avatar
Androlo committed
var fileData = []byte("aaaaaaaaaaaaaaaaa")

Androlo's avatar
Androlo committed
func TestWriteRemove(t *testing.T) {
Androlo's avatar
Androlo committed
	fileName := "testfile"
Androlo's avatar
Androlo committed
	write(t, fileName)
	remove(t, fileName)
Androlo's avatar
Androlo committed
}

Androlo's avatar
Androlo committed
func TestWriteReadRemove(t *testing.T) {
Androlo's avatar
Androlo committed
	fileName := "testfile"
Androlo's avatar
Androlo committed
	write(t, fileName)
	readAndCheck(t, fileName, fileData)
	remove(t, fileName)
Androlo's avatar
Androlo committed
}

Androlo's avatar
Androlo committed
func TestRenameRemove(t *testing.T) {
Androlo's avatar
Androlo committed
	fileName0 := "file0"
	fileName1 := "file1"
Androlo's avatar
Androlo committed
	write(t, fileName0)
	rename(t, fileName0, fileName1)
	readAndCheck(t, fileName1, fileData)
	remove(t, fileName1)
	checkGone(t, fileName0)
Androlo's avatar
Androlo committed
}

Androlo's avatar
Androlo committed
// Helpers

Androlo's avatar
Androlo committed
func getName(name string) string {
	return path.Join(tempFolder, name)
}

Androlo's avatar
Androlo committed
func write(t *testing.T, fileName string) {
	err := WriteFile(getName(fileName), fileData, FILE_RW)
	assert.NoError(t, err)
Androlo's avatar
Androlo committed
}

Androlo's avatar
Androlo committed
func readAndCheck(t *testing.T, fileName string, btsIn []byte) {
Androlo's avatar
Androlo committed
	bts, err := ReadFile(getName(fileName))
Androlo's avatar
Androlo committed
	assert.NoError(t, err)
	assert.True(t, bytes.Equal(bts,btsIn), "Failed to read file data. Written: %s, Read: %s\n", string(fileData), string(bts))
Androlo's avatar
Androlo committed
}

Androlo's avatar
Androlo committed
func remove(t *testing.T, fileName string) {
	err := os.Remove(getName(fileName))
	assert.NoError(t, err)
	checkGone(t, fileName)
Androlo's avatar
Androlo committed
}

Androlo's avatar
Androlo committed
func rename(t *testing.T, fileName0, fileName1 string) {
	assert.NoError(t, Rename(getName(fileName0), getName(fileName1)))
Androlo's avatar
Androlo committed
}

Androlo's avatar
Androlo committed
func checkGone(t *testing.T, fileName string) {
Androlo's avatar
Androlo committed
	name := getName(fileName)
Androlo's avatar
Androlo committed
	_ , err := os.Stat(name)
	assert.True(t, os.IsNotExist(err), "File not removed: " + name)
Androlo's avatar
Androlo committed
}