github.com/expr-lang/expr@v1.16.9/test/pipes/pipes_test.go (about)

     1  package pipes_test
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/expr-lang/expr/internal/testify/require"
     8  
     9  	"github.com/expr-lang/expr"
    10  )
    11  
    12  func TestPipes(t *testing.T) {
    13  	env := map[string]any{
    14  		"sprintf": fmt.Sprintf,
    15  	}
    16  
    17  	tests := []struct {
    18  		input string
    19  		want  any
    20  	}{
    21  		{
    22  			`-1 | abs()`,
    23  			1,
    24  		},
    25  		{
    26  			`"%s bar %d" | sprintf("foo", -42 | abs())`,
    27  			"foo bar 42",
    28  		},
    29  		{
    30  			`[] | first() ?? "foo"`,
    31  			"foo",
    32  		},
    33  		{
    34  			`"a" | upper() + "B" | lower()`,
    35  			"ab",
    36  		},
    37  	}
    38  
    39  	for _, test := range tests {
    40  		t.Run(test.input, func(t *testing.T) {
    41  			program, err := expr.Compile(test.input, expr.Env(env))
    42  			require.NoError(t, err)
    43  
    44  			out, err := expr.Run(program, env)
    45  			require.NoError(t, err)
    46  			require.Equal(t, test.want, out)
    47  		})
    48  	}
    49  }
    50  
    51  func TestPipes_map_filter(t *testing.T) {
    52  	program, err := expr.Compile(`1..9 | map(# + 1) | filter(# % 2 == 0)`)
    53  	require.NoError(t, err)
    54  
    55  	out, err := expr.Run(program, nil)
    56  	require.NoError(t, err)
    57  	require.Equal(t, []any{2, 4, 6, 8, 10}, out)
    58  }