func TestEvalData(t *testing.T) { ctx := context.Background() store := newTestStore() var buffer bytes.Buffer repl := newRepl(store, &buffer) testmod := ast.MustParseModule(`package ex p = [1,2,3]`) if err := storage.InsertPolicy(ctx, store, "test", testmod, nil, false); err != nil { panic(err) } repl.OneShot(ctx, "data") expected := parseJSON(` { "a": [ { "b": { "c": [ true, 2, false ] } }, { "b": { "c": [ false, true, 1 ] } } ], "ex": { "p": [ 1, 2, 3 ] } }`) result := parseJSON(buffer.String()) // Strip REPL documents out as these change depending on build settings. data := result.(map[string]interface{}) delete(data, "repl") if !reflect.DeepEqual(result, expected) { t.Fatalf("Expected:\n%v\n\nGot:\n%v", expected, result) } }
func TestComplete(t *testing.T) { store := newTestStore() ctx := context.Background() mod1 := ast.MustParseModule(`package a.b.c p = 1 q = 2`) mod2 := ast.MustParseModule(`package a.b.d r = 3`) if err := storage.InsertPolicy(ctx, store, "mod1", mod1, nil, false); err != nil { panic(err) } if err := storage.InsertPolicy(ctx, store, "mod2", mod2, nil, false); err != nil { panic(err) } var buf bytes.Buffer repl := newRepl(store, &buf) repl.OneShot(ctx, "s = 4") buf.Reset() result := repl.complete("") expected := []string{ "data.a.b.c.p", "data.a.b.c.q", "data.a.b.d.r", "data.repl.s", "data.repl.version", } sort.Strings(result) sort.Strings(expected) if !reflect.DeepEqual(result, expected) { t.Fatalf("Expected %v but got: %v", expected, result) } result = repl.complete("data.a.b") expected = []string{ "data.a.b.c.p", "data.a.b.c.q", "data.a.b.d.r", } sort.Strings(result) sort.Strings(expected) if !reflect.DeepEqual(result, expected) { t.Fatalf("Expected %v but got: %v", expected, result) } result = repl.complete("data.a.b.c.p[x]") expected = nil if !reflect.DeepEqual(result, expected) { t.Fatalf("Expected %v but got: %v", expected, result) } repl.OneShot(ctx, "import data.a.b.c.p as xyz") repl.OneShot(ctx, "import data.a.b.d") result = repl.complete("x") expected = []string{ "xyz", } if !reflect.DeepEqual(result, expected) { t.Fatalf("Expected %v but got: %v", expected, result) } }