1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
require "helper"
module Neovim
RSpec.describe Session do
let(:event_loop) { EventLoop.child(Support.child_argv) }
let!(:session) { Session.new(event_loop) }
after { session.shutdown }
describe "#request" do
it "synchronously returns a result" do
expect(session.request(:nvim_strwidth, "foobar")).to be(6)
end
it "raises an exception when there are errors" do
expect do
session.request(:nvim_strwidth, "too", "many")
end.to raise_error(/wrong number of arguments/i)
end
it "handles large data" do
large_str = Array.new(1024 * 17) { SecureRandom.hex(1) }.join
session.request(:nvim_set_current_line, large_str)
expect(session.request(:nvim_get_current_line)).to eq(large_str)
end
it "fails outside of the main thread", :silence_thread_exceptions do
expect do
Thread.new { session.request(:nvim_strwidth, "foo") }.join
end.to raise_error(/outside of the main thread/)
end
end
describe "#notify" do
it "doesn't raise exceptions" do
expect do
session.notify(:nvim_strwidth, "too", "many")
end.not_to raise_error
end
it "handles large data" do
large_str = Array.new(1024 * 17) { SecureRandom.hex(1) }.join
session.notify(:nvim_set_current_line, large_str)
expect(session.request(:nvim_get_current_line)).to eq(large_str)
end
it "succeeds outside of the main thread" do
expect do
Thread.new { session.notify(:nvim_set_current_line, "foo") }.join
end.not_to raise_error
end
end
describe "#run" do
it "enqueues messages received during blocking requests" do
session.request(:nvim_subscribe, "my_event")
session.request(:nvim_command, "call rpcnotify(0, 'my_event', 'foo')")
message = nil
session.run do |msg|
message = msg
session.shutdown
end
expect(message.sync?).to eq(false)
expect(message.method_name).to eq("my_event")
expect(message.arguments).to eq(["foo"])
end
it "supports requests within callbacks" do
session.request(:nvim_subscribe, "my_event")
session.request(:nvim_command, "call rpcnotify(0, 'my_event', 'foo')")
result = nil
session.run do |msg|
result = session.request(:nvim_strwidth, msg.arguments.first)
session.shutdown
end
expect(result).to be(3)
end
end
end
end
|