Skip to content

Commit

Permalink
Add support of byte slice and io.reader
Browse files Browse the repository at this point in the history
  • Loading branch information
HEskandari committed Feb 19, 2024
1 parent 655b0d3 commit be08a02
Show file tree
Hide file tree
Showing 33 changed files with 662 additions and 473 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@
.idea
.DS_Store
dist/
_testdata/*_IgnoreVerify.verified.txt
13 changes: 7 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,23 @@ run-vet:
echo "Vetting..."
go vet ./...

run-tests:
echo "Running unit tests for 'verifier'..."
test-verifier:
go test -v ./verifier/*.go

echo "Running api tests for 'verifier'..."
test-api:
go test -v ./api-tests/*.go

echo "Running unit tests for 'diff'..."
test-diff:
go test -v ./diff/*.go

echo "Running unit tests for 'utils'..."
test-utils:
go test -v ./utils/*.go

echo "Running unit tests for 'tray'..."
test-tray:
go test -v ./tray/*.go

run-tests: test-verifier test-api test-diff test-utils test-tray

run-integration-test: export RUN_INTEGRATION_TESTS=True
run-integration-test:
echo "Should run integration tests: $$RUN_INTEGRATION_TESTS"
Expand Down
20 changes: 8 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,20 +129,16 @@ The same approach can be used to verify the results where the change to `*.verif
* **All `*.verified.*` files should be committed to source control.**
* **All `*.received.*` files should be excluded from source control.**

## Verify Settings
## Configuring Verify

Settings can be changed by creating an instance of `VerifySettings` interface and using the method that accepts a setting. Default setting will be used otherwise.
Settings can be configured by calling the `Configure` method on the `Verifier` interface. Default setting will be used, unless otherwise specified.

```go
func TestVerifyingString(t *testing.T) {
settings := NewSettings()

settings.AddScrubber(func(str string) string {
return strings.ReplaceAll(str, "String to verify", "new value")
})

verifier.VerifyWithSetting(t, settings, "String to verify")
}
verifier.NewVerifier(t,
verifier.AddScrubber(func(str string) string {
return strings.ReplaceAll(str, "String to verify", "new value")
}),
).Verify("String to verify")
```

## Versioning
Expand All @@ -159,7 +155,7 @@ Snapshot changes do not trigger a major version change to avoid causing [Diamond

## More Documentation

- This is a work in progres...
- This is a work in progress...

## Icon

Expand Down
1 change: 1 addition & 0 deletions _testdata/verifier_core_test.CreateVerifier.verified.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
This is a test arg
1 change: 1 addition & 0 deletions _testdata/verifier_core_test.NilTargets.verified.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
nil
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
alert("{redacted}");
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Verified Text Data Stored As Binary
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Empty file.
112 changes: 58 additions & 54 deletions api-tests/verify_api_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,21 +43,24 @@ func (t Title) String() string {
return "Undefined Title"
}

func NewTestSettings() verifier.VerifySettings {
defaultSettings := verifier.NewSettings()
defaultSettings.UseDirectory("../_testdata")
defaultSettings.DisableDiff()
return defaultSettings
func DefaultTestConfiguration() []verifier.VerifyConfigure {
return []verifier.VerifyConfigure{
verifier.UseDirectory("../_testdata"),
verifier.DisableDiff(),
}
}

func NewTestVerifier(t *testing.T) verifier.Verifier {
cfg := DefaultTestConfiguration()
return verifier.NewVerifier(t).Configure(cfg...)
}

func TestVerifyingNilObject(t *testing.T) {
verifier.VerifyWithSetting(t, NewTestSettings(), nil)
NewTestVerifier(t).Verify(nil)
}

func TestSimpleString(t *testing.T) {
settings := NewTestSettings()
settings.DisableDiff()
verifier.VerifyWithSetting(t, settings, "Foo")
NewTestVerifier(t).Verify("Foo")
}

func TestVerifyingStructs(t *testing.T) {
Expand All @@ -75,32 +78,32 @@ func TestVerifyingStructs(t *testing.T) {
},
Children: []string{"Sam", "Mary"},
}
verifier.VerifyWithSetting(t, NewTestSettings(), person)
NewTestVerifier(t).Verify(person)
}

func TestVerifyingNullableStructs(t *testing.T) {
address := &Address{
Street: "Test Street",
}
verifier.VerifyWithSetting(t, NewTestSettings(), address)
NewTestVerifier(t).Verify(address)
}

func TestVerifyingMultiLineStrings(t *testing.T) {
settings := NewTestSettings()

settings.ScrubLinesWithReplace(func(line string) string {
if strings.Contains(line, "LineE") {
return "NoMoreLineE"
}
return line
})
settings.ScrubLines(func(line string) bool {
return strings.Contains(line, "J")
})
settings.ScrubLinesContaining("b", "D")
settings.ScrubLinesContainingAnyCase("h")

verifier.VerifyWithSetting(t, settings, "LineA\nLineB\nLineC\nLineD\nLineE\nLineF\nLineG\nLineH\nLineI\nLineJ")
v := NewTestVerifier(t).Configure(
verifier.ScrubLinesWithReplace(func(line string) string {
if strings.Contains(line, "LineE") {
return "NoMoreLineE"
}
return line
}),
verifier.ScrubLines(func(line string) bool {
return strings.Contains(line, "J")
}),
verifier.ScrubLinesContaining("b", "D"),
verifier.ScrubLinesContainingAnyCase("h"),
)

v.Verify("LineA\nLineB\nLineC\nLineD\nLineE\nLineF\nLineG\nLineH\nLineI\nLineJ")
}

type ToBeScrubbed struct {
Expand All @@ -112,12 +115,12 @@ func TestScrubbingAfterMarshalling(t *testing.T) {
RowVersion: "7D3",
}

settings := NewTestSettings()
settings.AddScrubber(func(target string) string {
return strings.Replace(target, "7D3", "TheRowVersion", 1)
})
v := NewTestVerifier(t).Configure(
verifier.AddScrubber(func(target string) string {
return strings.Replace(target, "7D3", "TheRowVersion", 1)
}))

verifier.VerifyWithSetting(t, settings, target)
v.Verify(target)
}

type nonPublic struct {
Expand All @@ -126,24 +129,24 @@ type nonPublic struct {

func TestVerifyingPrivateStructs(t *testing.T) {
target := nonPublic{}
verifier.VerifyWithSetting(t, NewTestSettings(), target)
NewTestVerifier(t).Verify(target)
}

func TestRemovingEmptyLines(t *testing.T) {
target := `
LineA
LineC`
settings := NewTestSettings()
settings.ScrubEmptyLines()
verifier.VerifyWithSetting(t, settings, target)

v := NewTestVerifier(t).Configure(verifier.ScrubEmptyLines())
v.Verify(target)
}

func TestVerifySlicesOfStructs(t *testing.T) {
persons := []uuid.UUID{
uuid.New(), uuid.New(),
}
verifier.VerifyWithSetting(t, NewTestSettings(), persons)
NewTestVerifier(t).Verify(persons)
}

func TestVerifyArrayOfStructs(t *testing.T) {
Expand All @@ -152,7 +155,7 @@ func TestVerifyArrayOfStructs(t *testing.T) {
{GivenNames: "Jill", Title: Mrs},
}

verifier.VerifyWithSetting(t, NewTestSettings(), persons)
NewTestVerifier(t).Verify(persons)
}

func TestVerifySliceOfTime(t *testing.T) {
Expand All @@ -161,7 +164,7 @@ func TestVerifySliceOfTime(t *testing.T) {
time.Date(2021, 01, 02, 1, 2, 3, 4, time.Local),
}

verifier.VerifyWithSetting(t, NewTestSettings(), times)
NewTestVerifier(t).Verify(times)
}

func TestVerifySliceOfStrings(t *testing.T) {
Expand All @@ -171,7 +174,7 @@ func TestVerifySliceOfStrings(t *testing.T) {
uuid.NewString(),
}

verifier.VerifyWithSetting(t, NewTestSettings(), times)
NewTestVerifier(t).Verify(times)
}

func TestVerifyMaps(t *testing.T) {
Expand All @@ -185,7 +188,7 @@ func TestVerifyMaps(t *testing.T) {
"FifthTimeString": current.Format(time.RFC3339),
}

verifier.VerifyWithSetting(t, NewTestSettings(), target)
NewTestVerifier(t).Verify(target)
}

func TestUsingTableTests(t *testing.T) {
Expand All @@ -200,13 +203,13 @@ func TestUsingTableTests(t *testing.T) {
{testName: "integers", input: strconv.Itoa(10)},
}

setting := NewTestSettings()
setting.ScrubInlineGuids()
setting.ScrubInlineTime(time.RFC3339)
v := NewTestVerifier(t).Configure(
verifier.ScrubInlineGuids(),
verifier.ScrubInlineTime(time.RFC3339))

for _, tc := range tests {
setting.TestCase(tc.testName)
verifier.VerifyWithSetting(t, setting, tc.input)
v = v.Configure(verifier.TestCase(tc.testName))
v.Verify(tc.input)
}
}

Expand All @@ -222,13 +225,14 @@ func TestUsingTableTestsWithSubTests(t *testing.T) {
{testName: "integers", input: strconv.Itoa(10)},
}

setting := NewTestSettings()
setting.ScrubInlineGuids()
setting.ScrubInlineTime(time.RFC3339)
v := NewTestVerifier(t).Configure(
verifier.ScrubInlineGuids(),
verifier.ScrubInlineTime(time.RFC3339))

for _, tc := range tests {
t.Run(tc.testName, func(t *testing.T) {
verifier.VerifyWithSetting(t, setting, tc.input)
v = v.Configure(verifier.TestCase(tc.testName))
v.Verify(tc.input)
})
}
}
Expand All @@ -245,14 +249,14 @@ func TestUsingTableTestsWithSubTestsAndExplicitTestCaseName(t *testing.T) {
{testName: "with integers", input: strconv.Itoa(10)},
}

setting := NewTestSettings()
setting.ScrubInlineGuids()
setting.ScrubInlineTime(time.RFC3339)
v := NewTestVerifier(t).Configure(
verifier.ScrubInlineGuids(),
verifier.ScrubInlineTime(time.RFC3339))

for _, tc := range tests {
t.Run(tc.testName, func(t *testing.T) {
setting.TestCase("case-" + tc.testName[5:])
verifier.VerifyWithSetting(t, setting, tc.input)
v = v.Configure(verifier.TestCase("case-" + tc.testName[5:]))
v.Verify(tc.input)
})
}
}
8 changes: 3 additions & 5 deletions api-tests/verify_string_comparables_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,10 @@ func TestStringConversion(t *testing.T) {
"float64": float64(11.0),
}

settings := verifier.NewSettings()
settings.UseDirectory("../_testdata")
ver := verifier.NewVerifier(t, verifier.UseDirectory("../_testdata"))

for k, v := range testCases {

settings.TestCase(k)
verifier.VerifyWithSetting(t, settings, v)
ver = ver.Configure(verifier.TestCase(k))
ver.Verify(v)
}
}
Binary file added samples/sample.jpeg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 6 additions & 2 deletions tray/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,16 @@ func (d *Client) IsRunning() bool {

// AddDelete sends delete information to the server
func (d *Client) AddDelete(file string) {
d.sendDelete(file)
if d.IsRunning() {
d.sendDelete(file)
}
}

// AddMove sends move information to the server
func (d *Client) AddMove(tempFile, targetFile, exe string, arguments []string, canKill bool, processId int32) {
d.sendMove(tempFile, targetFile, exe, arguments, canKill, processId)
if d.IsRunning() {
d.sendMove(tempFile, targetFile, exe, arguments, canKill, processId)
}
}

func (d *Client) sendDelete(file string) {
Expand Down
31 changes: 28 additions & 3 deletions utils/file.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ type Files struct {
// File an instance of the Files struct.
var File = Files{}

// GetDirectoriesFromRoot returns the list of directories in a root directory, including all inner sub directories
// GetDirectoriesFromRoot returns the list of directories in a root directory, including all inner sub-directories
func (f *Files) GetDirectoriesFromRoot(root string) ([]string, error) {
matches := make([]string, 0)
err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
Expand Down Expand Up @@ -101,8 +101,8 @@ func (f *Files) WriteText(filePath string, text string) {
}
}

// ReadText reads the content of the file as []byte
func (f *Files) ReadText(filePath string) []byte {
// ReadFile reads the content of the file as []byte
func (f *Files) ReadFile(filePath string) []byte {
buf := bytes.NewBuffer(nil)
file, err := os.Open(filePath)
if err != nil {
Expand Down Expand Up @@ -253,6 +253,31 @@ func (f *Files) GetFileName(path string) string {
return filepath.Base(path)
}

// WriteStream writes a stream to a file
func (f *Files) WriteStream(path string, stream []byte) {
f.tryCreateDir(path)

file, err := os.Create(path)
if err != nil {
panic(fmt.Sprintf("Failed to create file: %s", path))
}

defer f.close(file)

_, err = file.Write(stream)
if err != nil {
panic(fmt.Sprintf("Failed to write file: %s", path))
}
}

func (f *Files) GetLength(path string) int64 {
fi, err := os.Stat(path)
if err != nil {
panic(fmt.Sprintf("Failed to get file info: %s", path))
}
return fi.Size()
}

// From https://github.com/sindresorhus/text-extensions/blob/master/text-extensions.json
// contains list of text file extensions
//
Expand Down

0 comments on commit be08a02

Please sign in to comment.