736
736
t.Fatalf("expected %v got %v", data, newData)
740
// A top-level nil pointer generates a panic with a helpful string-valued message.
741
func TestTopLevelNilPointer(t *testing.T) {
742
errMsg := topLevelNilPanic(t)
744
t.Fatal("top-level nil pointer did not panic")
746
if !strings.Contains(errMsg, "nil pointer") {
747
t.Fatal("expected nil pointer error, got:", errMsg)
751
func topLevelNilPanic(t *testing.T) (panicErr string) {
754
if err, ok := e.(string); ok {
759
buf := new(bytes.Buffer)
760
if err := NewEncoder(buf).Encode(ip); err != nil {
761
t.Fatal("error in encode:", err)
766
func TestNilPointerInsideInterface(t *testing.T) {
773
buf := new(bytes.Buffer)
774
err := NewEncoder(buf).Encode(si)
776
t.Fatal("expected error, got none")
778
errMsg := err.Error()
779
if !strings.Contains(errMsg, "nil pointer") || !strings.Contains(errMsg, "interface") {
780
t.Fatal("expected error about nil pointer and interface, got:", errMsg)
784
type Bug4Public struct {
789
type Bug4Secret struct {
790
a int // error: no exported fields.
793
// Test that a failed compilation doesn't leave around an executable encoder.
795
func TestMutipleEncodingsOfBadType(t *testing.T) {
798
Secret: Bug4Secret{1},
800
buf := new(bytes.Buffer)
801
enc := NewEncoder(buf)
804
t.Fatal("first encoding: expected error")
807
enc = NewEncoder(buf)
810
t.Fatal("second encoding: expected error")
812
if !strings.Contains(err.Error(), "no exported fields") {
813
t.Errorf("expected error about no exported fields; got %v", err)
817
// There was an error check comparing the length of the input with the
818
// length of the slice being decoded. It was wrong because the next
819
// thing in the input might be a type definition, which would lead to
820
// an incorrect length check. This test reproduces the corner case.
825
func Test29ElementSlice(t *testing.T) {
827
src := make([]interface{}, 100) // Size needs to be bigger than size of type definition.
831
buf := new(bytes.Buffer)
832
err := NewEncoder(buf).Encode(src)
834
t.Fatalf("encode: %v", err)
838
var dst []interface{}
839
err = NewDecoder(buf).Decode(&dst)
841
t.Errorf("decode: %v", err)