Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: use testify for testing #293

Merged
merged 3 commits into from
Sep 14, 2023
Merged
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 .github/workflows/linter.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
- uses: actions/setup-go@v4
with:
# NOTE: Keep this in sync with the version from go.mod
go-version: '1.20.x'
go-version: '1.21.x'
- uses: actions/checkout@v4
- name: golangci-lint
uses: golangci/golangci-lint-action@v3
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/security.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
- name: Install Go
uses: actions/setup-go@v4
with:
go-version: '^1.20.x'
go-version: '^1.21.x'
- name: Install Gosec
run: |
export PATH=${PATH}:`go env GOPATH`/bin
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/test-ace.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ jobs:
- 1.18.x
- 1.19.x
- 1.20.x
- 1.21.x
platform: [ ubuntu-latest, windows-latest ]
runs-on: ${{ matrix.platform }}
steps:
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/test-amber.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ jobs:
- 1.18.x
- 1.19.x
- 1.20.x
- 1.21.x
platform: [ ubuntu-latest, windows-latest ]
runs-on: ${{ matrix.platform }}
steps:
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/test-django.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ jobs:
- 1.18.x
- 1.19.x
- 1.20.x
- 1.21.x
platform: [ ubuntu-latest, windows-latest ]
runs-on: ${{ matrix.platform }}
steps:
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/test-handlebars.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ jobs:
- 1.18.x
- 1.19.x
- 1.20.x
- 1.21.x
platform: [ ubuntu-latest, windows-latest ]
runs-on: ${{ matrix.platform }}
steps:
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/test-html.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ jobs:
- 1.18.x
- 1.19.x
- 1.20.x
- 1.21.x
platform: [ ubuntu-latest, windows-latest ]
runs-on: ${{ matrix.platform }}
steps:
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/test-jet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ jobs:
- 1.18.x
- 1.19.x
- 1.20.x
- 1.21.x
platform: [ ubuntu-latest, windows-latest ]
runs-on: ${{ matrix.platform }}
steps:
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/test-mustache.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ jobs:
- 1.18.x
- 1.19.x
- 1.20.x
- 1.21.x
platform: [ ubuntu-latest, windows-latest ]
runs-on: ${{ matrix.platform }}
steps:
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/test-pug.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ jobs:
- 1.18.x
- 1.19.x
- 1.20.x
- 1.21.x
platform: [ ubuntu-latest, windows-latest ]
runs-on: ${{ matrix.platform }}
steps:
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/test-slim.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ jobs:
- 1.18.x
- 1.19.x
- 1.20.x
- 1.21.x
platform: [ ubuntu-latest, windows-latest ]
runs-on: ${{ matrix.platform }}
steps:
Expand Down
160 changes: 57 additions & 103 deletions ace/ace_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package ace

import (
"bytes"
"github.com/stretchr/testify/require"
"net/http"
"os"
"regexp"
Expand All @@ -26,33 +27,29 @@ func Test_Render(t *testing.T) {
engine.AddFunc("isAdmin", func(user string) bool {
return user == admin
})
if err := engine.Load(); err != nil {
t.Fatalf("load: %v\n", err)
}
require.NoError(t, engine.Load())

// Partials
var buf bytes.Buffer
if err := engine.Render(&buf, "index", map[string]interface{}{
err := engine.Render(&buf, "index", map[string]interface{}{
"Title": "Hello, World!",
}); err != nil {
t.Fatal("Test_Render: failed to render index")
}
})
require.NoError(t, err)

expect := `<h2>Header</h2><h1>Hello, World!</h1><h2>Footer</h2>`
result := trim(buf.String())
if expect != result {
t.Fatalf("Expected:\n%s\nResult:\n%s\n", expect, result)
}
require.Equal(t, expect, result)

// Single
buf.Reset()
if err := engine.Render(&buf, "errors/404", map[string]interface{}{
err = engine.Render(&buf, "errors/404", map[string]interface{}{
"Title": "Hello, World!",
}); err != nil {
t.Fatal("Test_Render: failed to render 404")
}
})
require.NoError(t, err)

expect = `<h1>Hello, World!</h1>`
result = trim(buf.String())
if expect != result {
t.Fatalf("Expected:\n%s\nResult:\n%s\n", expect, result)
}
require.Equal(t, expect, result)
}

func Test_Layout(t *testing.T) {
Expand All @@ -62,22 +59,17 @@ func Test_Layout(t *testing.T) {
return user == admin
})
engine.Debug(true)
if err := engine.Load(); err != nil {
t.Fatalf("load: %v\n", err)
}
require.NoError(t, engine.Load())

var buf bytes.Buffer
err := engine.Render(&buf, "index", map[string]interface{}{
"Title": "Hello, World!",
}, "layouts/main")
if err != nil {
t.Fatalf("render: %v", err)
}
require.NoError(t, err)

expect := `<!DOCTYPE html><html><head><title>Main</title></head><body><h2>Header</h2><h1>Hello, World!</h1><h2>Footer</h2></body></html>`
result := trim(buf.String())
if expect != result {
t.Fatalf("Expected:\n%s\nResult:\n%s\n", expect, result)
}
require.Equal(t, expect, result)
}

func Test_Empty_Layout(t *testing.T) {
Expand All @@ -87,22 +79,17 @@ func Test_Empty_Layout(t *testing.T) {
return user == admin
})
engine.Debug(true)
if err := engine.Load(); err != nil {
t.Fatalf("load: %v\n", err)
}
require.NoError(t, engine.Load())

var buf bytes.Buffer
err := engine.Render(&buf, "index", map[string]interface{}{
"Title": "Hello, World!",
}, "")
if err != nil {
t.Fatalf("render: %v", err)
}
require.NoError(t, err)

expect := `<h2>Header</h2><h1>Hello, World!</h1><h2>Footer</h2>`
result := trim(buf.String())
if expect != result {
t.Fatalf("Expected:\n%s\nResult:\n%s\n", expect, result)
}
require.Equal(t, expect, result)
}

func Test_FileSystem(t *testing.T) {
Expand All @@ -112,22 +99,17 @@ func Test_FileSystem(t *testing.T) {
return user == admin
})
engine.Debug(true)
if err := engine.Load(); err != nil {
t.Fatalf("load: %v\n", err)
}
require.NoError(t, engine.Load())

var buf bytes.Buffer
err := engine.Render(&buf, "index", map[string]interface{}{
"Title": "Hello, World!",
}, "layouts/main")
if err != nil {
t.Fatalf("render: %v", err)
}
require.NoError(t, err)

expect := `<!DOCTYPE html><html><head><title>Main</title></head><body><h2>Header</h2><h1>Hello, World!</h1><h2>Footer</h2></body></html>`
result := trim(buf.String())
if expect != result {
t.Fatalf("Expected:\n%s\nResult:\n%s\n", expect, result)
}
require.Equal(t, expect, result)
}

// goland:noinspection GoDeprecation
Expand All @@ -142,53 +124,42 @@ func Test_Reload(t *testing.T) {
engine.AddFunc("isAdmin", func(user string) bool {
return user == admin
})
if err := engine.Load(); err != nil {
t.Fatalf("load: %v\n", err)
}
require.NoError(t, engine.Load())

err := os.WriteFile("./views/ShouldReload.ace", []byte("after ShouldReload\n"), 0o600)
require.NoError(t, err)

if err := os.WriteFile("./views/ShouldReload.ace", []byte("after ShouldReload\n"), 0o600); err != nil {
t.Fatalf("write file: %v\n", err)
}
defer func() {
if err := os.WriteFile("./views/ShouldReload.ace", []byte("before ShouldReload\n"), 0o600); err != nil {
t.Fatalf("write file: %v\n", err)
}
err := os.WriteFile("./views/ShouldReload.ace", []byte("before ShouldReload\n"), 0o600)
require.NoError(t, err)
}()

if err := engine.Load(); err != nil {
t.Fatal("engine failed to load")
}
require.NoError(t, engine.Load())

var buf bytes.Buffer
if err := engine.Render(&buf, "ShouldReload", nil); err != nil {
t.Fatal("Test_Reload: failed to render ShouldReload")
}
err = engine.Render(&buf, "ShouldReload", nil)
require.NoError(t, err)

expect := "<after>ShouldReload</after>"
result := trim(buf.String())
if expect != result {
t.Fatalf("Expected:\n%s\nResult:\n%s\n", expect, result)
}
require.Equal(t, expect, result)
}

func Test_AddFuncMap(t *testing.T) {
t.Parallel()
// Create a temporary directory
dir, err := os.MkdirTemp(".", "")
if err != nil {
t.Fatal("failed to create a temporary directory")
}
require.NoError(t, err)
defer func() {
if err := os.RemoveAll(dir); err != nil {
t.Fatal("failed to remove the temporary directory")
}
err := os.RemoveAll(dir)
require.NoError(t, err)
}()

// Create a temporary template file.
if err = os.WriteFile(dir+"/func_map.ace", []byte(`
err = os.WriteFile(dir+"/func_map.ace", []byte(`
h2 {{lower .Var1}}
p {{upper .Var2}}`), 0o600); err != nil {
t.Fatal("failed to write to func_map.ace")
}
p {{upper .Var2}}`), 0o600)
require.NoError(t, err)

engine := New(dir, ".ace")

Expand All @@ -198,32 +169,25 @@ p {{upper .Var2}}`), 0o600); err != nil {
}

engine.AddFuncMap(fm)

if err := engine.Load(); err != nil {
t.Fatalf("load: %v\n", err)
}
require.NoError(t, engine.Load())

var buf bytes.Buffer
if err := engine.Render(&buf, "func_map", map[string]interface{}{
err = engine.Render(&buf, "func_map", map[string]interface{}{
"Var1": "LOwEr",
"Var2": "upPEr",
}); err != nil {
t.Fatal("Test_AddFuncMap: failed to render func_map")
}
})
require.NoError(t, err)

expect := `<h2>lower</h2><p>UPPER</p>`
result := trim(buf.String())
if expect != result {
t.Fatalf("Expected:\n%s\nResult:\n%s\n", expect, result)
}
require.Equal(t, expect, result)

// FuncMap
fm2 := engine.FuncMap()
if _, ok := fm2["lower"]; !ok {
t.Fatalf("Function lower does not exist in FuncMap().\n")
}
if _, ok := fm2["upper"]; !ok {
t.Fatalf("Function upper does not exist in FuncMap().\n")
}
_, ok := fm2["lower"]
require.True(t, ok)
_, ok = fm2["upper"]
require.True(t, ok)
}

func Benchmark_Ace(b *testing.B) {
Expand All @@ -246,13 +210,8 @@ func Benchmark_Ace(b *testing.B) {
})
}

if err != nil {
bb.Fatalf("Failed to render: %v", err)
}
result := trim(buf.String())
if expectSimple != result {
bb.Fatalf("Expected:\n%s\nResult:\n%s\n", expectSimple, result)
}
require.NoError(b, err)
require.Equal(b, expectSimple, trim(buf.String()))
})

b.Run("extended", func(bb *testing.B) {
Expand All @@ -265,12 +224,7 @@ func Benchmark_Ace(b *testing.B) {
}, "layouts/main")
}

if err != nil {
bb.Fatalf("Failed to render: %v", err)
}
result := trim(buf.String())
if expectExtended != result {
bb.Fatalf("Expected:\n%s\nResult:\n%s\n", expectExtended, result)
}
require.NoError(b, err)
require.Equal(b, expectExtended, trim(buf.String()))
})
}
7 changes: 7 additions & 0 deletions ace/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,13 @@ require github.com/yosssi/ace v0.0.5
require (
github.com/gofiber/template v1.8.2
github.com/gofiber/utils v1.1.0
github.com/stretchr/testify v1.8.4
)

require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

replace github.com/gofiber/template => ../.
Loading
Loading