aman/internal/inject/inject_test.go

102 lines
2.1 KiB
Go

package inject
import (
"context"
"errors"
"testing"
)
type fakeClipboard struct {
called bool
err error
}
func (f *fakeClipboard) WriteClipboard(ctx context.Context, text string) error {
f.called = true
return f.err
}
type fakePaster struct {
called bool
err error
}
func (f *fakePaster) Paste(ctx context.Context) error {
f.called = true
return f.err
}
type fakeTyper struct {
called bool
err error
}
func (f *fakeTyper) TypeText(ctx context.Context, text string) error {
f.called = true
return f.err
}
func TestClipboardBackend(t *testing.T) {
cb := &fakeClipboard{}
p := &fakePaster{}
b := ClipboardBackend{Writer: cb, Paster: p}
err := b.Inject(context.Background(), "hello")
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if !cb.called || !p.called {
t.Fatalf("expected clipboard and paster to be called")
}
}
func TestClipboardBackendClipboardError(t *testing.T) {
cb := &fakeClipboard{err: errors.New("boom")}
p := &fakePaster{}
b := ClipboardBackend{Writer: cb, Paster: p}
err := b.Inject(context.Background(), "hello")
if err == nil {
t.Fatalf("expected error")
}
if !cb.called {
t.Fatalf("expected clipboard to be called")
}
if p.called {
t.Fatalf("did not expect paster to be called")
}
}
func TestInjectionBackend(t *testing.T) {
typ := &fakeTyper{}
b := InjectionBackend{Typer: typ}
err := b.Inject(context.Background(), "hello")
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if !typ.called {
t.Fatalf("expected typer to be called")
}
}
func TestNewBackend(t *testing.T) {
cb := &fakeClipboard{}
p := &fakePaster{}
typ := &fakeTyper{}
b, err := NewBackend("clipboard", Deps{Clipboard: cb, Paster: p, Typer: typ})
if err != nil || b == nil {
t.Fatalf("expected clipboard backend")
}
b, err = NewBackend("injection", Deps{Clipboard: cb, Paster: p, Typer: typ})
if err != nil || b == nil {
t.Fatalf("expected injection backend")
}
b, err = NewBackend("unknown", Deps{Clipboard: cb, Paster: p, Typer: typ})
if err == nil || b != nil {
t.Fatalf("expected error for unknown backend")
}
}