Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
ad58cfa
slice add length
sku0x20 Sep 22, 2024
c3c906b
add ContainsExactlyInOrder
sku0x20 Sep 26, 2024
685b699
ContainsExactlyInOrder_Slice: change test input from int to struct
sku0x20 Sep 26, 2024
edef913
ContainsExactlyInOrder_Slice: change slice of pointers to slice of va…
sku0x20 Sep 26, 2024
092f826
refactor
sku0x20 Sep 26, 2024
dfe3a9f
add ContainsExactlyAnyOrder_Slice
sku0x20 Sep 26, 2024
d03e2b3
add ContainsOnceInOrder_Slice
sku0x20 Sep 26, 2024
fa823f8
refactor Slice
sku0x20 Sep 26, 2024
636b2a5
refactor
sku0x20 Apr 5, 2025
3491065
tidy
sku0x20 Apr 5, 2025
1b75633
aligning towards
sku0x20 Apr 5, 2025
524c20c
tiding up
sku0x20 Apr 5, 2025
a2b66ac
add todo
sku0x20 Apr 5, 2025
24ad97f
add IsEqualTo
sku0x20 Apr 5, 2025
464c5c9
add equator
sku0x20 Apr 5, 2025
5c86c08
add ReflectDeepEquator.g
sku0x20 Apr 5, 2025
4bec8c5
add ComparableEquator.go
sku0x20 Apr 5, 2025
783c269
migrate Any to using the Equator
sku0x20 Apr 5, 2025
96f3754
rename to assert_type
sku0x20 Apr 5, 2025
cd4f4a4
rename pkg to main
sku0x20 Apr 5, 2025
2d2f5cc
migrate from any to generic
sku0x20 Apr 5, 2025
480b3b0
add GlobalRegistry
sku0x20 Apr 5, 2025
34d1c10
use registry with generic.go
sku0x20 Apr 5, 2025
1a59a72
migrate assert.ThatBool
sku0x20 Apr 5, 2025
e0032aa
migrate string
sku0x20 Apr 5, 2025
9863222
remove assert
sku0x20 Apr 5, 2025
f0d88d7
fix warning
sku0x20 Apr 5, 2025
35b5909
tidy
sku0x20 Apr 5, 2025
791ccfe
tidy warnings
sku0x20 Apr 5, 2025
f68d8b0
add elemEquator in Slice.go
sku0x20 Apr 5, 2025
a03aab0
add slice.IsEqualToIgnoringOrder
sku0x20 Apr 5, 2025
c133c8b
tidy
sku0x20 Apr 5, 2025
d8ffcb6
add contains
sku0x20 Apr 5, 2025
87f7dea
add NotContains assertion
sku0x20 Apr 5, 2025
c0aa2c1
add assert.ThatSlice
sku0x20 Apr 5, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package assertion
package assert_type

import (
"github.com/sku0x20/assertG/src/pkg/assertion"
"github.com/sku0x20/assertG/src/pkg/message"
"github.com/sku0x20/assertG/src/pkg/message/verbs"
"github.com/sku0x20/assertG/src/main/assert_type"
"github.com/sku0x20/assertG/src/main/message"
"github.com/sku0x20/assertG/src/main/message/verbs"
"github.com/sku0x20/gRunner/src/pkg/runner"
"strings"
"testing"
Expand Down Expand Up @@ -33,16 +33,16 @@ func Test_Hard(t *testing.T) {
}

func hardReal(t *testing.T) {
r := runner.NewTestsRunner[*assertion.Hard](t, initE)
r := runner.NewTestsRunner[*assert_type.HardAssert](t, initE)
r.Add(printsMsg)
r.Run()
}

func initE(t *testing.T) *assertion.Hard {
return assertion.NewHard(t)
func initE(t *testing.T) *assert_type.HardAssert {
return assert_type.NewHardAssert(t)
}

func printsMsg(t *testing.T, h *assertion.Hard) {
func printsMsg(t *testing.T, h *assert_type.HardAssert) {
msg := message.Expected().
Verb(verbs.ToBeNil)
h.FailWith(msg)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package assertion
package assert_type

import (
"os"
Expand Down
16 changes: 16 additions & 0 deletions src/main/assert/bool.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package assert

import (
"github.com/sku0x20/assertG/src/main/assert_type"
"github.com/sku0x20/assertG/src/main/asserter"
"github.com/sku0x20/assertG/src/main/registry"
)

func ThatBool(val bool) *asserter.Bool {
at := registry.GlobalRegistryGetAssertType()
return ThatBoolWith(at, val)
}

func ThatBoolWith(a assert_type.AssertType, val bool) *asserter.Bool {
return asserter.NewBool(a, val)
}
24 changes: 24 additions & 0 deletions src/main/assert/generic.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package assert

import (
"github.com/sku0x20/assertG/src/main/assert_type"
"github.com/sku0x20/assertG/src/main/asserter"
"github.com/sku0x20/assertG/src/main/equator"
"github.com/sku0x20/assertG/src/main/registry"
)

// methods cannot have type parameters
// using global registry for AssertType

func That[T any](value T) *asserter.Generic[T] {
at := registry.GlobalRegistryGetAssertType()
return ThatWith(at, equator.NewReflectDeepEquator[T](), value)
}

func ThatWith[T any](
at assert_type.AssertType,
equator equator.Equator[T],
value T,
) *asserter.Generic[T] {
return asserter.NewGeneric(at, equator, value)
}
21 changes: 21 additions & 0 deletions src/main/assert/slice.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package assert

import (
"github.com/sku0x20/assertG/src/main/assert_type"
"github.com/sku0x20/assertG/src/main/asserter"
"github.com/sku0x20/assertG/src/main/equator"
"github.com/sku0x20/assertG/src/main/registry"
)

func ThatSlice[T any](value []T) *asserter.Slice[T] {
at := registry.GlobalRegistryGetAssertType()
return ThatSliceWith(at, equator.NewReflectDeepEquator[T](), value)
}

func ThatSliceWith[T any](
a assert_type.AssertType,
elemEquator equator.Equator[T],
value []T,
) *asserter.Slice[T] {
return asserter.NewSlice(a, elemEquator, value)
}
16 changes: 16 additions & 0 deletions src/main/assert/string.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package assert

import (
"github.com/sku0x20/assertG/src/main/assert_type"
"github.com/sku0x20/assertG/src/main/asserter"
"github.com/sku0x20/assertG/src/main/registry"
)

func ThatString(value string) *asserter.String {
at := registry.GlobalRegistryGetAssertType()
return ThatStringWith(at, value)
}

func ThatStringWith(a assert_type.AssertType, value string) *asserter.String {
return asserter.NewString(a, value)
}
7 changes: 7 additions & 0 deletions src/main/assert_type/AssertType.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package assert_type

import "github.com/sku0x20/assertG/src/main/message"

type AssertType interface {
FailWith(msg *message.Message)
}
18 changes: 18 additions & 0 deletions src/main/assert_type/HardAssert.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package assert_type

import (
"github.com/sku0x20/assertG/src/main/message"
"testing"
)

func NewHardAssert(t *testing.T) *HardAssert {
return &HardAssert{t: t}
}

type HardAssert struct {
t *testing.T
}

func (h *HardAssert) FailWith(msg *message.Message) {
h.t.Fatalf("%s", msg.ToString())
}
25 changes: 25 additions & 0 deletions src/main/assert_type/SoftAssert.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package assert_type

import (
"github.com/sku0x20/assertG/src/main/message"
"testing"
)

func NewSoftAssert(t *testing.T) *SoftAssert {
return &SoftAssert{t, false}
}

type SoftAssert struct {
t *testing.T
failed bool
}

func (s *SoftAssert) FailWith(msg *message.Message) {
s.failed = true
s.t.Helper()
s.t.Logf(msg.ToString())
}

func (s *SoftAssert) Failed() bool {
return s.failed
}
10 changes: 5 additions & 5 deletions src/pkg/asserter/Bool.go → src/main/asserter/Bool.go
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
package asserter

import (
"github.com/sku0x20/assertG/src/pkg/assertion"
"github.com/sku0x20/assertG/src/pkg/message"
"github.com/sku0x20/assertG/src/pkg/message/verbs"
"github.com/sku0x20/assertG/src/main/assert_type"
"github.com/sku0x20/assertG/src/main/message"
"github.com/sku0x20/assertG/src/main/message/verbs"
)

func NewBool(a assertion.Assertion, val bool) *Bool {
func NewBool(a assert_type.AssertType, val bool) *Bool {
return &Bool{a: a, e: val}
}

type Bool struct {
a assertion.Assertion
a assert_type.AssertType
e bool
}

Expand Down
57 changes: 57 additions & 0 deletions src/main/asserter/Generic.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package asserter

import (
"github.com/sku0x20/assertG/src/main/assert_type"
"github.com/sku0x20/assertG/src/main/equator"
"github.com/sku0x20/assertG/src/main/message"
"github.com/sku0x20/assertG/src/main/message/verbs"
"reflect"
)

func NewGeneric[T any](
a assert_type.AssertType,
equator equator.Equator[T],
value T,
) *Generic[T] {
return &Generic[T]{assertion: a, equator: equator, actual: value}
}

type Generic[T any] struct {
assertion assert_type.AssertType
equator equator.Equator[T]
actual T
}

func (g *Generic[T]) IsEqualTo(val any) *Generic[T] {
if !g.equator.AreEqual(g.actual, val) {
g.assertion.FailWith(
message.Expected().
Value(g.actual).
Verb(verbs.ToEqual).
Value(val),
)
}
return g
}

func (g *Generic[T]) IsNil() *Generic[T] {
if !reflect.DeepEqual(g.actual, nil) {
g.assertion.FailWith(
message.Expected().
Value(g.actual).
Verb(verbs.ToBeNil),
)
}
return g
}

func (g *Generic[T]) IsNotNil() *Generic[T] {
if reflect.DeepEqual(g.actual, nil) {
g.assertion.FailWith(
message.Expected().
Value(g.actual).
Verb(verbs.NotToBeNil),
)
}
return g
}
99 changes: 99 additions & 0 deletions src/main/asserter/Slice.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
package asserter

import (
"github.com/sku0x20/assertG/src/main/assert_type"
"github.com/sku0x20/assertG/src/main/equator"
"github.com/sku0x20/assertG/src/main/message"
"github.com/sku0x20/assertG/src/main/message/verbs"
)

func NewSlice[T any](
a assert_type.AssertType,
elemEquator equator.Equator[T],
val []T,
) *Slice[T] {
return &Slice[T]{a, elemEquator, val}
}

type Slice[T any] struct {
assertion assert_type.AssertType
elemEquator equator.Equator[T]
actual []T
}

func (s *Slice[T]) HasLength(l int) *Slice[T] {
if len(s.actual) != l {
s.assertion.FailWith(
message.Expected().
Value(s.actual).
Verb(verbs.ToHaveLength).
Value(l).
Verb(verbs.ButWas).
Value(len(s.actual)),
)
}
return s
}

func (s *Slice[T]) Contains(elem T) *Slice[T] {
for _, actual := range s.actual {
if s.elemEquator.AreEqual(actual, elem) {
break
}
s.assertion.FailWith(
message.Expected().
Value(s.actual).
Verb(verbs.ToContain).
Value(elem),
)
}
return s
}

func (s *Slice[T]) NotContains(elem T) *Slice[T] {
for _, actual := range s.actual {
if s.elemEquator.AreEqual(actual, elem) {
s.assertion.FailWith(
message.Expected().
Value(s.actual).
Verb(verbs.NotToContain).
Value(elem),
)
}
}
return s
}

func (s *Slice[T]) IsEqualTo(expected []T) *Slice[T] {
s.HasLength(len(expected))
for i := 0; i < len(expected); i++ {
if !s.elemEquator.AreEqual(s.actual[i], expected[i]) {
s.assertion.FailWith(
message.Expected().
Value(s.actual).
Verb(verbs.ToEqual).
Value(expected),
)
}
}
return s
}

func (s *Slice[T]) IsEqualToIgnoringOrder(expected []T) *Slice[T] {
s.HasLength(len(expected))
outer:
for _, elem := range expected {
for _, actual := range s.actual {
if s.elemEquator.AreEqual(actual, elem) {
continue outer
}
}
s.assertion.FailWith(
message.Expected().
Value(s.actual).
Verb(verbs.ToEqual).
Value(expected),
)
}
return s
}
10 changes: 5 additions & 5 deletions src/pkg/asserter/String.go → src/main/asserter/String.go
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
package asserter

import (
"github.com/sku0x20/assertG/src/pkg/assertion"
"github.com/sku0x20/assertG/src/pkg/message"
"github.com/sku0x20/assertG/src/pkg/message/verbs"
"github.com/sku0x20/assertG/src/main/assert_type"
"github.com/sku0x20/assertG/src/main/message"
"github.com/sku0x20/assertG/src/main/message/verbs"
"strings"
)

func NewString(a assertion.Assertion, val string) *String {
func NewString(a assert_type.AssertType, val string) *String {
return &String{a, val}
}

type String struct {
a assertion.Assertion
a assert_type.AssertType
e string
}

Expand Down
12 changes: 12 additions & 0 deletions src/main/equator/ComparableEquator.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package equator

type ComparableEquator[T comparable] struct {
}

func NewComparableEquator[T comparable]() *ComparableEquator[T] {
return &ComparableEquator[T]{}
}

func (c *ComparableEquator[T]) AreEqual(a T, b any) bool {
return a == b
}
5 changes: 5 additions & 0 deletions src/main/equator/Equator.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package equator

type Equator[T any] interface {
AreEqual(a T, b any) bool
}
Loading