241 lines
5.9 KiB
Go
241 lines
5.9 KiB
Go
package tst
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
// These tests exercise the success-paths of each assertion: i.e. the cases
|
|
// where the assertion should NOT mark the test as failed. They verify the
|
|
// boolean/conditional logic of each function. We avoid testing the failure
|
|
// branches because the assertions take a concrete *testing.T (not an
|
|
// interface), so substituting a mock would require unsafe/reflection tricks
|
|
// that are brittle and cascade failures to the parent test.
|
|
|
|
// --- AssertEqual ----------------------------------------------------------
|
|
|
|
func TestAssertEqual_Int(t *testing.T) {
|
|
AssertEqual(t, 42, 42)
|
|
AssertEqual(t, -1, -1)
|
|
AssertEqual(t, 0, 0)
|
|
}
|
|
|
|
func TestAssertEqual_String(t *testing.T) {
|
|
AssertEqual(t, "hello", "hello")
|
|
AssertEqual(t, "", "")
|
|
}
|
|
|
|
func TestAssertEqual_Bool(t *testing.T) {
|
|
AssertEqual(t, true, true)
|
|
AssertEqual(t, false, false)
|
|
}
|
|
|
|
func TestAssertEqual_Float(t *testing.T) {
|
|
AssertEqual(t, 3.14, 3.14)
|
|
}
|
|
|
|
// --- AssertArrayEqual -----------------------------------------------------
|
|
|
|
func TestAssertArrayEqual_Empty(t *testing.T) {
|
|
AssertArrayEqual(t, []int{}, []int{})
|
|
}
|
|
|
|
func TestAssertArrayEqual_Equal(t *testing.T) {
|
|
AssertArrayEqual(t, []int{1, 2, 3}, []int{1, 2, 3})
|
|
AssertArrayEqual(t, []string{"a", "b"}, []string{"a", "b"})
|
|
}
|
|
|
|
func TestAssertArrayEqual_SingleElement(t *testing.T) {
|
|
AssertArrayEqual(t, []int{7}, []int{7})
|
|
}
|
|
|
|
// --- AssertNotEqual -------------------------------------------------------
|
|
|
|
func TestAssertNotEqual_Int(t *testing.T) {
|
|
AssertNotEqual(t, 1, 2)
|
|
AssertNotEqual(t, 0, -1)
|
|
}
|
|
|
|
func TestAssertNotEqual_String(t *testing.T) {
|
|
AssertNotEqual(t, "foo", "bar")
|
|
AssertNotEqual(t, "", "x")
|
|
}
|
|
|
|
func TestAssertNotEqual_Bool(t *testing.T) {
|
|
AssertNotEqual(t, true, false)
|
|
}
|
|
|
|
// --- AssertDeepEqual ------------------------------------------------------
|
|
|
|
func TestAssertDeepEqual_Struct(t *testing.T) {
|
|
type s struct {
|
|
A int
|
|
B string
|
|
}
|
|
AssertDeepEqual(t, s{A: 1, B: "x"}, s{A: 1, B: "x"})
|
|
}
|
|
|
|
func TestAssertDeepEqual_Slice(t *testing.T) {
|
|
AssertDeepEqual(t, []int{1, 2, 3}, []int{1, 2, 3})
|
|
}
|
|
|
|
func TestAssertDeepEqual_Map(t *testing.T) {
|
|
AssertDeepEqual(t, map[string]int{"a": 1, "b": 2}, map[string]int{"a": 1, "b": 2})
|
|
}
|
|
|
|
func TestAssertDeepEqual_NilSlice(t *testing.T) {
|
|
var a, b []int
|
|
AssertDeepEqual(t, a, b)
|
|
}
|
|
|
|
func TestAssertDeepEqual_NestedStruct(t *testing.T) {
|
|
type inner struct{ X int }
|
|
type outer struct {
|
|
I inner
|
|
S []string
|
|
}
|
|
a := outer{I: inner{X: 1}, S: []string{"a", "b"}}
|
|
b := outer{I: inner{X: 1}, S: []string{"a", "b"}}
|
|
AssertDeepEqual(t, a, b)
|
|
}
|
|
|
|
// --- AssertSetDeepEqual ---------------------------------------------------
|
|
|
|
func TestAssertSetDeepEqual_Empty(t *testing.T) {
|
|
AssertSetDeepEqual(t, []int{}, []int{})
|
|
}
|
|
|
|
func TestAssertSetDeepEqual_SameOrder(t *testing.T) {
|
|
AssertSetDeepEqual(t, []int{1, 2, 3}, []int{1, 2, 3})
|
|
}
|
|
|
|
func TestAssertSetDeepEqual_DifferentOrder(t *testing.T) {
|
|
AssertSetDeepEqual(t, []int{3, 1, 2}, []int{1, 2, 3})
|
|
}
|
|
|
|
func TestAssertSetDeepEqual_Strings(t *testing.T) {
|
|
AssertSetDeepEqual(t, []string{"b", "a", "c"}, []string{"a", "b", "c"})
|
|
}
|
|
|
|
func TestAssertSetDeepEqual_Structs(t *testing.T) {
|
|
type s struct{ V int }
|
|
AssertSetDeepEqual(t, []s{{V: 2}, {V: 1}}, []s{{V: 1}, {V: 2}})
|
|
}
|
|
|
|
// --- AssertNotDeepEqual ---------------------------------------------------
|
|
|
|
func TestAssertNotDeepEqual_Struct(t *testing.T) {
|
|
type s struct {
|
|
A int
|
|
}
|
|
AssertNotDeepEqual(t, s{A: 1}, s{A: 2})
|
|
}
|
|
|
|
func TestAssertNotDeepEqual_Slice(t *testing.T) {
|
|
AssertNotDeepEqual(t, []int{1, 2}, []int{1, 2, 3})
|
|
}
|
|
|
|
func TestAssertNotDeepEqual_Map(t *testing.T) {
|
|
AssertNotDeepEqual(t, map[string]int{"a": 1}, map[string]int{"b": 1})
|
|
}
|
|
|
|
// --- AssertDeRefEqual -----------------------------------------------------
|
|
|
|
func TestAssertDeRefEqual_Int(t *testing.T) {
|
|
v := 42
|
|
AssertDeRefEqual(t, &v, 42)
|
|
}
|
|
|
|
func TestAssertDeRefEqual_String(t *testing.T) {
|
|
v := "hello"
|
|
AssertDeRefEqual(t, &v, "hello")
|
|
}
|
|
|
|
func TestAssertDeRefEqual_Bool(t *testing.T) {
|
|
v := true
|
|
AssertDeRefEqual(t, &v, true)
|
|
}
|
|
|
|
// --- AssertPtrEqual -------------------------------------------------------
|
|
|
|
func TestAssertPtrEqual_BothNil(t *testing.T) {
|
|
var a, b *int
|
|
AssertPtrEqual(t, a, b)
|
|
}
|
|
|
|
func TestAssertPtrEqual_SameValue(t *testing.T) {
|
|
a, b := 5, 5
|
|
AssertPtrEqual(t, &a, &b)
|
|
}
|
|
|
|
func TestAssertPtrEqual_DifferentPointersSameValue(t *testing.T) {
|
|
a, b := "hi", "hi"
|
|
AssertPtrEqual(t, &a, &b)
|
|
}
|
|
|
|
func TestAssertPtrEqual_SamePointer(t *testing.T) {
|
|
a := 99
|
|
AssertPtrEqual(t, &a, &a)
|
|
}
|
|
|
|
// --- AssertHexEqual -------------------------------------------------------
|
|
|
|
func TestAssertHexEqual_Empty(t *testing.T) {
|
|
AssertHexEqual(t, "", []byte{})
|
|
}
|
|
|
|
func TestAssertHexEqual_Bytes(t *testing.T) {
|
|
AssertHexEqual(t, "deadbeef", []byte{0xde, 0xad, 0xbe, 0xef})
|
|
}
|
|
|
|
func TestAssertHexEqual_SingleByte(t *testing.T) {
|
|
AssertHexEqual(t, "ff", []byte{0xff})
|
|
}
|
|
|
|
func TestAssertHexEqual_AllZero(t *testing.T) {
|
|
AssertHexEqual(t, "0000", []byte{0x00, 0x00})
|
|
}
|
|
|
|
// --- AssertTrue / AssertFalse ---------------------------------------------
|
|
|
|
func TestAssertTrue(t *testing.T) {
|
|
AssertTrue(t, true)
|
|
}
|
|
|
|
func TestAssertFalse(t *testing.T) {
|
|
AssertFalse(t, false)
|
|
}
|
|
|
|
// --- AssertNoErr ----------------------------------------------------------
|
|
|
|
func TestAssertNoErr_Nil(t *testing.T) {
|
|
AssertNoErr(t, nil)
|
|
}
|
|
|
|
// --- AssertStrRepEqual ----------------------------------------------------
|
|
|
|
func TestAssertStrRepEqual_Same(t *testing.T) {
|
|
AssertStrRepEqual(t, 42, 42)
|
|
AssertStrRepEqual(t, "abc", "abc")
|
|
}
|
|
|
|
func TestAssertStrRepEqual_DifferentTypesSameRep(t *testing.T) {
|
|
// 42 and "42" both stringify to "42" via %v
|
|
AssertStrRepEqual(t, 42, "42")
|
|
}
|
|
|
|
func TestAssertStrRepEqual_Bool(t *testing.T) {
|
|
AssertStrRepEqual(t, true, true)
|
|
}
|
|
|
|
// --- AssertStrRepNotEqual -------------------------------------------------
|
|
|
|
func TestAssertStrRepNotEqual_Different(t *testing.T) {
|
|
AssertStrRepNotEqual(t, 42, 43)
|
|
AssertStrRepNotEqual(t, "abc", "xyz")
|
|
}
|
|
|
|
func TestAssertStrRepNotEqual_BoolVsInt(t *testing.T) {
|
|
// "true" != "1"
|
|
AssertStrRepNotEqual(t, true, 1)
|
|
}
|