返回 DeepSeek-Reasonix
ownership_test.go
根目录 / desktop / internal / hostrpc / ownership_test.go
1 package hostrpc
2
3 import (
4 "encoding/json"
5 "os"
6 "path/filepath"
7 "reflect"
8 "strings"
9 "testing"
10 )
11
12 func TestSourceOwnershipPlatformStable(t *testing.T) {
13 dir := t.TempDir()
14 for _, name := range []string{"tabs_windows.go", "tabs_linux.go"} {
15 if err := os.WriteFile(filepath.Join(dir, name), []byte("package main\nimport ctx \"context\"\nfunc (*App) Read(c ctx.Context, tabID string, count int) {}\nfunc (*App) Current() {}\n"), 0600); err != nil {
16 t.Fatal(err)
17 }
18 }
19 owners, err := SourceOwnership(dir, "App")
20 if err != nil {
21 t.Fatal(err)
22 }
23 read := owners["Read"]
24 if read.Domain != "desktop/tabs_linux.go|desktop/tabs_windows.go" || read.Owner != "App.Read" || read.Scope.Resolver != "App.Read" || read.Scope.Kind != "owner-inputs" || !reflect.DeepEqual(read.Scope.Inputs, []string{"tabID", "count"}) {
25 t.Fatalf("Read = %+v", read)
26 }
27 if owners["Current"].Scope.Kind != "owner-state" {
28 t.Fatal("no-input command must resolve owner state")
29 }
30 encoded, _ := json.Marshal(owners)
31 if strings.Contains(string(encoded), dir) {
32 t.Fatal("metadata must not contain absolute build paths")
33 }
34 if err := os.WriteFile(filepath.Join(dir, "tabs_windows.go"), []byte("package main\nfunc (*App) Read(projectID string, count int) {}"), 0600); err != nil {
35 t.Fatal(err)
36 }
37 if _, err := SourceOwnership(dir, "App"); err == nil {
38 t.Fatal("different platform input owners accepted")
39 }
40 }
41
42 func TestRegistryOwnershipRequiredAndDigested(t *testing.T) {
43 owners := map[string]CommandOwnership{"Void": {Domain: "fixture.go", Owner: "fixtureTarget.Void", Sources: []string{"fixture.go"}, Scope: CommandScope{Kind: "owner-state", Resolver: "fixtureTarget.Void", Inputs: []string{}}}}
44 skip := Skip{}
45 for _, cmd := range mustRegistry(t, &fixtureTarget{}, nil).Commands() {
46 if cmd.Name != "Void" {
47 skip[cmd.Name] = true
48 }
49 }
50 r, err := NewRegistryWithOwners(&fixtureTarget{}, skip, owners)
51 if err != nil {
52 t.Fatal(err)
53 }
54 before := Build(r, nil).Digest()
55 changed := owners["Void"]
56 changed.Domain = "other.go"
57 owners["Void"] = changed
58 r, err = NewRegistryWithOwners(&fixtureTarget{}, skip, owners)
59 if err != nil {
60 t.Fatal(err)
61 }
62 if before == Build(r, nil).Digest() {
63 t.Fatal("ownership excluded from digest")
64 }
65 if _, err := NewRegistryWithOwners(&fixtureTarget{}, nil, owners); err == nil {
66 t.Fatal("missing metadata accepted")
67 }
68 }
69
69 lines GO