package buildfile import ( "bytes" "git.xdrm.io/go/nix-amer/internal/instruction" "testing" ) 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) } } }