From 480d0eb5d908f97051f6369d9bdbcf22b794af0a Mon Sep 17 00:00:00 2001 From: Anmol Sethi <hi@nhooyr.io> Date: Mon, 23 Sep 2019 15:14:47 -0500 Subject: [PATCH] Fixes from @albrow's Wasm review --- README.md | 4 ++-- assert_test.go | 13 +++++++++++-- conn_common.go | 2 +- doc.go | 6 +++--- frame.go | 8 ++++---- internal/wsjs/{wsjs.go => wsjs_js.go} | 0 websocket_js_test.go | 4 ++-- 7 files changed, 23 insertions(+), 14 deletions(-) rename internal/wsjs/{wsjs.go => wsjs_js.go} (100%) diff --git a/README.md b/README.md index dc33e19..c5b8c90 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ go get nhooyr.io/websocket - JSON and ProtoBuf helpers in the [wsjson](https://godoc.org/nhooyr.io/websocket/wsjson) and [wspb](https://godoc.org/nhooyr.io/websocket/wspb) subpackages - Highly optimized by default - Concurrent writes out of the box -- [Complete WASM](https://godoc.org/nhooyr.io/websocket#hdr-WASM) support +- [Complete Wasm](https://godoc.org/nhooyr.io/websocket#hdr-Wasm) support ## Roadmap @@ -130,7 +130,7 @@ The ping API is also nicer. gorilla/websocket requires registering a pong handle which results in awkward control flow. With nhooyr/websocket you use the Ping method on the Conn that sends a ping and also waits for the pong. -Additionally, nhooyr.io/websocket can compile to [WASM](https://godoc.org/nhooyr.io/websocket#hdr-WASM) for the browser. +Additionally, nhooyr.io/websocket can compile to [Wasm](https://godoc.org/nhooyr.io/websocket#hdr-Wasm) for the browser. In terms of performance, the differences mostly depend on your application code. nhooyr/websocket reuses message buffers out of the box if you use the wsjson and wspb subpackages. diff --git a/assert_test.go b/assert_test.go index cddae99..8970c54 100644 --- a/assert_test.go +++ b/assert_test.go @@ -2,10 +2,10 @@ package websocket_test import ( "context" - "encoding/hex" "fmt" "math/rand" "reflect" + "strings" "github.com/google/go-cmp/cmp" @@ -99,7 +99,16 @@ func randBytes(n int) []byte { } func randString(n int) string { - return hex.EncodeToString(randBytes(n))[:n] + s := strings.ToValidUTF8(string(randBytes(n)), "_") + if len(s) > n { + return s[:n] + } + if len(s) < n { + // Pad with = + extra := n - len(s) + return s + strings.Repeat("=", extra) + } + return s } func assertEcho(ctx context.Context, c *websocket.Conn, typ websocket.MessageType, n int) error { diff --git a/conn_common.go b/conn_common.go index 771db26..1429b47 100644 --- a/conn_common.go +++ b/conn_common.go @@ -1,5 +1,5 @@ // This file contains *Conn symbols relevant to both -// WASM and non WASM builds. +// Wasm and non Wasm builds. package websocket diff --git a/doc.go b/doc.go index 7753afc..a17bfb0 100644 --- a/doc.go +++ b/doc.go @@ -18,14 +18,14 @@ // Use the errors.As function new in Go 1.13 to check for websocket.CloseError. // See the CloseError example. // -// WASM +// Wasm // -// The client side fully supports compiling to WASM. +// The client side fully supports compiling to Wasm. // It wraps the WebSocket browser API. // // See https://developer.mozilla.org/en-US/docs/Web/API/WebSocket // -// Thus the unsupported features (not compiled in) for WASM are: +// Thus the unsupported features (not compiled in) for Wasm are: // // - Accept and AcceptOptions // - Conn.Ping diff --git a/frame.go b/frame.go index 84a18e0..95061f5 100644 --- a/frame.go +++ b/frame.go @@ -213,8 +213,8 @@ const ( StatusNoStatusRcvd - // This StatusCode is only exported for use with WASM. - // In non WASM Go, the returned error will indicate whether the connection was closed or not or what happened. + // This StatusCode is only exported for use with Wasm. + // In non Wasm Go, the returned error will indicate whether the connection was closed or not or what happened. StatusAbnormalClosure StatusInvalidFramePayloadData @@ -226,8 +226,8 @@ const ( StatusTryAgainLater StatusBadGateway - // This StatusCode is only exported for use with WASM. - // In non WASM Go, the returned error will indicate whether there was a TLS handshake failure. + // This StatusCode is only exported for use with Wasm. + // In non Wasm Go, the returned error will indicate whether there was a TLS handshake failure. StatusTLSHandshake ) diff --git a/internal/wsjs/wsjs.go b/internal/wsjs/wsjs_js.go similarity index 100% rename from internal/wsjs/wsjs.go rename to internal/wsjs/wsjs_js.go diff --git a/websocket_js_test.go b/websocket_js_test.go index e68ba6f..ba9431d 100644 --- a/websocket_js_test.go +++ b/websocket_js_test.go @@ -36,12 +36,12 @@ func TestConn(t *testing.T) { t.Fatal(err) } - err = assertJSONEcho(ctx, c, 16) + err = assertJSONEcho(ctx, c, 1024) if err != nil { t.Fatal(err) } - err = assertEcho(ctx, c, websocket.MessageBinary, 16) + err = assertEcho(ctx, c, websocket.MessageBinary, 1024) if err != nil { t.Fatal(err) } -- GitLab