// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16: //go:build go1.19 package formatter import ( "reflect" "testing" ) type dummy struct{} func (d *dummy) Func1() string { return "Func1" } func (d *dummy) func2() string { //nolint:unused return "func2(should not be marshalled)" } func (d *dummy) Func3() (string, int) { return "Func3(should not be marshalled)", -42 } func (d *dummy) Func4() int { return 4 } type dummyType string func (d *dummy) Func5() dummyType { return dummyType("Func5") } func (d *dummy) FullHeader() string { return "FullHeader(should not be marshalled)" } var dummyExpected = map[string]interface{}{ "Func1": "Func1", "Func4": 4, "Func5": dummyType("Func5"), } func TestMarshalMap(t *testing.T) { d := dummy{} m, err := marshalMap(&d) if err != nil { t.Fatal(err) } if !reflect.DeepEqual(dummyExpected, m) { t.Fatalf("expected %+v, got %+v", dummyExpected, m) } } func TestMarshalMapBad(t *testing.T) { if _, err := marshalMap(nil); err == nil { t.Fatal("expected an error (argument is nil)") } if _, err := marshalMap(dummy{}); err == nil { t.Fatal("expected an error (argument is non-pointer)") } x := 42 if _, err := marshalMap(&x); err == nil { t.Fatal("expected an error (argument is a pointer to non-struct)") } }