106 lines
2 KiB
Go
106 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())
|
||
|
}
|
||
|
}
|
||
|
}
|