// Test verifies that encoding and decoding a complex data value // produces an equal result. // // The test does not make direct assertions about the encoded output // because the output depends on map iteration order, which is // nondeterministic. The output of the t.Log statements can be // inspected by running the test with the -v flag: // // $ go test -v // func Test(t *testing.T) { type Movie struct { Title, Subtitle string Year int Actor map[string]string Oscars []string Sequel *string } strangelove := Movie{ Title: "Dr. Strangelove", Subtitle: "How I Learned to Stop Worrying and Love the Bomb", Year: 1964, Actor: map[string]string{ "Dr. Strangelove": "Peter Sellers", "Grp. Capt. Lionel Mandrake": "Peter Sellers", "Pres. Merkin Muffley": "Peter Sellers", "Gen. Buck Turgidson": "George C. Scott", "Brig. Gen. Jack D. Ripper": "Sterling Hayden", `Maj. T.J. "King" Kong`: "Slim Pickens", }, Oscars: []string{ "Best Actor (Nomin.)", "Best Adapted Screenplay (Nomin.)", "Best Director (Nomin.)", "Best Picture (Nomin.)", }, } // Encode it data, err := _sexpr.Marshal(strangelove) if err != nil { t.Fatalf("Marshal failed: %v", err) } t.Logf("Marshal() = %s\n", data) // Decode it dec := NewDecoder(bytes.NewReader(data)) var movie Movie if err := Unmarshal(dec, &movie); err != nil { t.Fatalf("Unmarshal failed: %v", err) } t.Logf("Unmarshal() = %+v\n", movie) // Check equality. if !reflect.DeepEqual(movie, strangelove) { t.Fatal("not equal") } }
func TestDecode(t *testing.T) { type Movie struct { Title, Subtitle string Year int Actor map[string]string Oscars []string Sequel *string } strangelove := Movie{ Title: "Dr. Strangelove", Subtitle: "How I Learned to Stop Worrying and Love the Bomb", Year: 1964, Actor: map[string]string{ "Dr. Strangelove": "Peter Sellers", "Grp. Capt. Lionel Mandrake": "Peter Sellers", "Pres. Merkin Muffley": "Peter Sellers", "Gen. Buck Turgidson": "George C. Scott", "Brig. Gen. Jack D. Ripper": "Sterling Hayden", `Maj. T.J. "King" Kong`: "Slim Pickens", }, Oscars: []string{ "Best Actor (Nomin.)", "Best Adapted Screenplay (Nomin.)", "Best Director (Nomin.)", "Best Picture (Nomin.)", }, } // Encode it data, err := sexpr.Marshal(strangelove) if err != nil { t.Fatalf("Marshal failed: %v", err) } t.Logf("Marshal() = %s\n", data) //fmt.Printf("Marshal() = %s\n", data) dec := NewDecoder(bytes.NewBuffer(data)) for { tok, err := dec.Token() if err == io.EOF { break } switch tok.(type) { case StartList: t.Logf("(") fmt.Print("(") case EndList: t.Logf(")") fmt.Print(")") case Int: t.Logf("%s ", tok.(Int).str) fmt.Printf("%s ", tok.(Int).str) case Symbol: t.Logf("%s ", tok.(Symbol)) fmt.Printf("%s ", tok.(Symbol)) case String: t.Logf("%s ", tok.(String)) fmt.Printf("%s ", tok.(String)) } } }