| // Copyright 2020 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package fake |
| |
| import ( |
| "context" |
| "testing" |
| |
| "golang.org/x/tools/internal/lsp/protocol" |
| ) |
| |
| const data = ` |
| -- go.mod -- |
| go 1.12 |
| -- nested/README.md -- |
| Hello World! |
| ` |
| |
| func newWorkspace(t *testing.T) (*Workspace, <-chan []FileEvent, func()) { |
| t.Helper() |
| |
| ws, err := NewWorkspace("default", []byte(data)) |
| if err != nil { |
| t.Fatal(err) |
| } |
| cleanup := func() { |
| if err := ws.Close(); err != nil { |
| t.Fatal(err) |
| } |
| } |
| |
| fileEvents := make(chan []FileEvent) |
| watch := func(_ context.Context, events []FileEvent) { |
| fileEvents <- events |
| } |
| ws.AddWatcher(watch) |
| return ws, fileEvents, cleanup |
| } |
| |
| func TestWorkspace_ReadFile(t *testing.T) { |
| ws, _, cleanup := newWorkspace(t) |
| defer cleanup() |
| |
| got, err := ws.ReadFile("nested/README.md") |
| if err != nil { |
| t.Fatal(err) |
| } |
| want := "Hello World!\n" |
| if got != want { |
| t.Errorf("reading workspace file, got %q, want %q", got, want) |
| } |
| } |
| |
| func TestWorkspace_WriteFile(t *testing.T) { |
| ws, events, cleanup := newWorkspace(t) |
| defer cleanup() |
| ctx := context.Background() |
| |
| tests := []struct { |
| path string |
| wantType protocol.FileChangeType |
| }{ |
| {"data.txt", protocol.Created}, |
| {"nested/README.md", protocol.Changed}, |
| } |
| |
| for _, test := range tests { |
| if err := ws.WriteFile(ctx, test.path, "42"); err != nil { |
| t.Fatal(err) |
| } |
| es := <-events |
| if got := len(es); got != 1 { |
| t.Fatalf("len(events) = %d, want 1", got) |
| } |
| if es[0].Path != test.path { |
| t.Errorf("event.Path = %q, want %q", es[0].Path, test.path) |
| } |
| if es[0].ProtocolEvent.Type != test.wantType { |
| t.Errorf("event type = %v, want %v", es[0].ProtocolEvent.Type, test.wantType) |
| } |
| got, err := ws.ReadFile(test.path) |
| if err != nil { |
| t.Fatal(err) |
| } |
| want := "42" |
| if got != want { |
| t.Errorf("ws.ReadFile(%q) = %q, want %q", test.path, got, want) |
| } |
| } |
| } |