3e8e74f276
Make integrating with go tools easier by putting the blueprint package files in the top level directory of the git project instead of in a subdirectory called blueprint. Change-Id: I35c144c5fe7ddf34e478d0c47c50b2f6c92c2a03
105 lines
2 KiB
Go
105 lines
2 KiB
Go
package blueprint
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
)
|
|
|
|
func ck(err error) {
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
var ninjaWriterTestCases = []struct {
|
|
input func(w *ninjaWriter)
|
|
output string
|
|
}{
|
|
{
|
|
input: func(w *ninjaWriter) {
|
|
ck(w.Comment("foo"))
|
|
},
|
|
output: "# foo\n",
|
|
},
|
|
{
|
|
input: func(w *ninjaWriter) {
|
|
ck(w.Pool("foo"))
|
|
},
|
|
output: "pool foo\n",
|
|
},
|
|
{
|
|
input: func(w *ninjaWriter) {
|
|
ck(w.Rule("foo"))
|
|
},
|
|
output: "rule foo\n",
|
|
},
|
|
{
|
|
input: func(w *ninjaWriter) {
|
|
ck(w.Build("foo", []string{"o1", "o2"}, []string{"e1", "e2"},
|
|
[]string{"i1", "i2"}, []string{"oo1", "oo2"}))
|
|
},
|
|
output: "build o1 o2: foo e1 e2 | i1 i2 || oo1 oo2\n",
|
|
},
|
|
{
|
|
input: func(w *ninjaWriter) {
|
|
ck(w.Default("foo"))
|
|
},
|
|
output: "default foo\n",
|
|
},
|
|
{
|
|
input: func(w *ninjaWriter) {
|
|
ck(w.Assign("foo", "bar"))
|
|
},
|
|
output: "foo = bar\n",
|
|
},
|
|
{
|
|
input: func(w *ninjaWriter) {
|
|
ck(w.ScopedAssign("foo", "bar"))
|
|
},
|
|
output: " foo = bar\n",
|
|
},
|
|
{
|
|
input: func(w *ninjaWriter) {
|
|
ck(w.BlankLine())
|
|
},
|
|
output: "\n",
|
|
},
|
|
{
|
|
input: func(w *ninjaWriter) {
|
|
ck(w.Pool("p"))
|
|
ck(w.ScopedAssign("depth", "3"))
|
|
ck(w.BlankLine())
|
|
ck(w.Comment("here comes a rule"))
|
|
ck(w.Rule("r"))
|
|
ck(w.ScopedAssign("command", "echo out: $out in: $in _arg: $_arg"))
|
|
ck(w.ScopedAssign("pool", "p"))
|
|
ck(w.BlankLine())
|
|
ck(w.Build("r", []string{"foo.o"}, []string{"foo.in"}, nil, nil))
|
|
ck(w.ScopedAssign("_arg", "arg value"))
|
|
},
|
|
output: `pool p
|
|
depth = 3
|
|
|
|
# here comes a rule
|
|
rule r
|
|
command = echo out: $out in: $in _arg: $_arg
|
|
pool = p
|
|
|
|
build foo.o: r foo.in
|
|
_arg = arg value
|
|
`,
|
|
},
|
|
}
|
|
|
|
func TestNinjaWriter(t *testing.T) {
|
|
for i, testCase := range ninjaWriterTestCases {
|
|
buf := bytes.NewBuffer(nil)
|
|
w := newNinjaWriter(buf)
|
|
testCase.input(w)
|
|
if buf.String() != testCase.output {
|
|
t.Errorf("incorrect output for test case %d", i)
|
|
t.Errorf(" expected: %q", testCase.output)
|
|
t.Errorf(" got: %q", buf.String())
|
|
}
|
|
}
|
|
}
|