package parsers import ( // "fmt" "strings" "testing" engine "github.com/tgckpg/mmqlengine/mmql/engine" stmtd "github.com/tgckpg/mmqlengine/mmql/statements" ) type _p struct { amount float64 unit string } func TestAmountStatement( t *testing.T ) { lexer := engine.Lexer{} supportedStmts := map[string] func( *engine.Lexer ) ( stmtd.IStatement, error ) { "AMOUNT": AmountStatement, } lexer.SupportedStmts = &supportedStmts read_oks := map[string] _p { "1 SHARES OF QQQ": _p{ 1, "SHARES" }, "1 QQQ": _p{ 1, "QQQ" }, "1 UNIT OF QQQ": _p{ 1, "UNIT" }, } readAmount := engine.LexerExpect{ Statements: true, Keywords: false, Brackets: false, Quotes: false, Key: "AMOUNT", } for k := range read_oks { lexer.SetReader( strings.NewReader( k ) ) stmt, err := lexer.ReadStatement( &readAmount ) if err != nil { t.Error( err ) } aStmt := any( stmt ).( stmtd.AmountStatement ) p, _ := read_oks[ k ] if aStmt.Unit() != p.unit { t.Errorf( "Expected \"%s\", got \"%s\" instead", p.unit, aStmt.Unit() ) } } }