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