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 ", 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) } } }