92 lines
2.5 KiB
Go
92 lines
2.5 KiB
Go
package buildfile
|
|
|
|
import (
|
|
"bytes"
|
|
"git.xdrm.io/go/nix-amer/internal/instruction"
|
|
"testing"
|
|
)
|
|
|
|
func TestNullContext(t *testing.T) {
|
|
buffer := bytes.NewBufferString("")
|
|
_, err := NewReader(nil, buffer)
|
|
if err != ErrNullContext {
|
|
t.Fatalf("expected <%s>, got <%v>", ErrNullContext, err)
|
|
}
|
|
}
|
|
func TestIgnoreCommentsAndEmptyLines(t *testing.T) {
|
|
ctx, _ := instruction.CreateContext("apt-get", "")
|
|
buffer := bytes.NewBufferString("[ some comment ]\n\n \t \n\t \t\n[ other comment after empty lines ]")
|
|
|
|
r, err := NewReader(ctx, buffer)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error <%v>", err)
|
|
}
|
|
|
|
if len(r.Content) > 0 {
|
|
t.Fatalf("expected no content, got %d instructions", len(r.Content))
|
|
}
|
|
}
|
|
|
|
func TestInstructionSyntax(t *testing.T) {
|
|
tests := []struct {
|
|
File string
|
|
Line int
|
|
Err error
|
|
}{
|
|
{"ins args\ndel args\n", 0, nil},
|
|
{" ins args\ndel args\n", 0, nil},
|
|
{"\tins args\ndel args\n", 0, nil},
|
|
{" \t ins args\ndel args\n", 0, nil},
|
|
{" \t ins args\ndel args\n", 0, nil},
|
|
|
|
{"cmd args\ncmd args\n", 1, instruction.ErrUnknownInstruction},
|
|
{"ins args\ncmd args\n", 2, instruction.ErrUnknownInstruction},
|
|
{" cmd args\ncmd args\n", 1, instruction.ErrUnknownInstruction},
|
|
{"\tcmd args\ncmd args\n", 1, instruction.ErrUnknownInstruction},
|
|
{" \t cmd args\ncmd args\n", 1, instruction.ErrUnknownInstruction},
|
|
{" \t cmd args\ncmd args\n", 1, instruction.ErrUnknownInstruction},
|
|
|
|
{" md args\ncmd args\n", 1, instruction.ErrInvalidSyntax},
|
|
{"c d args\ncmd args\n", 1, instruction.ErrInvalidSyntax},
|
|
{"cm args\ncmd args\n", 1, instruction.ErrInvalidSyntax},
|
|
|
|
{"ins args\n md args\n", 2, instruction.ErrInvalidSyntax},
|
|
{"ins args\nc d args\n", 2, instruction.ErrInvalidSyntax},
|
|
{"ins args\ncm args\n", 2, instruction.ErrInvalidSyntax},
|
|
}
|
|
|
|
ctx, _ := instruction.CreateContext("apt-get", "")
|
|
|
|
for i, test := range tests {
|
|
|
|
// create reader
|
|
buffer := bytes.NewBufferString(test.File)
|
|
_, err := NewReader(ctx, buffer)
|
|
|
|
// no error expected
|
|
if test.Err == nil {
|
|
if err != nil {
|
|
lineerr := err.(LineError)
|
|
t.Errorf("[%d] expect no error, got <%s>", i, lineerr.Err)
|
|
}
|
|
continue
|
|
} else if err == nil {
|
|
t.Errorf("[%d] expect error <%s>, got none", i, test.Err)
|
|
continue
|
|
}
|
|
|
|
lineerr := err.(LineError)
|
|
|
|
// error expected
|
|
if lineerr.Err != test.Err {
|
|
t.Errorf("[%d] expect error <%s>, got <%s>", i, test.Err, lineerr.Err)
|
|
continue
|
|
}
|
|
|
|
if lineerr.Line != test.Line {
|
|
t.Errorf("[%d] expect error at line %d, got %d", i, test.Line, lineerr.Line)
|
|
}
|
|
|
|
}
|
|
}
|