(t *testing.T)
| 2116 | } |
| 2117 | |
| 2118 | func TestPartialVars(t *testing.T) { |
| 2119 | env := testEnv(t, |
| 2120 | Variable("x", StringType), |
| 2121 | Variable("y", IntType), |
| 2122 | ) |
| 2123 | ast, iss := env.Compile("x == string(y)") |
| 2124 | if iss.Err() != nil { |
| 2125 | t.Fatalf("env.Compile() failed: %v", iss.Err()) |
| 2126 | } |
| 2127 | prg, err := env.Program(ast, EvalOptions(OptPartialEval)) |
| 2128 | if err != nil { |
| 2129 | t.Fatalf("env.Program() failed: %v", err) |
| 2130 | } |
| 2131 | |
| 2132 | tests := []struct { |
| 2133 | in map[string]any |
| 2134 | unk []*interpreter.AttributePattern |
| 2135 | out ref.Val |
| 2136 | partialOut ref.Val |
| 2137 | }{ |
| 2138 | { |
| 2139 | in: map[string]any{}, |
| 2140 | unk: []*interpreter.AttributePattern{ |
| 2141 | interpreter.NewAttributePattern("x"), |
| 2142 | interpreter.NewAttributePattern("y"), |
| 2143 | }, |
| 2144 | out: types.MergeUnknowns(types.NewUnknown(1, types.NewAttributeTrail("x")), types.NewUnknown(4, types.NewAttributeTrail("y"))), |
| 2145 | }, |
| 2146 | { |
| 2147 | in: map[string]any{"x": "10"}, |
| 2148 | unk: []*interpreter.AttributePattern{ |
| 2149 | interpreter.NewAttributePattern("y"), |
| 2150 | }, |
| 2151 | out: types.NewUnknown(4, types.NewAttributeTrail("y")), |
| 2152 | }, |
| 2153 | { |
| 2154 | in: map[string]any{"y": 10}, |
| 2155 | unk: []*interpreter.AttributePattern{ |
| 2156 | interpreter.NewAttributePattern("x"), |
| 2157 | }, |
| 2158 | out: types.NewUnknown(1, types.NewAttributeTrail("x")), |
| 2159 | }, |
| 2160 | { |
| 2161 | in: map[string]any{"x": "10", "y": 10}, |
| 2162 | unk: []*interpreter.AttributePattern{}, |
| 2163 | out: types.True, |
| 2164 | }, |
| 2165 | { |
| 2166 | in: map[string]any{"x": "10", "y": 9}, |
| 2167 | unk: []*interpreter.AttributePattern{}, |
| 2168 | out: types.False, |
| 2169 | }, |
| 2170 | { |
| 2171 | in: map[string]any{"y": 10}, |
| 2172 | unk: []*interpreter.AttributePattern{}, |
| 2173 | out: types.NewErr("no such attribute: x"), |
| 2174 | partialOut: types.NewUnknown(1, types.NewAttributeTrail("x")), |
| 2175 | }, |
nothing calls this directly
no test coverage detected