github.com/rohankumardubey/aresdb@v0.0.2-0.20190517170215-e54e3ca06b9c/query/expr/ast_test.go (about)

     1  // Modifications Copyright (c) 2017-2018 Uber Technologies, Inc.
     2  // Copyright (c) 2013-2016 Errplane Inc.
     3  //
     4  // Permission is hereby granted, free of charge, to any person obtaining a copy of
     5  // this software and associated documentation files (the "Software"), to deal in
     6  // the Software without restriction, including without limitation the rights to
     7  // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
     8  // the Software, and to permit persons to whom the Software is furnished to do so,
     9  // subject to the following conditions:
    10  //
    11  // The above copyright notice and this permission notice shall be included in all
    12  // copies or substantial portions of the Software.
    13  //
    14  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    15  // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
    16  // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
    17  // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
    18  // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    19  // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    20  
    21  package expr
    22  
    23  import (
    24  	"testing"
    25  
    26  	"encoding/json"
    27  	"github.com/stretchr/testify/assert"
    28  )
    29  
    30  // Ensure an AST node can be rewritten.
    31  func TestRewrite(t *testing.T) {
    32  	expression, _ := ParseExpr(`time > 1 OR foo = 2`)
    33  
    34  	// Flip LHS & RHS in all binary expressions.
    35  	act := RewriteFunc(expression, func(e Expr) Expr {
    36  		switch e := e.(type) {
    37  		case *BinaryExpr:
    38  			return &BinaryExpr{Op: e.Op, LHS: e.RHS, RHS: e.LHS}
    39  		default:
    40  			return e
    41  		}
    42  	})
    43  
    44  	// Verify that everything is flipped.
    45  	if act := act.String(); act != `2 = foo OR 1 > time` {
    46  		t.Fatalf("unexpected result: %s", act)
    47  	}
    48  }
    49  
    50  func TestTypeMarshal(t *testing.T) {
    51  	for tp, n := range typeNames {
    52  		b, err := json.Marshal(tp)
    53  		assert.NoError(t, err)
    54  		assert.Equal(t, "\""+n+"\"", string(b))
    55  	}
    56  }