parent
3d57e589e6
commit
561b4feee1
@ -0,0 +1,96 @@ |
|||||||
|
package caddyhugo |
||||||
|
|
||||||
|
import ( |
||||||
|
"encoding/json" |
||||||
|
"io/ioutil" |
||||||
|
"os" |
||||||
|
"os/exec" |
||||||
|
"sync" |
||||||
|
"testing" |
||||||
|
|
||||||
|
"git.stephensearles.com/stephen/acedoc" |
||||||
|
) |
||||||
|
|
||||||
|
type World struct { |
||||||
|
CH *CaddyHugo |
||||||
|
BlogFolder string |
||||||
|
} |
||||||
|
|
||||||
|
func (w *World) Clean() { |
||||||
|
if w.BlogFolder != "" { |
||||||
|
os.RemoveAll(w.BlogFolder) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
func NewWorld(t *testing.T) *World { |
||||||
|
dir, err := ioutil.TempDir("", "caddy-hugo2-test-") |
||||||
|
if err != nil { |
||||||
|
t.Fatalf("error initializing test environment: %v", err) |
||||||
|
} |
||||||
|
|
||||||
|
w := &World{BlogFolder: dir} |
||||||
|
|
||||||
|
cmd := exec.Command("hugo", "new", "site", dir) |
||||||
|
cmd.Dir = dir |
||||||
|
out, err := cmd.CombinedOutput() |
||||||
|
if err != nil { |
||||||
|
t.Fatalf("error initializing test site: %v\n\n%v", err, string(out)) |
||||||
|
} |
||||||
|
|
||||||
|
w.CH = &CaddyHugo{} |
||||||
|
w.CH.Setup(dir) |
||||||
|
|
||||||
|
return w |
||||||
|
} |
||||||
|
|
||||||
|
type WebsocketTester struct { |
||||||
|
receivedPointer int |
||||||
|
received [][]byte |
||||||
|
wroteMessages []Message |
||||||
|
wroteDeltas []acedoc.Delta |
||||||
|
mtx sync.Mutex |
||||||
|
} |
||||||
|
|
||||||
|
// ReadJSON reads the next pending message from the "client" into v
|
||||||
|
func (ws *WebsocketTester) ReadJSON(v interface{}) error { |
||||||
|
ws.mtx.Lock() |
||||||
|
defer ws.mtx.Unlock() |
||||||
|
|
||||||
|
if len(ws.received) <= ws.receivedPointer { |
||||||
|
return nil |
||||||
|
} |
||||||
|
|
||||||
|
err := json.Unmarshal(ws.received[ws.receivedPointer], v) |
||||||
|
ws.receivedPointer++ |
||||||
|
return err |
||||||
|
} |
||||||
|
|
||||||
|
// WriteJSON "sends" a message, v, to the "client"
|
||||||
|
func (ws *WebsocketTester) WriteJSON(v interface{}) error { |
||||||
|
ws.mtx.Lock() |
||||||
|
defer ws.mtx.Unlock() |
||||||
|
|
||||||
|
m, ok := v.(Message) |
||||||
|
if !ok { |
||||||
|
panic("wrong type written to WebsocketTester") |
||||||
|
} |
||||||
|
|
||||||
|
ws.wroteMessages = append(ws.wroteMessages, m) |
||||||
|
ws.wroteDeltas = append(ws.wroteDeltas, m.Deltas...) |
||||||
|
|
||||||
|
return nil |
||||||
|
} |
||||||
|
|
||||||
|
// ReceiveJSON queues a message to be sent to the client
|
||||||
|
func (ws *WebsocketTester) ReceiveJSON(v interface{}) error { |
||||||
|
ws.mtx.Lock() |
||||||
|
defer ws.mtx.Unlock() |
||||||
|
|
||||||
|
out, err := json.Marshal(v) |
||||||
|
if err != nil { |
||||||
|
return err |
||||||
|
} |
||||||
|
|
||||||
|
ws.received = append(ws.received, out) |
||||||
|
return nil |
||||||
|
} |
Loading…
Reference in new issue