This commit is contained in:
@@ -0,0 +1,240 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user