Module: AeTestCoverage::TestCoverageMethods

Defined in:
lib/ae_test_coverage/test_coverage_methods.rb

Instance Method Summary collapse

Instance Method Details

#cleanup_stubsObject



56
57
58
59
# File 'lib/ae_test_coverage/test_coverage_methods.rb', line 56

def cleanup_stubs
  File.unstub(:open)
  File.unstub(:directory?)
end

#coverage_file_nameObject



45
46
47
48
49
50
# File 'lib/ae_test_coverage/test_coverage_methods.rb', line 45

def coverage_file_name
  basename = "#{self.class.name}__#{name_of_test}.json".tr(' /', '__')
  max_filename_length = 255
  basename = trim_front(basename, max_filename_length - coverage_path.length)
  File.join(coverage_path, basename)
end

#coverage_pathObject



41
42
43
# File 'lib/ae_test_coverage/test_coverage_methods.rb', line 41

def coverage_path
  AeTestCoverage.config.coverage_path
end

#name_of_testObject



37
38
39
# File 'lib/ae_test_coverage/test_coverage_methods.rb', line 37

def name_of_test
  method_name
end

#start_recording_code_coverageObject



5
6
7
8
9
10
11
# File 'lib/ae_test_coverage/test_coverage_methods.rb', line 5

def start_recording_code_coverage
  if AeTestCoverage.enabled?
    AeTestCoverage.coverage_collectors.each do |coverage_collector_class, coverage_collector|
      coverage_collector.on_start
    end
  end
end

#trim_front(str, max_length) ⇒ Object



52
53
54
# File 'lib/ae_test_coverage/test_coverage_methods.rb', line 52

def trim_front(str, max_length)
  str.length > max_length ? str[-max_length...] : str
end

#write_code_coverage_artifactObject



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/ae_test_coverage/test_coverage_methods.rb', line 13

def write_code_coverage_artifact
  if AeTestCoverage.enabled?
    cleanup_stubs
    test_filename = method(name_of_test).source_location[0]
    FileUtils.mkdir_p(coverage_path)
    f = File.open(coverage_file_name, 'w')
    cleaned_coverage = {}.tap do |cleaned|
      AeTestCoverage.coverage_collectors.values.each do |coverage_collector|
        coverage_collector.covered_files.each do |covered_file, coverage_data|
          next if AeTestCoverage.exclude_file?(covered_file)
          cleaned[covered_file] ||= {}
          cleaned[covered_file][coverage_collector.class.name] = coverage_data
        end
      end
    end
    coverage_file_data = {
      filename: test_filename,
      coverage: cleaned_coverage
    }
    f.write(coverage_file_data.to_json)
    f.close
  end
end