nix-amer/internal/buildfile/reader_test.go

94 lines
2.6 KiB
Go

package buildfile
import (
"bytes"
"github.com/xdrm-brackets/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;other comment\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
}{
{"[pre]\ninstall args\ndelete args\n", 1, nil},
{"[pre]\n install args\ndelete args\n", 1, nil},
{"[pre]\n\tinstall args\ndelete args\n", 1, nil},
{"[pre]\n \t install args\ndelete args\n", 1, nil},
{"[pre]\n \t install args\ndelete args\n", 1, nil},
{"[pre]\ncmd args\ncmd args\n", 2, instruction.ErrUnknownInstruction},
{"[pre]\ninstall args\ncmd args\n", 3, instruction.ErrUnknownInstruction},
{"[pre]\n cmd args\ncmd args\n", 2, instruction.ErrUnknownInstruction},
{"[pre]\n\tcmd args\ncmd args\n", 2, instruction.ErrUnknownInstruction},
{"[pre]\n \t cmd args\ncmd args\n", 2, instruction.ErrUnknownInstruction},
{"[pre]\n \t cmd args\ncmd args\n", 2, instruction.ErrUnknownInstruction},
{"[pre]\ncmd args\ncmd\n", 2, instruction.ErrUnknownInstruction},
{"[pre]\ninstall\ncmd args\n", 2, instruction.ErrInvalidSyntax},
{"[pre]\ninstall args\n cmd args\n", 3, instruction.ErrUnknownInstruction},
{"[pre]\ninstall args\ncmd\n", 3, 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, ok := err.(LineError)
if !ok {
t.Errorf("[%d] expect error to be of type <LineError>", i)
continue
}
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)
}
}
}