Class: Ace::TestRunner::Molecules::SmartTestExecutor

Inherits:
Object
  • Object
show all
Defined in:
lib/ace/test_runner/molecules/smart_test_executor.rb

Overview

Intelligently chooses between subprocess and in-process execution based on test type

Instance Method Summary collapse

Constructor Details

#initialize(command_builder: nil, timeout: nil, force_mode: nil) ⇒ SmartTestExecutor

Returns a new instance of SmartTestExecutor.



12
13
14
15
16
17
# File 'lib/ace/test_runner/molecules/smart_test_executor.rb', line 12

def initialize(command_builder: nil, timeout: nil, force_mode: nil)
  @subprocess_executor = TestExecutor.new(command_builder: command_builder, timeout: timeout)
  @in_process_runner = InProcessRunner.new(timeout: timeout)
  @test_type_detector = Atoms::TestTypeDetector.new
  @force_mode = force_mode  # :subprocess, :direct, or nil for auto
end

Instance Method Details

#execute_command(command) ⇒ Object



43
44
45
46
# File 'lib/ace/test_runner/molecules/smart_test_executor.rb', line 43

def execute_command(command)
  # Direct command execution always uses subprocess
  @subprocess_executor.execute_command(command)
end

#execute_single_file(file, options = {}) ⇒ Object



33
34
35
36
37
38
39
40
41
# File 'lib/ace/test_runner/molecules/smart_test_executor.rb', line 33

def execute_single_file(file, options = {})
  mode = determine_execution_mode([file], options)

  if mode == :direct
    @in_process_runner.execute_single_file(file, options)
  else
    @subprocess_executor.execute_single_file(file, options)
  end
end

#execute_tests(files, options = {}) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/ace/test_runner/molecules/smart_test_executor.rb', line 19

def execute_tests(files, options = {})
  return empty_result if files.empty?

  # Determine execution mode
  mode = determine_execution_mode(files, options)

  # Execute with appropriate runner
  if mode == :direct
    @in_process_runner.execute_tests(files, options)
  else
    @subprocess_executor.execute_tests(files, options)
  end
end

#execute_with_progress(files, options = {}) {|{type: :execution_mode, mode: mode}| ... } ⇒ Object

Yields:

  • ({type: :execution_mode, mode: mode})


48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/ace/test_runner/molecules/smart_test_executor.rb', line 48

def execute_with_progress(files, options = {}, &block)
  mode = determine_execution_mode(files, options)

  # Add mode information to progress callback
  yield({type: :execution_mode, mode: mode}) if block_given?

  if mode == :direct
    @in_process_runner.execute_with_progress(files, options, &block)
  else
    @subprocess_executor.execute_with_progress(files, options, &block)
  end
end