github.com/teddydd/sh@v2.6.4+incompatible/cmd/shfmt/json_test.go (about) 1 // Copyright (c) 2017, Daniel Martà <mvdan@mvdan.cc> 2 // See LICENSE for licensing information 3 4 package main 5 6 import ( 7 "bytes" 8 "fmt" 9 "strings" 10 "testing" 11 12 "mvdan.cc/sh/syntax" 13 ) 14 15 var jsonTests = []struct { 16 in string 17 want string 18 }{ 19 {"", `{"End":{"Col":0,"Line":0,"Offset":0},"Last":[],"Name":"","Pos":{"Col":0,"Line":0,"Offset":0},"Stmts":[]}`}, 20 {"foo", `{"End":{"Col":4,"Line":1,"Offset":3},"Last":[],"Name":"","Pos":{"Col":1,"Line":1,"Offset":0},"Stmts":[{"Background":false,"Cmd":{"Args":[{"End":{"Col":4,"Line":1,"Offset":3},"Parts":[{"End":{"Col":4,"Line":1,"Offset":3},"Pos":{"Col":1,"Line":1,"Offset":0},"Type":"Lit","Value":"foo"}],"Pos":{"Col":1,"Line":1,"Offset":0}}],"Assigns":[],"End":{"Col":4,"Line":1,"Offset":3},"Pos":{"Col":1,"Line":1,"Offset":0},"Type":"CallExpr"},"Comments":[],"Coprocess":false,"End":{"Col":4,"Line":1,"Offset":3},"Negated":false,"Pos":{"Col":1,"Line":1,"Offset":0},"Redirs":[]}]}`}, 21 {"((2))", `{"End":{"Col":6,"Line":1,"Offset":5},"Last":[],"Name":"","Pos":{"Col":1,"Line":1,"Offset":0},"Stmts":[{"Background":false,"Cmd":{"End":{"Col":6,"Line":1,"Offset":5},"Pos":{"Col":1,"Line":1,"Offset":0},"Type":"ArithmCmd","Unsigned":false,"X":{"End":{"Col":4,"Line":1,"Offset":3},"Parts":[{"End":{"Col":4,"Line":1,"Offset":3},"Pos":{"Col":3,"Line":1,"Offset":2},"Type":"Lit","Value":"2"}],"Pos":{"Col":3,"Line":1,"Offset":2},"Type":"Word"}},"Comments":[],"Coprocess":false,"End":{"Col":6,"Line":1,"Offset":5},"Negated":false,"Pos":{"Col":1,"Line":1,"Offset":0},"Redirs":[]}]}`}, 22 {"#", `{"End":{"Col":2,"Line":1,"Offset":1},"Last":[{"End":{"Col":2,"Line":1,"Offset":1},"Pos":{"Col":1,"Line":1,"Offset":0},"Text":""}],"Name":"","Pos":{"Col":1,"Line":1,"Offset":0},"Stmts":[]}`}, 23 } 24 25 func TestWriteJSON(t *testing.T) { 26 t.Parallel() 27 parser := syntax.NewParser(syntax.KeepComments) 28 29 for i, tc := range jsonTests { 30 t.Run(fmt.Sprintf("%02d", i), func(t *testing.T) { 31 prog, err := parser.Parse(strings.NewReader(tc.in), "") 32 if err != nil { 33 t.Fatal(err) 34 } 35 var buf bytes.Buffer 36 writeJSON(&buf, prog, false) 37 got := buf.String() 38 if got != tc.want+"\n" { 39 t.Fatalf("mismatch on %q\nwant:\n%s\ngot:\n%s", 40 tc.in, tc.want, got) 41 } 42 }) 43 } 44 }