Skip to content

EqualExportedValues can compare two slices #1584

@redachl

Description

@redachl

Description

EqualExportedValues does not handle slices for now, although Equal and EqualValues compare each element of 2 slices.

Proposed solution

Removing the check that the provided variables are structs or pointers to structs here allows comparing two slices.

if aType.Kind() != reflect.Struct {

Happy to propose a PR if you agree with this design!

I made a PR to remove the described checks.

Use case

The implementation of EqualExportedValues can actually compare slices, if they are inside a struct.

Here is an example.

func TestSomething(t *testing.T) {
	type sliceWrapper struct {
		ExportedSlice []int
	}
	a := sliceWrapper{ExportedSlice: []int{1, 2, 3}}
	b := sliceWrapper{ExportedSlice: []int{1, 2, 3}}

	assert.Equal(t, a.ExportedSlice, b.ExportedSlice)               // OK
	assert.EqualValues(t, a.ExportedSlice, b.ExportedSlice)         // OK
	assert.EqualExportedValues(t, a.ExportedSlice, b.ExportedSlice) // Types expected to both be struct or pointer to struct

	// Possible workaround: use a struct wrapper.
	assert.Equal(t, a, b)               // OK
	assert.EqualValues(t, a, b)         // OK
	assert.EqualExportedValues(t, a, b) // OK
}	

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions