Skip to content

Commit

Permalink
- r moved logging, extracted compare
Browse files Browse the repository at this point in the history
  • Loading branch information
hownowstephen committed Feb 6, 2025
1 parent 5459183 commit 8ab31cf
Show file tree
Hide file tree
Showing 6 changed files with 158 additions and 59 deletions.
56 changes: 4 additions & 52 deletions approval_name.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
package approvals

import (
"bytes"
"fmt"
"io"
"os"
"path"
"runtime"
"strings"
Expand Down Expand Up @@ -87,55 +84,6 @@ func isTestRunner(f *runtime.Frame) bool {
return f != nil && f.Function == "testing.tRunner" || f.Function == "testing.runExample"
}

func (s *ApprovalName) Compare(approvalFile, receivedFile string, reader io.Reader) error {

GetApprovedFileLoggerInstance().Log(approvalFile)

received, err := io.ReadAll(reader)
if err != nil {
return err
}

// Ideally, this should only be written if
// 1. the approval file does not exist
// 2. the results differ
err = s.dumpReceivedTestResult(received, receivedFile)
if err != nil {
return err
}

fh, err := os.Open(approvalFile)
if err != nil {
return err
}
defer fh.Close()

approved, err := io.ReadAll(fh)
if err != nil {
return err
}

received = s.normalizeLineEndings(received)
approved = s.normalizeLineEndings(approved)

// The two sides are identical, nothing more to do.
if bytes.Equal(received, approved) {
return nil
}

return fmt.Errorf("failed to approved %s", s.name)
}

func (s *ApprovalName) normalizeLineEndings(bs []byte) []byte {
return bytes.Replace(bs, []byte("\r\n"), []byte("\n"), -1)
}

func (s *ApprovalName) dumpReceivedTestResult(bs []byte, receivedFile string) error {
err := os.WriteFile(receivedFile, bs, 0644)

return err
}

func (s *ApprovalName) getFileName(extWithDot string, suffix string) string {
if !strings.HasPrefix(extWithDot, ".") {
extWithDot = fmt.Sprintf(".%s", extWithDot)
Expand All @@ -149,6 +97,10 @@ func (s *ApprovalName) getFileName(extWithDot string, suffix string) string {
return path.Join(defaultFolder, filename)
}

func (s *ApprovalName) GetName() string {
return s.name
}

func (s *ApprovalName) GetReceivedFile(extWithDot string) string {
return s.getFileName(extWithDot, "received")
}
Expand Down
2 changes: 1 addition & 1 deletion approvals.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ func Verify(t core.Failable, reader io.Reader, opts ...verifyOptions) {
receivedFile := namer.GetReceivedFile(extWithDot)

reporter := getReporter()
err = namer.Compare(approvalFile, receivedFile, reader)
err = core.Compare(namer.GetName(), approvalFile, receivedFile, reader)
if err != nil {
reporter.Report(approvalFile, receivedFile)
t.Log("Failed Approval: received does not match approved.")
Expand Down
58 changes: 58 additions & 0 deletions core/comparer.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package core

import (
"bytes"
"fmt"
"io"
"os"

"github.com/approvals/go-approval-tests/internal/log"
)

func Compare(name, approvalFile, receivedFile string, reader io.Reader) error {
log.GetApprovedFileLoggerInstance().Log(approvalFile)

received, err := io.ReadAll(reader)
if err != nil {
return err
}

// Ideally, this should only be written if
// 1. the approval file does not exist
// 2. the results differ
err = dumpReceivedTestResult(received, receivedFile)
if err != nil {
return err
}

fh, err := os.Open(approvalFile)
if err != nil {
return err
}
defer fh.Close()

approved, err := io.ReadAll(fh)
if err != nil {
return err
}

received = normalizeLineEndings(received)
approved = normalizeLineEndings(approved)

// The two sides are identical, nothing more to do.
if bytes.Equal(received, approved) {
return nil
}

return fmt.Errorf("failed to approved %s", name)
}

func normalizeLineEndings(bs []byte) []byte {
return bytes.Replace(bs, []byte("\r\n"), []byte("\n"), -1)
}

func dumpReceivedTestResult(bs []byte, receivedFile string) error {
err := os.WriteFile(receivedFile, bs, 0644)

return err
}
4 changes: 1 addition & 3 deletions core/namer.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package core

import "io"

type ApprovalNamer interface {
Compare(approvalFile, receivedFile string, reader io.Reader) error
GetName() string
GetReceivedFile(extWithDot string) string
GetApprovalFile(extWithDot string) string
}
Expand Down
2 changes: 1 addition & 1 deletion approved_file_log.go → internal/log/approved_file_log.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package approvals
package log

import (
"fmt"
Expand Down
95 changes: 93 additions & 2 deletions namer.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,96 @@
package approvals

// func NewTemplatedCustomNamer(template string) *Tem {
// return nil
// import (
// "bytes"
// "fmt"
// "io"
// "os"
// "path"
// "strings"

// "github.com/approvals/go-approval-tests/core"
// )

// type TemplatedCustomNamer struct {
// template string
// name string
// fileName string
// }

// func NewTemplatedCustomNamer(template string) core.ApprovalNamerCreator {
// return func(t core.Failable) core.ApprovalNamer {
// &TemplatedCustomNamer{
// template: template,
// }
// }
// }

// func (s *TemplatedCustomNamer) Compare(approvalFile, receivedFile string, reader io.Reader) error {

// GetApprovedFileLoggerInstance().Log(approvalFile)

// received, err := io.ReadAll(reader)
// if err != nil {
// return err
// }

// // Ideally, this should only be written if
// // 1. the approval file does not exist
// // 2. the results differ
// err = s.dumpReceivedTestResult(received, receivedFile)
// if err != nil {
// return err
// }

// fh, err := os.Open(approvalFile)
// if err != nil {
// return err
// }
// defer fh.Close()

// approved, err := io.ReadAll(fh)
// if err != nil {
// return err
// }

// received = s.normalizeLineEndings(received)
// approved = s.normalizeLineEndings(approved)

// // The two sides are identical, nothing more to do.
// if bytes.Equal(received, approved) {
// return nil
// }

// return fmt.Errorf("failed to approved %s", s.name)
// }

// func (s *TemplatedCustomNamer) normalizeLineEndings(bs []byte) []byte {
// return bytes.Replace(bs, []byte("\r\n"), []byte("\n"), -1)
// }

// func (s *TemplatedCustomNamer) dumpReceivedTestResult(bs []byte, receivedFile string) error {
// err := os.WriteFile(receivedFile, bs, 0644)

// return err
// }

// func (s *TemplatedCustomNamer) getFileName(extWithDot string, suffix string) string {
// if !strings.HasPrefix(extWithDot, ".") {
// extWithDot = fmt.Sprintf(".%s", extWithDot)
// }

// _, baseName := path.Split(s.fileName)
// baseWithoutExt := baseName[:len(baseName)-len(path.Ext(s.fileName))]

// filename := fmt.Sprintf("%s.%s.%s%s", baseWithoutExt, s.name, suffix, extWithDot)

// return path.Join(defaultFolder, filename)
// }

// func (s *TemplatedCustomNamer) GetReceivedFile(extWithDot string) string {
// return s.getFileName(extWithDot, "received")
// }

// func (s *TemplatedCustomNamer) GetApprovalFile(extWithDot string) string {
// return s.getFileName(extWithDot, "approved")
// }

0 comments on commit 8ab31cf

Please sign in to comment.