package parse import ( "bytes" "io" . "testing" "github.com/mediocregopher/ginger/seq" "github.com/mediocregopher/ginger/types" ) func TestParseBareString(t *T) { m := map[string][]types.Elem{ "1": {types.GoType{int(1)}}, "-1": {types.GoType{int(-1)}}, "+1": {types.GoType{int(1)}}, "1.5": {types.GoType{float32(1.5)}}, "-1.5": {types.GoType{float32(-1.5)}}, "+1.5": {types.GoType{float32(1.5)}}, "1.5e1": {types.GoType{float32(15)}}, "foo": {types.GoType{":foo"}}, "foo 4 bar": { types.GoType{":foo"}, types.GoType{4}, types.GoType{":bar"}, }, "foo \"bar\"": { types.GoType{":foo"}, types.GoType{"bar"}, }, "()": {seq.NewList()}, "(foo)": {seq.NewList( types.GoType{":foo"}, )}, "(foo (bar))": {seq.NewList( types.GoType{":foo"}, seq.NewList(types.GoType{":bar"}), )}, "{}": {seq.NewHashMap()}, "{foo bar}": {seq.NewHashMap( seq.KeyVal(types.GoType{":foo"}, types.GoType{":bar"}), )}, } for input, output := range m { buf := bytes.NewBufferString(input) p := NewParser(buf) parsed := make([]types.Elem, 0, len(output)) for { el, err := p.ReadElem() if err == io.EOF { break } else if err != nil { t.Fatal(err) } parsed = append(parsed, el) } if len(output) != len(parsed) { t.Fatalf("input: %q %#v != %#v", input, output, parsed) } for i := range output { if !output[i].Equal(parsed[i]) { t.Fatalf("input: %q (%d) %#v != %#v", input, i, output[i], parsed[i]) } } } }