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

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

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

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, fileData)
Androlo's avatar
Androlo committed
	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, fileData)
Androlo's avatar
Androlo committed
	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, fileData)
Androlo's avatar
Androlo committed
	rename(t, fileName0, fileName1)
	readAndCheck(t, fileName1, fileData)
	remove(t, fileName1)
	checkGone(t, fileName0)
Androlo's avatar
Androlo committed
}

Androlo's avatar
Androlo committed
func TestWriteAndBackup(t *testing.T) {
	fileName := "testfile"
	backupName := "testfile.bak"
	if FileExists(fileName) {
		remove(t, fileName)
	}
	if FileExists(backupName) {
		remove(t, backupName)
	}
	write(t, fileName, fileData)
	readAndCheck(t, fileName, fileData)
	WriteAndBackup(getName(fileName), fileData2)
	readAndCheck(t, backupName, fileData)
	remove(t, fileName)
	remove(t, backupName)
	checkGone(t, fileName)
}

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, data []byte) {
	err := WriteFile(getName(fileName), data, FILE_RW)
Androlo's avatar
Androlo committed
	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)
Androlo's avatar
Androlo committed
	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)
}