File: asserts.go

package info (click to toggle)
golang-github-getsentry-sentry-go 0.40.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,900 kB
  • sloc: makefile: 85; sh: 21
file content (96 lines) | stat: -rw-r--r-- 2,353 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package testutils

import (
	"fmt"
	"reflect"
	"testing"

	"github.com/getsentry/sentry-go/internal/otel/baggage"
	"github.com/google/go-cmp/cmp"
)

func AssertEqual(t *testing.T, got, want interface{}, userMessage ...interface{}) {
	t.Helper()

	// Ideally, we would switch to cmp.Diff. However, in a general case, cmp.Diff
	// is not able to compare structs with unexported (private) fields by default. There
	// are ways to override modify that behaviour (e.g. by passing AllowUnexported), but
	// it significantly complicates its usage.
	if !reflect.DeepEqual(got, want) {
		logFailedAssertion(t, formatUnequalValues(got, want), userMessage...)
	}
}

func AssertNotEqual(t *testing.T, got, want interface{}, userMessage ...interface{}) {
	t.Helper()

	if reflect.DeepEqual(got, want) {
		logFailedAssertion(t, formatUnequalValues(got, want), userMessage...)
	}
}

func AssertTrue(t *testing.T, condition bool, userMessage ...interface{}) {
	t.Helper()

	if !condition {
		logFailedAssertion(t, "\nExpected: true", userMessage...)
	}
}

func AssertFalse(t *testing.T, condition bool, userMessage ...interface{}) {
	t.Helper()

	if condition {
		logFailedAssertion(t, "\nExpected: false", userMessage...)
	}
}

func logFailedAssertion(t *testing.T, summary string, userMessage ...interface{}) {
	t.Helper()
	text := summary

	if len(userMessage) > 0 {
		if message, ok := userMessage[0].(string); ok {
			if message != "" && len(userMessage) > 1 {
				text = fmt.Sprintf(message, userMessage[1:]...) + text
			} else if message != "" {
				text = fmt.Sprint(message) + text
			}
		}
	}

	t.Error(text)
}

func formatUnequalValues(got, want interface{}) string {
	var a, b string

	if reflect.TypeOf(got) != reflect.TypeOf(want) {
		a, b = fmt.Sprintf("%T(%#v)", got, got), fmt.Sprintf("%T(%#v)", want, want)
	} else {
		a, b = fmt.Sprintf("%#v", got), fmt.Sprintf("%#v", want)
	}

	return fmt.Sprintf("\ngot: %s\nwant: %s", a, b)
}

func AssertBaggageStringsEqual(t *testing.T, got, want string) {
	t.Helper()

	baggageGot, err := baggage.Parse(got)
	if err != nil {
		t.Error(err)
	}
	baggageWant, err := baggage.Parse(want)
	if err != nil {
		t.Error(err)
	}

	if diff := cmp.Diff(
		baggageWant,
		baggageGot,
		cmp.AllowUnexported(baggage.Member{}, baggage.Baggage{}),
	); diff != "" {
		t.Errorf("Comparing Baggage (-want +got):\n%s", diff)
	}
}