package openapi import ( "context" "encoding/json" "os" "path/filepath" "testing" ) func TestShellRegistry(t *testing.T) { registry := NewShellRegistry() ctx := context.Background() session := &Session{} args := json.RawMessage(`{"command": "echo 'hello world'"}`) result, err := registry.Execute(ctx, session, "run_command", args) if err != nil { t.Fatalf("Execute failed: %v", err) } resMap := result.(map[string]any) if resMap["output"] != "hello world\n" { t.Errorf("Expected 'hello world\n', got %q", resMap["output"]) } } func TestFileRegistry(t *testing.T) { tempDir, err := os.MkdirTemp("", "file-registry-test") if err != nil { t.Fatalf("Failed to create temp dir: %v", err) } defer os.RemoveAll(tempDir) registry := NewFileRegistry(tempDir) ctx := context.Background() session := &Session{} // Test write_file writeArgs := json.RawMessage(`{"path": "test.txt", "content": "hello file"}`) _, err = registry.Execute(ctx, session, "write_file", writeArgs) if err != nil { t.Fatalf("write_file failed: %v", err) } content, err := os.ReadFile(filepath.Join(tempDir, "test.txt")) if err != nil || string(content) != "hello file" { t.Errorf("File content mismatch: %q", string(content)) } // Test read_file readArgs := json.RawMessage(`{"path": "test.txt"}`) res, err := registry.Execute(ctx, session, "read_file", readArgs) if err != nil { t.Fatalf("read_file failed: %v", err) } if res.(string) != "hello file" { t.Errorf("read_file output mismatch: %q", res) } // Test list_dir listArgs := json.RawMessage(`{"path": "."}`) res, err = registry.Execute(ctx, session, "list_dir", listArgs) if err != nil { t.Fatalf("list_dir failed: %v", err) } files := res.([]string) if len(files) != 1 || files[0] != "test.txt" { t.Errorf("list_dir output mismatch: %v", files) } // Test replace_content replaceArgs := json.RawMessage(`{"path": "test.txt", "target_content": "file", "new_content": "replacement"}`) _, err = registry.Execute(ctx, session, "replace_content", replaceArgs) if err != nil { t.Fatalf("replace_content failed: %v", err) } content, err = os.ReadFile(filepath.Join(tempDir, "test.txt")) if err != nil || string(content) != "hello replacement" { t.Errorf("File content mismatch after replacement: %q", string(content)) } }