Codebase list golang-github-imdario-mergo / 3c18c8ce-9d8a-43c1-ba04-68a249c1ae47/main merge_interface_concrete_test.go
3c18c8ce-9d8a-43c1-ba04-68a249c1ae47/main

Tree @3c18c8ce-9d8a-43c1-ba04-68a249c1ae47/main (Download .tar.gz)

merge_interface_concrete_test.go @3c18c8ce-9d8a-43c1-ba04-68a249c1ae47/mainraw · history · blame

package mergo

import (
	"net/http"
	"net/http/httptest"
	"testing"
)

type ifaceTypesTest struct {
	N       int
	Handler http.Handler
}

type ifaceTypesHandler int

func (*ifaceTypesHandler) ServeHTTP(rw http.ResponseWriter, _ *http.Request) {
	rw.Header().Set("Test", "ifaceTypesHandler")
}

func TestMergeInterfaceWithDifferentConcreteTypes(t *testing.T) {
	dst := ifaceTypesTest{
		Handler: new(ifaceTypesHandler),
	}

	src := ifaceTypesTest{
		N: 42,
		Handler: http.HandlerFunc(func(rw http.ResponseWriter, _ *http.Request) {
			rw.Header().Set("Test", "handlerFunc")
		}),
	}

	if err := Merge(&dst, src); err != nil {
		t.Errorf("Error while merging %s", err)
	}

	rw := httptest.NewRecorder()
	dst.Handler.ServeHTTP(rw, nil)

	if got, want := rw.Header().Get("Test"), "ifaceTypesHandler"; got != want {
		t.Errorf("Handler not merged in properly: got %q header value %q, want %q", "Test", got, want)
	}
}