package formatter import ( "bytes" "testing" "gotest.tools/v3/assert" ) func TestFormat(t *testing.T) { f := Format("json") assert.Assert(t, f.IsJSON()) assert.Assert(t, !f.IsTable()) f = Format("table") assert.Assert(t, !f.IsJSON()) assert.Assert(t, f.IsTable()) f = Format("other") assert.Assert(t, !f.IsJSON()) assert.Assert(t, !f.IsTable()) } type fakeSubContext struct { Name string } func (f fakeSubContext) FullHeader() interface{} { return map[string]string{"Name": "NAME"} } func TestContext(t *testing.T) { testCases := []struct { name string format string expected string }{ { name: "json format", format: JSONFormatKey, expected: `{"Name":"test"} `, }, { name: "table format", format: `table {{.Name}}`, expected: `NAME test `, }, } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { buf := bytes.NewBuffer(nil) ctx := Context{ Format: Format(tc.format), Output: buf, } subContext := fakeSubContext{Name: "test"} subFormat := func(f func(sub SubContext) error) error { return f(subContext) } err := ctx.Write(&subContext, subFormat) assert.NilError(t, err) assert.Equal(t, buf.String(), tc.expected) }) } }