Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions lib/ruby_lsp/ruby_lsp_rspec/code_lens.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@ def initialize(response_builder, uri, dispatcher, rspec_command, debug: false)
#: (Prism::CallNode) -> void
def on_call_node_enter(node)
case node.message
when "example", "it", "specify"
when "example", "it", "specify", "scenario"
name = generate_name(node)
add_test_code_lens(node, name: name, kind: :example)
when "context", "describe"
when "context", "describe", "feature"
return unless valid_group?(node)

name = generate_name(node)
Expand All @@ -41,7 +41,7 @@ def on_call_node_enter(node)
#: (Prism::CallNode) -> void
def on_call_node_leave(node)
case node.message
when "context", "describe"
when "context", "describe", "feature"
return unless valid_group?(node)

@group_id_stack.pop
Expand Down
6 changes: 3 additions & 3 deletions lib/ruby_lsp/ruby_lsp_rspec/document_symbol.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def initialize(response_builder, dispatcher)
#: (Prism::CallNode) -> void
def on_call_node_enter(node)
case node.message
when "example", "it", "specify"
when "example", "it", "specify", "scenario"
name = generate_name(node)

return unless name
Expand All @@ -27,7 +27,7 @@ def on_call_node_enter(node)
selection_range: range_from_node(node),
range: range_from_node(node),
)
when "context", "describe", "shared_examples", "shared_context", "shared_examples_for"
when "context", "describe", "shared_examples", "shared_context", "shared_examples_for", "feature", "scenario"
return if node.receiver && node.receiver&.slice != "RSpec"

name = generate_name(node)
Expand All @@ -50,7 +50,7 @@ def on_call_node_enter(node)
#: (Prism::CallNode) -> void
def on_call_node_leave(node)
case node.message
when "context", "describe", "shared_examples", "shared_context", "shared_examples_for"
when "context", "describe", "shared_examples", "shared_context", "shared_examples_for", "feature", "scenario"
return if node.receiver && node.receiver&.slice != "RSpec"

@response_builder.pop
Expand Down
8 changes: 4 additions & 4 deletions lib/ruby_lsp/ruby_lsp_rspec/test_discovery.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,22 +26,22 @@ def initialize(response_builder, dispatcher, uri, workspace_path)

#: (Prism::CallNode) -> void
def on_call_node_enter(node)
return unless ["describe", "context", "it", "specify", "example"].include?(node.message)
return unless ["describe", "context", "it", "specify", "example", "feature", "scenario"].include?(node.message)

case node.message
when "describe", "context"
when "describe", "context", "feature"
return unless valid_group?(node)

handle_describe(node)
when "it", "specify", "example"
when "it", "specify", "example", "scenario"
handle_example(node)
end
end

#: (Prism::CallNode) -> void
def on_call_node_leave(node)
case node.message
when "context", "describe"
when "context", "describe", "feature"
return unless valid_group?(node)

@group_stack.pop
Expand Down
56 changes: 56 additions & 0 deletions spec/test_discovery_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,62 @@
end
end

# Tests capybara feature/scenario syntax
# see https://github.com/teamcapybara/capybara
it "discovers Capybara examples" do
source = <<~RUBY
feature "Sample test" do
scenario "first test" do
expect(true).to be(true)
end

# Test a mixed syntax
it "second test" do
expect(true).to be(true)
end
end

RSpec.describe Foo do
it "third test" do
expect(true).to be(true)
end
end
RUBY

with_server(source, uri) do |server, uri|
server.process_message(
{
id: 1,
method: "rubyLsp/discoverTests",
params: {
textDocument: { uri: uri },
},
},
)

items = pop_result(server).response

expect(items.length).to eq(2)

first_group = items.first
expect(first_group[:id]).to eq("./spec/fake_spec.rb:1")
expect(first_group[:label]).to eq("Sample test")
expect(first_group[:children].length).to eq(2)

test_ids = first_group[:children].map { |i| i[:id] }
expect(test_ids).to include("./spec/fake_spec.rb:1::./spec/fake_spec.rb:2")

test_labels = first_group[:children].map { |i| i[:label] }
expect(test_labels).to include("first test")

expect(test_labels).to include("second test")

second_group = items[1]
expect(second_group[:label]).to eq("Foo")
expect(second_group[:children].length).to eq(1)
end
end

it "discovers nested example groups" do
source = <<~RUBY
RSpec.describe "Outer group" do
Expand Down
Loading