Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
2 changes: 1 addition & 1 deletion features/docs/formatters/json_formatter.feature
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ Feature: JSON output formatter
]
"""

@wip-new-core
@spawn
Scenario: embedding screenshot
When I run `cucumber -b --format json features/embed.feature`
Then it should pass with JSON:
Expand Down
30 changes: 29 additions & 1 deletion lib/cucumber/reports/legacy_formatter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@ def initialize(runtime, formatters)
extend Forwardable

def_delegators :formatter,
:embed,
:ask,
:puts

Expand All @@ -85,6 +84,10 @@ def after_test_case(test_case, result)
printer.after_test_case(test_case, result)
end

def embed(src, mime_type, label)
printer.embed(src, mime_type, label)
end

def done
printer.after
end
Expand Down Expand Up @@ -153,6 +156,10 @@ def after
self
end

def embed(src, mime_type, label)
@child.embed(src, mime_type, label)
end

private

def timer
Expand Down Expand Up @@ -181,6 +188,13 @@ def method_missing(name, node, step_result, *args)
end
end

Embedding = Struct.new(:src, :mime_type, :label) do

def send_to_formatter(formatter)
formatter.embed(src, mime_type, label)
end
end

FeaturePrinter = Struct.new(:formatter, :runtime, :node) do
include Debug

Expand All @@ -189,6 +203,7 @@ def before
Legacy::Ast::Comments.new(node.comments).accept(formatter)
Legacy::Ast::Tags.new(node.tags).accept(formatter)
formatter.feature_name node.keyword, indented(node.name) # TODO: change the core's new AST to return name and description separately instead of this lumped-together field
@delayed_embeddings = []
self
end

Expand All @@ -209,6 +224,7 @@ def after_test_step(test_step, result)
def after_test_case(*args)
if current_test_step_source.step_result.nil?
print_step_container
@delayed_embeddings = []
end
@child.after_test_case
@previous_test_case_background = @current_test_case_background
Expand Down Expand Up @@ -256,6 +272,10 @@ def after
self
end

def embed(src, mime_type, label)
@delayed_embeddings << Embedding.new(src, mime_type, label)
end

private

def print_step_container
Expand Down Expand Up @@ -292,6 +312,14 @@ def print_step
return unless current_test_step_source.step_result
print_step_container
@child.step(current_test_step_source.step, current_test_step_source.step_result)
print_embeddings
end

def print_embeddings
@delayed_embeddings.each do |embedding|
embedding.send_to_formatter(formatter)
end
@delayed_embeddings = []
end

def set_child_calling_before(child)
Expand Down