Created
October 10, 2013 07:28
-
-
Save baburdick/6914399 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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