Skip to content

Instantly share code, notes, and snippets.

@baburdick
Created October 10, 2013 07:28
Show Gist options
  • Save baburdick/6914399 to your computer and use it in GitHub Desktop.
Save baburdick/6914399 to your computer and use it in GitHub Desktop.
diff --git a/lib/simplecov.rb b/lib/simplecov.rb
index 1c2b982..e1c749c 100644
--- a/lib/simplecov.rb
+++ b/lib/simplecov.rb
@@ -2,6 +2,7 @@
# Code coverage for ruby 1.9. Please check out README for a full introduction.
#
require 'lockfile'
+require 'pathname'
module SimpleCov
class << self
diff --git a/lib/simplecov/result.rb b/lib/simplecov/result.rb
index 5526810..aebc245 100644
--- a/lib/simplecov/result.rb
+++ b/lib/simplecov/result.rb
@@ -24,7 +24,8 @@ module SimpleCov
# Squeeze filepaths (i.e. "/a/b/../c" becomes "/a/c")
@original_result.keys.each do |filename|
expanded_filename = File.expand_path filename
- @original_result[expanded_filename] = @original_result.delete filename
+ relative_filename = Pathname.new(filename).relative_path_from(Pathname.new(SimpleCov.root)).to_s
+ @original_result[relative_filename] = @original_result.delete filename
end
@files = SimpleCov::FileList.new(@original_result.map do |filename, coverage|
@@ -34,9 +35,9 @@ module SimpleCov
filter!
end
- # Returns all filenames for source files contained in this result
- def filenames
- files.map(&:filename)
+ # Returns all relative filenames for source files contained in this result
+ def relative_filenames
+ files.map(&:relative_filename)
end
# Returns a Hash of groups for this result. Define groups using SimpleCov.add_group 'Models', 'app/models'
@@ -56,7 +57,7 @@ module SimpleCov
return @covered_strength if @covered_strength
m = 0
@files.each do |file|
- original_result[file.filename].each do |line_result|
+ original_result[file.relative_filename].each do |line_result|
if line_result
m += line_result
end
@@ -70,7 +71,7 @@ module SimpleCov
return @covered_lines if defined? @covered_lines
@covered_lines = 0
@files.each do |file|
- original_result[file.filename].each do |line_result|
+ original_result[file.relative_filename].each do |line_result|
@covered_lines += 1 if line_result and line_result > 0
end
end
@@ -82,7 +83,7 @@ module SimpleCov
return @missed_lines if defined? @missed_lines
@missed_lines = 0
@files.each do |file|
- original_result[file.filename].each do |line_result|
+ original_result[file.relative_filename].each do |line_result|
@missed_lines += 1 if line_result == 0
end
end
@@ -112,7 +113,13 @@ module SimpleCov
# Returns a hash representation of this Result that can be used for marshalling it into YAML
def to_hash
- {command_name => {"coverage" => original_result.reject {|filename, result| !filenames.include?(filename) }, "timestamp" => created_at.to_i}}
+ { command_name => {
+ "coverage" => original_result.reject {|filename, result|
+ !relative_filenames.include?(filename)
+ },
+ "timestamp" => created_at.to_i
+ }
+ }
end
# Loads a SimpleCov::Result#to_hash dump
diff --git a/lib/simplecov/source_file.rb b/lib/simplecov/source_file.rb
index 9e57809..aaa03a8 100644
--- a/lib/simplecov/source_file.rb
+++ b/lib/simplecov/source_file.rb
@@ -70,6 +70,8 @@ module SimpleCov
# The full path to this source file (e.g. /User/colszowka/projects/simplecov/lib/simplecov/source_file.rb)
attr_reader :filename
+ # The path to this source file relative to SimpleCov.root (e.g. lib/simplecov/source_file.rb)
+ attr_reader :relative_filename
# The array of coverage data received from the Coverage.result
attr_reader :coverage
# The source code for this file. Aliased as :source
@@ -78,6 +80,7 @@ module SimpleCov
def initialize(filename, coverage)
@filename, @coverage = filename, coverage
+ relative_filename = filename
File.open(filename, "rb") {|f| @src = f.readlines }
end
@@ -175,6 +178,12 @@ module SimpleCov
end
end
+ def relative_filename= filename
+ @relative_filename =
+ Pathname.new(filename).relative_path_from(Pathname.new(SimpleCov.root)).to_s
+ end
+ private :relative_filename=
+
private
# ruby 1.9 could use Float#round(places) instead
diff --git a/test/helper.rb b/test/helper.rb
index 52ed16a..1d78241 100644
--- a/test/helper.rb
+++ b/test/helper.rb
@@ -10,6 +10,11 @@ class Test::Unit::TestCase
File.expand_path(File.join(File.dirname(__FILE__), 'fixtures', filename))
end
+ def relative_source_fixture(filename)
+ Pathname.new(source_fixture(filename)).
+ relative_path_from(Pathname.new(SimpleCov.root)).to_s
+ end
+
# Keep 1.8-rubies from complaining about missing tests in each file that covers only 1.9 functionality
def default_test
end
diff --git a/test/test_file_list.rb b/test/test_file_list.rb
index d368858..f990ab6 100644
--- a/test/test_file_list.rb
+++ b/test/test_file_list.rb
@@ -3,9 +3,9 @@ require 'helper'
class TestFileList < Test::Unit::TestCase
context "With a file list from a result" do
setup do
- original_result = {source_fixture('sample.rb') => [nil, 1, 1, 1, nil, nil, 1, 1, nil, nil],
- source_fixture('app/models/user.rb') => [nil, 1, 1, 1, nil, nil, 1, 0, nil, nil],
- source_fixture('app/controllers/sample_controller.rb') => [nil, 1, 1, 1, nil, nil, 1, 0, nil, nil]}
+ original_result = {relative_source_fixture('sample.rb') => [nil, 1, 1, 1, nil, nil, 1, 1, nil, nil],
+ relative_source_fixture('app/models/user.rb') => [nil, 1, 1, 1, nil, nil, 1, 0, nil, nil],
+ relative_source_fixture('app/controllers/sample_controller.rb') => [nil, 1, 1, 1, nil, nil, 1, 0, nil, nil]}
@file_list = SimpleCov::Result.new(original_result).files
end
diff --git a/test/test_merge_helpers.rb b/test/test_merge_helpers.rb
index 1557a40..0d4d3e6 100644
--- a/test/test_merge_helpers.rb
+++ b/test/test_merge_helpers.rb
@@ -4,15 +4,15 @@ class TestMergeHelpers < Test::Unit::TestCase
context "With two faked coverage resultsets" do
setup do
SimpleCov.use_merging true
- @resultset1 = {source_fixture('sample.rb') => [nil, 1, 1, 1, nil, nil, 1, 1, nil, nil],
- source_fixture('app/models/user.rb') => [nil, 1, 1, 1, nil, nil, 1, 0, nil, nil],
- source_fixture('app/controllers/sample_controller.rb') => [nil, 1, 1, 1, nil, nil, 1, 0, nil, nil],
- source_fixture('resultset1.rb') => [1, 1, 1, 1]}
-
- @resultset2 = {source_fixture('sample.rb') => [1, nil, 1, 1, nil, nil, 1, 1, nil, nil],
- source_fixture('app/models/user.rb') => [nil, 1, 5, 1, nil, nil, 1, 0, nil, nil],
- source_fixture('app/controllers/sample_controller.rb') => [nil, 3, 1, nil, nil, nil, 1, 0, nil, nil],
- source_fixture('resultset2.rb') => [nil, 1, 1, nil]}
+ @resultset1 = {relative_source_fixture('sample.rb') => [nil, 1, 1, 1, nil, nil, 1, 1, nil, nil],
+ relative_source_fixture('app/models/user.rb') => [nil, 1, 1, 1, nil, nil, 1, 0, nil, nil],
+ relative_source_fixture('app/controllers/sample_controller.rb') => [nil, 1, 1, 1, nil, nil, 1, 0, nil, nil],
+ relative_source_fixture('resultset1.rb') => [1, 1, 1, 1]}
+
+ @resultset2 = {relative_source_fixture('sample.rb') => [1, nil, 1, 1, nil, nil, 1, 1, nil, nil],
+ relative_source_fixture('app/models/user.rb') => [nil, 1, 5, 1, nil, nil, 1, 0, nil, nil],
+ relative_source_fixture('app/controllers/sample_controller.rb') => [nil, 3, 1, nil, nil, nil, 1, 0, nil, nil],
+ relative_source_fixture('resultset2.rb') => [nil, 1, 1, nil]}
end
context "a merge" do
@@ -21,23 +21,23 @@ class TestMergeHelpers < Test::Unit::TestCase
end
should "have proper results for sample.rb" do
- assert_equal [1, 1, 2, 2, nil, nil, 2, 2, nil, nil], @merged[source_fixture('sample.rb')]
+ assert_equal [1, 1, 2, 2, nil, nil, 2, 2, nil, nil], @merged[relative_source_fixture('sample.rb')]
end
should "have proper results for user.rb" do
- assert_equal [nil, 2, 6, 2, nil, nil, 2, 0, nil, nil], @merged[source_fixture('app/models/user.rb')]
+ assert_equal [nil, 2, 6, 2, nil, nil, 2, 0, nil, nil], @merged[relative_source_fixture('app/models/user.rb')]
end
should "have proper results for sample_controller.rb" do
- assert_equal [nil, 4, 2, 1, nil, nil, 2, 0, nil, nil], @merged[source_fixture('app/controllers/sample_controller.rb')]
+ assert_equal [nil, 4, 2, 1, nil, nil, 2, 0, nil, nil], @merged[relative_source_fixture('app/controllers/sample_controller.rb')]
end
should "have proper results for resultset1.rb" do
- assert_equal [1, 1, 1, 1], @merged[source_fixture('resultset1.rb')]
+ assert_equal [1, 1, 1, 1], @merged[relative_source_fixture('resultset1.rb')]
end
should "have proper results for resultset2.rb" do
- assert_equal [nil, 1, 1, nil], @merged[source_fixture('resultset2.rb')]
+ assert_equal [nil, 1, 1, nil], @merged[relative_source_fixture('resultset2.rb')]
end
end
@@ -77,7 +77,12 @@ class TestMergeHelpers < Test::Unit::TestCase
end
should "return proper values for merged_result" do
- assert_equal [nil, 2, 6, 2, nil, nil, 2, 0, nil, nil], SimpleCov::ResultMerger.merged_result.source_files.find {|s| s.filename =~ /user/}.lines.map(&:coverage)
+ assert_equal [nil, 2, 6, 2, nil, nil, 2, 0, nil, nil],
+ SimpleCov::ResultMerger.merged_result.
+ source_files.
+ find {|s| s.relative_filename =~ /user/ }.
+ lines.
+ map(&:coverage)
end
context "with second result way above the merge_timeout" do
diff --git a/test/test_result.rb b/test/test_result.rb
index b09358c..1eb17e7 100644
--- a/test/test_result.rb
+++ b/test/test_result.rb
@@ -14,8 +14,8 @@ class TestResult < Test::Unit::TestCase
context "a simple cov result initialized from that" do
setup { @result = SimpleCov::Result.new(@original_result) }
- should "have 3 filenames" do
- assert_equal 3, @result.filenames.count
+ should "have 3 relative filenames" do
+ assert_equal 3, @result.relative_filenames.count
end
should "have 3 source files" do
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment