lib/messages_comparator.rb in cucumber-compatibility-kit-13.0.0 vs lib/messages_comparator.rb in cucumber-compatibility-kit-13.0.1
- old
+ new
@@ -1,88 +2 @@
-# frozen_string_literal: true
-
-require_relative 'keys_checker'
-
-module CCK
- class MessagesComparator
- def initialize(validator, found, expected)
- @all_errors = []
- @compared = []
- @validator = validator
-
- compare(found, expected)
- end
-
- def errors
- @all_errors.flatten
- end
-
- def debug
- # puts 'Compared the following type of message:'
- # puts @compared.uniq.map { |m| " - #{m}" }.join("\n")
- # puts ''
- puts errors.uniq.join("\n")
- end
-
- private
-
- def compare(found, expected)
- found_by_type = messages_by_type(found)
- expected_by_type = messages_by_type(expected)
-
- found_by_type.keys.each do |type|
- compare_list(found_by_type[type], expected_by_type[type])
- rescue StandardError => e
- @all_errors << "Error whild comparing #{type}: #{e.message}"
- end
- end
-
- def messages_by_type(messages)
- by_type = Hash.new { |h, k| h[k] = [] }
- messages.each do |msg|
- by_type[message_type(msg)] << remove_envelope(msg)
- end
- by_type
- end
-
- def message_type(message)
- message.to_h.each do |key, value|
- return key unless value.nil?
- end
- end
-
- def remove_envelope(message)
- message.send(message_type(message))
- end
-
- def compare_list(found, expected)
- found.each_with_index do |message, index|
- compare_message(message, expected[index])
- end
- end
-
- def compare_message(found, expected)
- return unless found.is_a?(Cucumber::Messages::Message)
- return if found.is_a?(Cucumber::Messages::GherkinDocument)
- return if found.is_a?(Cucumber::Messages::Pickle)
- return if found.is_a?(Cucumber::Messages::Timestamp) && expected.is_a?(Cucumber::Messages::Timestamp)
- return if found.is_a?(Cucumber::Messages::Duration) && expected.is_a?(Cucumber::Messages::Duration)
- return if ENV['CI'] && found.is_a?(Cucumber::Messages::Ci) && expected.nil?
-
- @compared << found.class.name
- @all_errors << @validator.compare(found, expected)
- compare_sub_messages(found, expected)
- end
-
- def compare_sub_messages(found, expected)
- return unless expected.respond_to? :to_h
- expected.to_h.keys.each do |key|
- value = expected.send(key)
- if value.is_a?(Array)
- compare_list(found.send(key), value)
- else
- compare_message(found.send(key), value)
- end
- end
- end
- end
-end
+require_relative 'cck/messages_comparator'