Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion internal/utils/files.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ func WriteToFile(path string, data []byte) error {
prevContent, err := FileReadAll(path)
if err == nil {
bakFile, err := os.Create(path + ".bak")
if err != nil {
if err == nil {
_, err = bakFile.Write(prevContent)
}
if err != nil {
Expand Down
107 changes: 107 additions & 0 deletions internal/utils/files_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
package utils

import (
"io"
"os"
"testing"

"github.com/stretchr/testify/assert"
)

func TestFileReadAll_Success(t *testing.T) {
content := []byte("test content")
tmpfile, err := os.CreateTemp("", "example")
assert.Nil(t, err)
defer os.Remove(tmpfile.Name())

_, err = tmpfile.Write(content)
assert.Nil(t, err)
assert.Nil(t, tmpfile.Close())

data, err := FileReadAll(tmpfile.Name())

assert.Nil(t, err)
assert.Equal(t, content, data)
}

func TestFileReadAll_FileNotExist(t *testing.T) {
data, err := FileReadAll("nonexistent_file")

assert.NotNil(t, err)
assert.Nil(t, data)
assert.True(t, os.IsNotExist(err))
}

func TestFileReadAll_OpenError(t *testing.T) {
// create a directory which can't be opened as a file
tmpDir, err := os.MkdirTemp("", "testdir")
assert.Nil(t, err)
defer os.RemoveAll(tmpDir)

data, err := FileReadAll(tmpDir)

assert.NotNil(t, err)
assert.Nil(t, data)
}

func TestEnsureDir_Success(t *testing.T) {
dir := "tmpdir"

err := os.Mkdir(dir, 0755)
defer os.Remove(dir)
assert.Nil(t, err)

err = ensureDir(dir)
assert.Nil(t, err)
}

func TestEnsureDir_CreateIfNotExist(t *testing.T) {
dir := "tmpdir"

err := ensureDir(dir)
defer os.Remove(dir)

assert.Nil(t, err)
info, err := os.Stat(dir)
assert.Nil(t, err)
assert.True(t, info.IsDir())
}

func TestEnsureDir_Fail(t *testing.T) {
tmpFile, err := os.CreateTemp("", "testfile")
assert.Nil(t, err)
defer os.Remove(tmpFile.Name())

err = ensureDir(tmpFile.Name())
assert.NotNil(t, err)
}

func TestWriteToFile_FileExist(t *testing.T) {
var (
existFileName string
oldContent = []byte("old content")
newContent = []byte("new content")
)
// prepare a exist file with data
existFile, _ := os.CreateTemp("", "TestWriteToFile_FileExist")
existFileName = existFile.Name()

existFile.Write(oldContent)
existFile.Close()

err := WriteToFile(existFileName, newContent)
assert.Nil(t, err)

check := func(t *testing.T, path string, expectedData []byte) {
f, err := os.Open(path)
defer os.Remove(path)

assert.Nil(t, err)
data, err := io.ReadAll(f)
assert.Nil(t, err)
assert.Equal(t, expectedData, data)
}

check(t, existFileName, newContent)
check(t, existFileName+".bak", oldContent)
}
36 changes: 36 additions & 0 deletions internal/utils/set_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package utils

import (
"encoding/json"
"testing"

"github.com/stretchr/testify/assert"
)

func TestSet_NormalUsage(t *testing.T) {
set := NewSet()
set.AddKV("name", "xiaoming")
set.AddKV("age", "18")
set.Add(StringUnique("hello"))

name, ok := set.Contains("name")
assert.True(t, ok)
assert.Equal(t, "xiaoming", name.UniqueID())

_, ok = set.Contains("gender")
assert.False(t, ok)

assert.Equal(t, 3, set.Len())
}

func TestSet_MarshalJSON(t *testing.T) {
st := NewSet()

st.AddKV("name", "xiaoming")
st.AddKV("age", "18")
st.Add(StringUnique("hello"))

data, err := json.Marshal(&st)
assert.Nil(t, err)
t.Log(string(data))
}