# frozen_string_literal: true require "bundler/setup" require "open3" require "fileutils" require "json" require "rspec" require "rails" require File.expand_path("../../config/environment", __FILE__) require "parallel_tests" require "parallel_tests/rspec/runner" require "./lib/turbo_tests/reporter" require "./lib/turbo_tests/runner" require "./lib/turbo_tests/json_rows_formatter" require "./lib/turbo_tests/documentation_formatter" module TurboTests FakeException = Struct.new(:backtrace, :message, :cause) class FakeException def self.from_obj(obj) if obj obj = obj.symbolize_keys klass = Class.new(FakeException) { define_singleton_method(:name) { obj[:class_name] } } klass.new(obj[:backtrace], obj[:message], FakeException.from_obj(obj[:cause])) end end end FakeExecutionResult = Struct.new( :example_skipped?, :pending_message, :status, :pending_fixed?, :exception, :pending_exception, ) class FakeExecutionResult def self.from_obj(obj) obj = obj.symbolize_keys new( obj[:example_skipped?], obj[:pending_message], obj[:status].to_sym, obj[:pending_fixed?], FakeException.from_obj(obj[:exception]), FakeException.from_obj(obj[:pending_exception]), ) end end FakeExample = Struct.new( :execution_result, :location, :description, :full_description, :metadata, :location_rerun_argument, :process_id, ) class FakeExample def self.from_obj(obj, process_id) obj = obj.symbolize_keys metadata = obj[:metadata].symbolize_keys metadata[:shared_group_inclusion_backtrace].map! do |frame| frame = frame.symbolize_keys RSpec::Core::SharedExampleGroupInclusionStackFrame.new( frame[:shared_group_name], frame[:inclusion_location], ) end new( FakeExecutionResult.from_obj(obj[:execution_result]), obj[:location], obj[:description], obj[:full_description], metadata, obj[:location_rerun_argument], process_id, ) end def notification RSpec::Core::Notifications::ExampleNotification.for(self) end end end