File: session_spec.rb

package info (click to toggle)
ruby-neovim 0.7.1-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 480 kB
  • sloc: ruby: 3,392; makefile: 3
file content (84 lines) | stat: -rw-r--r-- 2,552 bytes parent folder | download
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