core/testsuite/util_test.go
package testsuite_test
import (
"context"
. "github.com/stretchr/testify/assert"
"github.com/synapsecns/sanguine/core/mocktesting"
"github.com/synapsecns/sanguine/core/testsuite"
"testing"
"time"
)
func TestMustMarshall(t *testing.T) {
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
p := Person{Name: "John Doe", Age: 30}
// Test that MustMarshall successfully marshalls the struct to JSON
result := testsuite.MustMarshall(t, p)
expectedResult := `{"name":"John Doe","age":30}`
if string(result) != expectedResult {
t.Errorf("Expected %q but got %q", expectedResult, result)
}
// Test that MustMarshall fails when given an unmarshallable input
invalidInput := make(chan int)
mockTester := mocktesting.NewMockTester("mock tester")
mockTester.SetOutputHandler(func(i ...interface{}) {
// do nothing
})
testsuite.MustMarshall(mockTester, invalidInput)
True(t, mockTester.Failed())
}
func TestEventually(t *testing.T) {
// Test that Eventually returns without error when the condition is true before the context times out
ctx, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond)
defer cancel()
count := 0
testFunc := func() bool {
count++
return count >= 5
}
testsuite.Eventually(ctx, t, testFunc)
if count != 5 {
t.Errorf("Expected testFunc to be called 5 times but got %d", count)
}
// Test that Eventually returns an error when the context times out before the condition is true
ctx, cancel = context.WithTimeout(context.Background(), 100*time.Millisecond)
defer cancel()
testFunc = func() bool {
return false
}
mockTester := mocktesting.NewMockTester("mock tester")
testsuite.Eventually(ctx, mockTester, testFunc)
True(t, mockTester.Failed())
}
// foo is a function that is used to test GetFunctionName.
func foo() {
}
// bar is a struct that is used to test GetFunctionName.
type bar struct {
}
// foo is a method that is used to test GetFunctionName.
func (b *bar) foo() {}
func TestGetFunctionName(t *testing.T) {
// Test that GetFunctionName returns the name of a function
functionName := testsuite.GetFunctionName(foo)
if functionName != "foo" {
t.Errorf("Expected GetFunctionName to return %q but got %q", "foo", functionName)
}
// Test that GetFunctionName returns the name of a method
b := bar{}
functionName = testsuite.GetFunctionName(b.foo)
if functionName != "foo" {
t.Errorf("Expected GetFunctionName to return %q but got %q", "foo", functionName)
}
}