spec/neovim/msgpack_stream_spec.rb in neovim-0.0.1 vs spec/neovim/msgpack_stream_spec.rb in neovim-0.0.2

- old
+ new

@@ -1,29 +1,44 @@ require "socket" require "helper" module Neovim RSpec.describe MsgpackStream do - it "sends and receives msgpack" do - server = TCPServer.new("0.0.0.0", 0) - event_loop = EventLoop.tcp("0.0.0.0", server.addr[1]) - stream = MsgpackStream.new(event_loop) - messages = [] + shared_context "msgpack stream behavior" do + it "sends and receives data" do + stream = MsgpackStream.new(event_loop) + messages = [] - srv_thr = Thread.new do - client = server.accept - messages << client.read_nonblock(1024) + srv_thr = Thread.new do + client = server.accept + messages << client.readpartial(1024) + client.write(MessagePack.pack([2])) + end - client.write(MessagePack.pack([2])) - client.close - server.close - end + fiber = Fiber.new do + stream.send([1]).run do |msg| + Fiber.yield(msg) + end + end - stream.send([1]).run do |msg| - expect(msg).to eq([2]) - stream.shutdown + expect(fiber.resume).to eq([2]) + expect(messages).to eq([MessagePack.pack([1])]) end + end - expect(messages).to eq([MessagePack.pack([1])]) + context "tcp" do + let!(:server) { TCPServer.new("0.0.0.0", 0) } + let!(:event_loop) { EventLoop.tcp("0.0.0.0", server.addr[1]) } + + include_context "msgpack stream behavior" + end + + context "unix" do + before { FileUtils.rm_f("/tmp/#$$.sock") } + after { FileUtils.rm_f("/tmp/#$$.sock") } + let!(:server) { UNIXServer.new("/tmp/#$$.sock") } + let!(:event_loop) { EventLoop.unix("/tmp/#$$.sock") } + + include_context "msgpack stream behavior" end end end