55 lines
1.1 KiB
Go
55 lines
1.1 KiB
Go
package q
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
)
|
|
|
|
type ParsingTest struct {
|
|
input string
|
|
expected Query
|
|
}
|
|
|
|
func TestParseSelectStatement_StateMachine(t *testing.T) {
|
|
var testSqlStatements = []ParsingTest{
|
|
{
|
|
input: "SELECT * FROM users WHERE age >= 30",
|
|
expected: &Select{
|
|
Type: SELECT,
|
|
Table: Table{Name: "users"},
|
|
IsWildcard: true,
|
|
Conditionals: []Conditional{
|
|
{
|
|
Key: "age",
|
|
Operator: ">=",
|
|
Value: "30",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, sql := range testSqlStatements {
|
|
testName := fmt.Sprintf("%s", sql.input)
|
|
expected := sql.expected.(*Select)
|
|
|
|
t.Run(testName, func(t *testing.T) {
|
|
answer, err := Parse(sql.input)
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
|
|
answerAsSelect := answer.(*Select)
|
|
|
|
if answerAsSelect.Type != expected.Type {
|
|
t.Errorf("got %d for Select.Type, expected %d", answerAsSelect.Type, expected.Type)
|
|
}
|
|
if answerAsSelect.IsWildcard != expected.IsWildcard {
|
|
t.Errorf("got %#v for Select.IsWildcard, expected %#v", answerAsSelect.IsWildcard, expected.IsWildcard)
|
|
}
|
|
|
|
})
|
|
}
|
|
}
|