class AppMap::Depends::TestFileInspector

Constants

TestReport

Attributes

test_dir[R]
test_file_patterns[R]

Public Class Methods

new(test_dir, test_file_patterns) click to toggle source
# File lib/appmap/depends/test_file_inspector.rb, line 53
def initialize(test_dir, test_file_patterns)
  @test_dir = test_dir
  @test_file_patterns = test_file_patterns
end

Public Instance Methods

report() click to toggle source
# File lib/appmap/depends/test_file_inspector.rb, line 58
def report
  metadata_files = Dir.glob(File.join(test_dir, '**', 'metadata.json'))
  source_locations = Set.new
  changed_test_files = Set.new
  failed_test_files = Set.new
  metadata_files.each do |metadata_file|
    metadata = JSON.parse(File.read(metadata_file))
    appmap_path = File.join(metadata_file.split('/')[0...-1])
  
    appmap_mtime = File.read(File.join(appmap_path, 'mtime')).to_i
    source_location = Util.normalize_path(metadata['source_location'])
    test_status = metadata['test_status']
    source_location_mtime = (File.stat(source_location).mtime.to_f * 1000).to_i rescue nil
  
    raise "Metadata #{metadata_file} does not contain source_location" unless source_location
    raise "Metadata #{metadata_file} does not contain test_status" unless test_status
  
    source_locations << source_location
    if source_location_mtime
      changed_test_files << source_location if source_location_mtime > appmap_mtime
      failed_test_files << source_location unless test_status == 'succeeded'
    end
  end
  
  test_files = Set.new(test_file_patterns.map(&Dir.method(:glob)).flatten)
  added_test_files = test_files - source_locations
  changed_test_files -= added_test_files
  removed_test_files = source_locations - test_files
    
  TestReport.new(metadata_files, added_test_files, removed_test_files, changed_test_files, failed_test_files)
end