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  }