Added basic assert functions
This commit is contained in:
parent
6096ae9239
commit
6b735732b5
95
Contains.go
Normal file
95
Contains.go
Normal file
@ -0,0 +1,95 @@
|
||||
package assert
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// Contains asserts that a contains b.
|
||||
func Contains(t testing.TB, a any, b any) {
|
||||
if contains(a, b) {
|
||||
return
|
||||
}
|
||||
|
||||
t.Errorf(`
|
||||
file: %s
|
||||
assert: Contains
|
||||
container:%v
|
||||
element: %v`, file(t), a, b)
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
// NotContains asserts that a doesn't contain b.
|
||||
func NotContains(t testing.TB, a any, b any) {
|
||||
if !contains(a, b) {
|
||||
return
|
||||
}
|
||||
|
||||
t.Errorf(`
|
||||
file: %s
|
||||
assert: NotContains
|
||||
container:%v
|
||||
element: %v`, file(t), a, b)
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
// contains returns whether container contains the given the element.
|
||||
// It works with strings, maps and slices.
|
||||
func contains(container any, element any) bool {
|
||||
containerValue := reflect.ValueOf(container)
|
||||
|
||||
switch containerValue.Kind() {
|
||||
case reflect.String:
|
||||
elementValue := reflect.ValueOf(element)
|
||||
return strings.Contains(containerValue.String(), elementValue.String())
|
||||
|
||||
case reflect.Map:
|
||||
keys := containerValue.MapKeys()
|
||||
|
||||
for _, key := range keys {
|
||||
if key.Interface() == element {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
case reflect.Slice:
|
||||
elementValue := reflect.ValueOf(element)
|
||||
|
||||
if elementValue.Kind() == reflect.Slice {
|
||||
elementLength := elementValue.Len()
|
||||
|
||||
if elementLength == 0 {
|
||||
return true
|
||||
}
|
||||
|
||||
if elementLength > containerValue.Len() {
|
||||
return false
|
||||
}
|
||||
|
||||
matchingElements := 0
|
||||
|
||||
for i := 0; i < containerValue.Len(); i++ {
|
||||
if containerValue.Index(i).Interface() == elementValue.Index(matchingElements).Interface() {
|
||||
matchingElements++
|
||||
} else {
|
||||
matchingElements = 0
|
||||
}
|
||||
|
||||
if matchingElements == elementLength {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
for i := 0; i < containerValue.Len(); i++ {
|
||||
if containerValue.Index(i).Interface() == element {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
29
Contains_test.go
Normal file
29
Contains_test.go
Normal file
@ -0,0 +1,29 @@
|
||||
package assert_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"git.akyoto.dev/go/assert"
|
||||
)
|
||||
|
||||
func TestContains(t *testing.T) {
|
||||
assert.Contains(t, "Hello", "H")
|
||||
assert.Contains(t, "Hello", "Hello")
|
||||
assert.Contains(t, []string{"Hello", "World"}, "Hello")
|
||||
assert.Contains(t, []int{1, 2, 3}, 2)
|
||||
assert.Contains(t, []int{1, 2, 3}, []int{})
|
||||
assert.Contains(t, []int{1, 2, 3}, []int{1, 2})
|
||||
assert.Contains(t, []byte{'H', 'e', 'l', 'l', 'o'}, byte('e'))
|
||||
assert.Contains(t, []byte{'H', 'e', 'l', 'l', 'o'}, []byte{'e', 'l'})
|
||||
assert.Contains(t, map[string]int{"Hello": 1, "World": 2}, "Hello")
|
||||
}
|
||||
|
||||
func TestNotContains(t *testing.T) {
|
||||
assert.NotContains(t, "Hello", "404")
|
||||
assert.NotContains(t, []string{"Hello", "World"}, "404")
|
||||
assert.NotContains(t, []int{1, 2, 3}, 4)
|
||||
assert.NotContains(t, []int{1, 2, 3}, []int{2, 1})
|
||||
assert.NotContains(t, []byte{'H', 'e', 'l', 'l', 'o'}, byte('a'))
|
||||
assert.NotContains(t, []byte{'H', 'e', 'l', 'l', 'o'}, []byte{'l', 'e'})
|
||||
assert.NotContains(t, map[string]int{"Hello": 1, "World": 2}, "404")
|
||||
}
|
50
Nil.go
Normal file
50
Nil.go
Normal file
@ -0,0 +1,50 @@
|
||||
package assert
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// Nil asserts that the given parameter equals nil.
|
||||
func Nil(t testing.TB, a any) {
|
||||
if isNil(a) {
|
||||
return
|
||||
}
|
||||
|
||||
t.Errorf(`
|
||||
file: %s
|
||||
assert: Nil
|
||||
value: %v
|
||||
expected: nil`, file(t), a)
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
// NotNil asserts that the given parameter does not equal nil.
|
||||
func NotNil(t testing.TB, a any) {
|
||||
if !isNil(a) {
|
||||
return
|
||||
}
|
||||
|
||||
t.Errorf(`
|
||||
file: %s
|
||||
assert: NotNil
|
||||
value: %v
|
||||
expected: not nil`, file(t), a)
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
// isNil returns true if the object is nil.
|
||||
func isNil(object any) bool {
|
||||
if object == nil {
|
||||
return true
|
||||
}
|
||||
|
||||
value := reflect.ValueOf(object)
|
||||
|
||||
switch value.Kind() {
|
||||
case reflect.Chan, reflect.Func, reflect.Map, reflect.Ptr, reflect.UnsafePointer, reflect.Interface, reflect.Slice:
|
||||
return value.IsNil()
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
25
Nil_test.go
Normal file
25
Nil_test.go
Normal file
@ -0,0 +1,25 @@
|
||||
|
||||
package assert_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"git.akyoto.dev/go/assert"
|
||||
)
|
||||
|
||||
func TestNil(t *testing.T) {
|
||||
var nilPointer *T
|
||||
var nilSlice []byte
|
||||
|
||||
assert.Nil(t, nil)
|
||||
assert.Nil(t, nilPointer)
|
||||
assert.Nil(t, nilSlice)
|
||||
}
|
||||
|
||||
func TestNotNil(t *testing.T) {
|
||||
assert.NotNil(t, 0)
|
||||
assert.NotNil(t, "Hello")
|
||||
assert.NotNil(t, []byte{})
|
||||
assert.NotNil(t, T{})
|
||||
assert.NotNil(t, &T{})
|
||||
}
|
13
True.go
Normal file
13
True.go
Normal file
@ -0,0 +1,13 @@
|
||||
package assert
|
||||
|
||||
import "testing"
|
||||
|
||||
// True asserts that the given parameter is true.
|
||||
func True(t testing.TB, a bool) {
|
||||
Equal(t, a, true)
|
||||
}
|
||||
|
||||
// False asserts that the given parameter is false.
|
||||
func False(t testing.TB, a bool) {
|
||||
Equal(t, a, false)
|
||||
}
|
12
True_test.go
Normal file
12
True_test.go
Normal file
@ -0,0 +1,12 @@
|
||||
package assert_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"git.akyoto.dev/go/assert"
|
||||
)
|
||||
|
||||
func TestTrue(t *testing.T) {
|
||||
assert.True(t, true)
|
||||
assert.False(t, false)
|
||||
}
|
Loading…
Reference in New Issue
Block a user