| 
									
										
										
										
											2024-03-03 13:56:48 -06:00
										 |  |  | 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}, | 
					
						
							| 
									
										
										
										
											2024-03-10 15:49:36 -05:00
										 |  |  | 		{"slice", []any{1, 2, "foo"}, `[1,2,"foo"]`, nil}, | 
					
						
							|  |  |  | 		{"map", map[string]any{"baz": 42, "foo": "bar"}, `{"baz":42,"foo":"bar"}`, nil}, | 
					
						
							| 
									
										
										
										
											2024-03-03 13:56:48 -06:00
										 |  |  | 		{"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()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |