package query_test import ( "testing" "github.com/stretchr/testify/assert" "github.com/tendermint/tmlibs/pubsub/query" ) // TODO: fuzzy testing? func TestParser(t *testing.T) { cases := []struct { query string valid bool }{ {"tm.events.type=NewBlock", true}, {"tm.events.type = NewBlock", true}, {"tm.events.type=TIME", true}, {"tm.events.type=DATE", true}, {"tm.events.type==", false}, {">==", false}, {"tm.events.type NewBlock =", false}, {"tm.events.type>NewBlock", false}, {"", false}, {"=", false}, {"=NewBlock", false}, {"tm.events.type=", false}, {"tm.events.typeNewBlock", false}, {"NewBlock", false}, {"", false}, {"tm.events.type=NewBlock AND abci.account.name=Igor", true}, {"tm.events.type=NewBlock AND", false}, {"tm.events.type=NewBlock AN", false}, {"tm.events.type=NewBlock AN tm.events.type=NewBlockHeader", false}, {"AND tm.events.type=NewBlock ", false}, {"abci.account.name CONTAINS Igor", true}, {"tx.date > DATE 2013-05-03", true}, {"tx.date < DATE 2013-05-03", true}, {"tx.date <= DATE 2013-05-03", true}, {"tx.date >= DATE 2013-05-03", true}, {"tx.date >= DAT 2013-05-03", false}, {"tx.date <= DATE2013-05-03", false}, {"tx.date <= DATE -05-03", false}, {"tx.date >= DATE 20130503", false}, {"tx.date >= DATE 2013+01-03", false}, // incorrect year, month, day {"tx.date >= DATE 0013-01-03", false}, {"tx.date >= DATE 2013-31-03", false}, {"tx.date >= DATE 2013-01-83", false}, {"tx.date > TIME 2013-05-03T14:45:00+07:00", true}, {"tx.date < TIME 2013-05-03T14:45:00-02:00", true}, {"tx.date <= TIME 2013-05-03T14:45:00Z", true}, {"tx.date >= TIME 2013-05-03T14:45:00Z", true}, {"tx.date >= TIME2013-05-03T14:45:00Z", false}, {"tx.date = IME 2013-05-03T14:45:00Z", false}, {"tx.date = TIME 2013-05-:45:00Z", false}, {"tx.date >= TIME 2013-05-03T14:45:00", false}, {"tx.date >= TIME 0013-00-00T14:45:00Z", false}, {"tx.date >= TIME 2013+05=03T14:45:00Z", false}, {"account.balance=100", true}, {"account.balance >= 200", true}, {"account.balance >= -300", false}, {"account.balance >>= 400", false}, {"account.balance=33.22.1", false}, } for _, c := range cases { _, err := query.New(c.query) if c.valid { assert.NoError(t, err, "Query was '%s'", c.query) } else { assert.Error(t, err, "Query was '%s'", c.query) } } }