51 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package tools
 | |
| 
 | |
| import (
 | |
| 	"bytes"
 | |
| 	"encoding/json"
 | |
| 	"errors"
 | |
| 	"testing"
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| )
 | |
| 
 | |
| func TestWriteBuffer(t *testing.T) {
 | |
| 	when := time.Now()
 | |
| 	tests := []struct {
 | |
| 		name  string
 | |
| 		value any
 | |
| 		out   string
 | |
| 		err   error
 | |
| 	}{
 | |
| 		{"nil", nil, "", nil},
 | |
| 		{"string", "hi", "hi", nil},
 | |
| 		{"bytes", []byte{104, 105}, "hi", nil},
 | |
| 		{"byte", byte(104), "h", nil},
 | |
| 		{"rune", 'h', "h", nil},
 | |
| 		{"int", 42, "42", nil},
 | |
| 		{"int64", int64(42), "42", nil},
 | |
| 		{"float", 42.13, "42.13", nil},
 | |
| 		{"bool", false, "false", nil},
 | |
| 		{"json.Number", json.Number("42.13"), "42.13", nil},
 | |
| 		{"json.RawMessage", json.RawMessage("{}"), "{}", nil},
 | |
| 		{"time", when, when.Format(time.RFC3339), nil},
 | |
| 		{"slice", []any{1, 2, "foo"}, `[1,2,"foo"]`, nil},
 | |
| 		{"map", map[string]any{"baz": 42, "foo": "bar"}, `{"baz":42,"foo":"bar"}`, nil},
 | |
| 		{"struct", struct{}{}, "", errors.New("Unsupported type struct {}")},
 | |
| 	}
 | |
| 
 | |
| 	for _, tt := range tests {
 | |
| 		t.Run(tt.name, getWriteTestRunner(tt.value, tt.out, tt.err))
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func getWriteTestRunner(value any, out string, err error) func(*testing.T) {
 | |
| 	return func(t *testing.T) {
 | |
| 		buff := &bytes.Buffer{}
 | |
| 		n, er := WriteValue(buff, value)
 | |
| 		assert.Equal(t, len(out), n)
 | |
| 		assert.Equal(t, err, er)
 | |
| 		assert.Equal(t, out, buff.String())
 | |
| 	}
 | |
| }
 |