Nil coalescing operator
(t *testing.T)
| 2121 | |
| 2122 | // Nil coalescing operator |
| 2123 | func TestRun_NilCoalescingOperator(t *testing.T) { |
| 2124 | env := map[string]any{ |
| 2125 | "foo": map[string]any{ |
| 2126 | "bar": "value", |
| 2127 | }, |
| 2128 | } |
| 2129 | |
| 2130 | t.Run("value", func(t *testing.T) { |
| 2131 | p, err := expr.Compile(`foo.bar ?? "default"`, expr.Env(env)) |
| 2132 | assert.NoError(t, err) |
| 2133 | |
| 2134 | out, err := expr.Run(p, env) |
| 2135 | assert.NoError(t, err) |
| 2136 | assert.Equal(t, "value", out) |
| 2137 | }) |
| 2138 | |
| 2139 | t.Run("default", func(t *testing.T) { |
| 2140 | p, err := expr.Compile(`foo.baz ?? "default"`, expr.Env(env)) |
| 2141 | assert.NoError(t, err) |
| 2142 | |
| 2143 | out, err := expr.Run(p, env) |
| 2144 | assert.NoError(t, err) |
| 2145 | assert.Equal(t, "default", out) |
| 2146 | }) |
| 2147 | |
| 2148 | t.Run("default with chain", func(t *testing.T) { |
| 2149 | p, err := expr.Compile(`foo?.bar ?? "default"`, expr.Env(env)) |
| 2150 | assert.NoError(t, err) |
| 2151 | |
| 2152 | out, err := expr.Run(p, map[string]any{}) |
| 2153 | assert.NoError(t, err) |
| 2154 | assert.Equal(t, "default", out) |
| 2155 | }) |
| 2156 | } |
| 2157 | |
| 2158 | func TestEval_nil_in_maps(t *testing.T) { |
| 2159 | env := map[string]any{ |