platform_build_blueprint/parser/printer_test.go
Colin Cross b274e6c8e5 Support += assignments
Support += assignments to variables.  Variables are now mutable
up until they are referenced, then they become immutable.  This
will allow variables to be modified in a conditional, or allow
better commenting on why parts of a variable are set.

Change-Id: Iad964da7206b493365fe3686eedd7954e6eaf9a2
2015-03-04 14:00:06 -08:00

234 lines
3.3 KiB
Go

// Copyright 2014 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package parser
import (
"bytes"
"testing"
)
var validPrinterTestCases = []struct {
input string
output string
}{
{
input: `
foo ()
`,
output: `
foo()
`,
},
{
input: `
foo(name= "abc",)
`,
output: `
foo(
name = "abc",
)
`,
},
{
input: `
foo(
stuff = ["asdf", "jkl;", "qwert",
"uiop", "bnm,"]
)
`,
output: `
foo(
stuff = [
"asdf",
"bnm,",
"jkl;",
"qwert",
"uiop",
],
)
`,
},
{
input: `
foo(
stuff = {
isGood: true,
name: "bar"
}
)
`,
output: `
foo(
stuff = {
isGood: true,
name: "bar",
},
)
`,
},
{
input: `
// comment1
foo(
// comment2
isGood = true, // comment3
)
`,
output: `
// comment1
foo(
// comment2
isGood = true, // comment3
)
`,
},
{
input: `
foo(
name = "abc",
)
bar (
name = "def",
)
`,
output: `
foo(
name = "abc",
)
bar(
name = "def",
)
`,
},
{
input: `
foo = "stuff"
bar = foo
baz = foo + bar
baz += foo
`,
output: `
foo = "stuff"
bar = foo
baz = foo + bar
baz += foo
`,
},
{
input: `
//test
test /* test */(
srcs = [
/*"blueprint/bootstrap/bootstrap.go",
"blueprint/bootstrap/cleanup.go",*/
"blueprint/bootstrap/command.go",
"blueprint/bootstrap/doc.go", //doc.go
"blueprint/bootstrap/config.go", //config.go
],
deps = ["libabc"],
incs = []
) //test
//test
test2(
)
//test3
`,
output: `
//test
test /* test */ (
srcs = [
/*"blueprint/bootstrap/bootstrap.go",
"blueprint/bootstrap/cleanup.go",*/
"blueprint/bootstrap/command.go",
"blueprint/bootstrap/config.go", //config.go
"blueprint/bootstrap/doc.go", //doc.go
],
deps = ["libabc"],
incs = [],
) //test
//test
test2(
)
//test3
`,
},
{
input: `
// test
module // test
(
srcs
= [
"src1.c",
"src2.c",
],
//test
)
//test2
`,
output: `
// test
module( // test
srcs = [
"src1.c",
"src2.c",
],
//test
)
//test2
`,
},
}
func TestPrinter(t *testing.T) {
for _, testCase := range validPrinterTestCases {
in := testCase.input[1:]
expected := testCase.output[1:]
r := bytes.NewBufferString(in)
file, errs := Parse("", r, NewScope(nil))
if len(errs) != 0 {
t.Errorf("test case: %s", in)
t.Errorf("unexpected errors:")
for _, err := range errs {
t.Errorf(" %s", err)
}
t.FailNow()
}
SortLists(file)
got, err := Print(file)
if err != nil {
t.Errorf("test case: %s", in)
t.Errorf("unexpected error: %s", err)
t.FailNow()
}
if string(got) != expected {
t.Errorf("test case: %s", in)
t.Errorf(" expected: %s", expected)
t.Errorf(" got: %s", string(got))
}
}
}