simplecov 0.4.2 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. data/.gitignore +4 -1
  2. data/.rvmrc +1 -1
  3. data/.travis.yml +9 -0
  4. data/CHANGELOG.md +64 -0
  5. data/Gemfile +7 -0
  6. data/README.rdoc +83 -66
  7. data/Rakefile +3 -7
  8. data/cucumber.yml +13 -0
  9. data/features/config_adapters.feature +44 -0
  10. data/features/config_autoload.feature +46 -0
  11. data/features/config_command_name.feature +33 -0
  12. data/features/config_coverage_dir.feature +20 -0
  13. data/features/config_deactivate_merging.feature +42 -0
  14. data/features/config_merge_timeout.feature +38 -0
  15. data/features/config_project_name.feature +27 -0
  16. data/features/config_styles.feature +93 -0
  17. data/features/cucumber_basic.feature +29 -0
  18. data/features/merging_test_unit_and_rspec.feature +44 -0
  19. data/features/rspec_basic.feature +31 -0
  20. data/features/rspec_groups_and_filters_basic.feature +29 -0
  21. data/features/rspec_groups_and_filters_complex.feature +35 -0
  22. data/features/rspec_without_simplecov.feature +20 -0
  23. data/features/step_definitions/html_steps.rb +42 -0
  24. data/features/step_definitions/simplecov_steps.rb +61 -0
  25. data/features/step_definitions/transformers.rb +13 -0
  26. data/features/step_definitions/web_steps.rb +64 -0
  27. data/features/support/env.rb +26 -0
  28. data/features/test_unit_basic.feature +34 -0
  29. data/features/test_unit_groups_and_filters_basic.feature +29 -0
  30. data/features/test_unit_groups_and_filters_complex.feature +35 -0
  31. data/features/test_unit_without_simplecov.feature +20 -0
  32. data/lib/simplecov.rb +15 -30
  33. data/lib/simplecov/adapters.rb +3 -26
  34. data/lib/simplecov/command_guesser.rb +2 -2
  35. data/lib/simplecov/configuration.rb +21 -21
  36. data/lib/simplecov/defaults.rb +48 -0
  37. data/lib/simplecov/file_list.rb +44 -0
  38. data/lib/simplecov/filter.rb +5 -5
  39. data/lib/simplecov/formatter.rb +1 -1
  40. data/lib/simplecov/formatter/simple_formatter.rb +1 -1
  41. data/lib/simplecov/jruby_float_fix.rb +1 -1
  42. data/lib/simplecov/merge_helpers.rb +4 -4
  43. data/lib/simplecov/result.rb +33 -30
  44. data/lib/simplecov/result_merger.rb +30 -13
  45. data/lib/simplecov/source_file.rb +78 -21
  46. data/lib/simplecov/version.rb +1 -1
  47. data/simplecov.gemspec +25 -22
  48. data/test/faked_project/Gemfile +6 -0
  49. data/test/faked_project/Rakefile +8 -0
  50. data/test/faked_project/cucumber.yml +13 -0
  51. data/test/faked_project/features/step_definitions/my_steps.rb +23 -0
  52. data/test/faked_project/features/support/env.rb +12 -0
  53. data/test/faked_project/features/test_stuff.feature +6 -0
  54. data/test/faked_project/lib/faked_project.rb +11 -0
  55. data/test/faked_project/lib/faked_project/framework_specific.rb +18 -0
  56. data/test/faked_project/lib/faked_project/meta_magic.rb +24 -0
  57. data/test/faked_project/lib/faked_project/some_class.rb +29 -0
  58. data/test/faked_project/spec/faked_spec.rb +11 -0
  59. data/test/faked_project/spec/meta_magic_spec.rb +10 -0
  60. data/test/faked_project/spec/some_class_spec.rb +10 -0
  61. data/test/faked_project/spec/spec_helper.rb +15 -0
  62. data/test/faked_project/test/faked_test.rb +11 -0
  63. data/test/faked_project/test/meta_magic_test.rb +13 -0
  64. data/test/faked_project/test/some_class_test.rb +15 -0
  65. data/test/faked_project/test/test_helper.rb +16 -0
  66. data/test/fixtures/app/controllers/sample_controller.rb +2 -2
  67. data/test/fixtures/app/models/user.rb +2 -2
  68. data/test/fixtures/frameworks/rspec_bad.rb +1 -1
  69. data/test/fixtures/frameworks/rspec_good.rb +1 -1
  70. data/test/fixtures/frameworks/testunit_bad.rb +1 -1
  71. data/test/fixtures/frameworks/testunit_good.rb +1 -1
  72. data/test/fixtures/resultset1.rb +1 -1
  73. data/test/fixtures/resultset2.rb +1 -1
  74. data/test/fixtures/sample.rb +8 -2
  75. data/test/helper.rb +17 -4
  76. data/test/shoulda_macros.rb +2 -2
  77. data/test/test_1_8_fallbacks.rb +3 -3
  78. data/test/test_command_guesser.rb +3 -3
  79. data/test/test_file_list.rb +24 -0
  80. data/test/test_filters.rb +18 -13
  81. data/test/test_merge_helpers.rb +23 -23
  82. data/test/test_result.rb +40 -31
  83. data/test/test_return_codes.rb +5 -5
  84. data/test/test_source_file.rb +39 -15
  85. data/test/test_source_file_line.rb +22 -22
  86. metadata +191 -53
  87. data/.document +0 -5
@@ -9,12 +9,12 @@ class TestCommandGuesser < Test::Unit::TestCase
9
9
  end
10
10
  end
11
11
  end
12
-
12
+
13
13
  should_guess_command_name "Unit Tests", '/some/path/test/units/foo_bar_test.rb', 'test/units/foo.rb', 'test/foo.rb'
14
14
  should_guess_command_name "Functional Tests", '/some/path/test/functional/foo_bar_controller_test.rb'
15
- should_guess_command_name "Integration Tests", '/some/path/test/integration/foo_bar_controller_test.rb'
15
+ should_guess_command_name "Integration Tests", '/some/path/test/integration/foo_bar_controller_test.rb'
16
16
  should_guess_command_name "Cucumber Features", 'features', 'cucumber', 'cucumber features'
17
17
  should_guess_command_name "RSpec", '/some/path/spec/foo.rb'
18
18
  should_guess_command_name "some_arbitrary_command with arguments", 'some_arbitrary_command with arguments'
19
19
  end
20
- end
20
+ end
@@ -0,0 +1,24 @@
1
+ require 'helper'
2
+
3
+ class TestFileList < Test::Unit::TestCase
4
+ on_ruby "1.9" do
5
+ context "With a file list from a result" do
6
+ setup do
7
+ original_result = {source_fixture('sample.rb') => [nil, 1, 1, 1, nil, nil, 1, 1, nil, nil],
8
+ source_fixture('app/models/user.rb') => [nil, 1, 1, 1, nil, nil, 1, 0, nil, nil],
9
+ source_fixture('app/controllers/sample_controller.rb') => [nil, 1, 1, 1, nil, nil, 1, 0, nil, nil]}
10
+ @file_list = SimpleCov::Result.new(original_result).files
11
+ end
12
+
13
+ should("have 13 covered_lines") { assert_equal 13, @file_list.covered_lines }
14
+ should("have 2 missed_lines") { assert_equal 2, @file_list.missed_lines }
15
+ should("have 18 never_lines") { assert_equal 18, @file_list.never_lines }
16
+ should("have 15 lines_of_code") { assert_equal 15, @file_list.lines_of_code }
17
+ should("have 3 skipped_lines") { assert_equal 3, @file_list.skipped_lines }
18
+
19
+ should "have correct covered_percent" do
20
+ assert_equal 100.0*13/15, @file_list.covered_percent
21
+ end
22
+ end
23
+ end
24
+ end
data/test/test_filters.rb CHANGED
@@ -6,70 +6,75 @@ class TestFilters < Test::Unit::TestCase
6
6
  setup do
7
7
  @source_file = SimpleCov::SourceFile.new(source_fixture('sample.rb'), [nil, 1, 1, 1, nil, nil, 1, 0, nil, nil])
8
8
  end
9
-
9
+
10
10
  should "pass a new SimpleCov::StringFilter 'foobar'" do
11
11
  assert SimpleCov::StringFilter.new('foobar').passes?(@source_file)
12
12
  end
13
-
13
+
14
14
  should "pass a new SimpleCov::StringFilter 'some/path'" do
15
15
  assert SimpleCov::StringFilter.new('some/path').passes?(@source_file)
16
16
  end
17
-
17
+
18
18
  should "not pass a new SimpleCov::StringFilter 'test/fixtures'" do
19
19
  assert !SimpleCov::StringFilter.new('test/fixtures').passes?(@source_file)
20
20
  end
21
-
21
+
22
22
  should "not pass a new SimpleCov::StringFilter 'test/fixtures/sample.rb'" do
23
23
  assert !SimpleCov::StringFilter.new('test/fixtures/sample.rb').passes?(@source_file)
24
24
  end
25
-
25
+
26
26
  should "not pass a new SimpleCov::StringFilter 'sample.rb'" do
27
27
  assert !SimpleCov::StringFilter.new('sample.rb').passes?(@source_file)
28
28
  end
29
-
29
+
30
30
  should "pass a new SimpleCov::BlockFilter that is not applicable" do
31
31
  assert SimpleCov::BlockFilter.new(Proc.new {|s| File.basename(s.filename) == 'foo.rb'}).passes?(@source_file)
32
32
  end
33
-
33
+
34
34
  should "not pass a new SimpleCov::BlockFilter that is applicable" do
35
35
  assert !SimpleCov::BlockFilter.new(Proc.new {|s| File.basename(s.filename) == 'sample.rb'}).passes?(@source_file)
36
36
  end
37
37
  end
38
-
38
+
39
39
  context "with no filters set up and a basic source file in an array" do
40
40
  setup do
41
41
  SimpleCov.filters = []
42
42
  @files = [SimpleCov::SourceFile.new(source_fixture('sample.rb'), [nil, 1, 1, 1, nil, nil, 1, 0, nil, nil])]
43
43
  end
44
-
44
+
45
45
  should "return 0 items after executing SimpleCov.filtered on files when using a 'sample' string filter" do
46
46
  SimpleCov.add_filter "sample"
47
47
  assert_equal 0, SimpleCov.filtered(@files).count
48
48
  end
49
-
49
+
50
50
  should "return 0 items after executing SimpleCov.filtered on files when using a 'test/fixtures/' string filter" do
51
51
  SimpleCov.add_filter "test/fixtures"
52
52
  assert_equal 0, SimpleCov.filtered(@files).count
53
53
  end
54
-
54
+
55
55
  should "return 1 item after executing SimpleCov.filtered on files when using a 'fooo' string filter" do
56
56
  SimpleCov.add_filter "fooo"
57
57
  assert_equal 1, SimpleCov.filtered(@files).count
58
58
  end
59
-
59
+
60
60
  should "return 0 items after executing SimpleCov.filtered on files when using a block filter that returns true" do
61
61
  SimpleCov.add_filter do |src_file|
62
62
  true
63
63
  end
64
64
  assert_equal 0, SimpleCov.filtered(@files).count
65
65
  end
66
-
66
+
67
67
  should "return 1 item after executing SimpleCov.filtered on files when using an always-false block filter" do
68
68
  SimpleCov.add_filter do |src_file|
69
69
  false
70
70
  end
71
71
  assert_equal 1, SimpleCov.filtered(@files).count
72
72
  end
73
+
74
+ should "return a FileList after filtering" do
75
+ SimpleCov.add_filter "fooo"
76
+ assert_equal SimpleCov::FileList, SimpleCov.filtered(@files).class
77
+ end
73
78
  end
74
79
  end
75
80
  end
@@ -9,51 +9,51 @@ class TestMergeHelpers < Test::Unit::TestCase
9
9
  source_fixture('app/models/user.rb') => [nil, 1, 1, 1, nil, nil, 1, 0, nil, nil],
10
10
  source_fixture('app/controllers/sample_controller.rb') => [nil, 1, 1, 1, nil, nil, 1, 0, nil, nil],
11
11
  source_fixture('resultset1.rb') => [1, 1, 1, 1]}
12
-
12
+
13
13
  @resultset2 = {source_fixture('sample.rb') => [1, nil, 1, 1, nil, nil, 1, 1, nil, nil],
14
14
  source_fixture('app/models/user.rb') => [nil, 1, 5, 1, nil, nil, 1, 0, nil, nil],
15
15
  source_fixture('app/controllers/sample_controller.rb') => [nil, 3, 1, nil, nil, nil, 1, 0, nil, nil],
16
16
  source_fixture('resultset2.rb') => [nil, 1, 1, nil]}
17
17
  end
18
-
18
+
19
19
  context "a merge" do
20
20
  setup do
21
21
  assert @merged = @resultset1.merge_resultset(@resultset2)
22
22
  end
23
-
23
+
24
24
  should "have proper results for sample.rb" do
25
25
  assert_equal [1, 1, 2, 2, nil, nil, 2, 2, nil, nil], @merged[source_fixture('sample.rb')]
26
26
  end
27
-
27
+
28
28
  should "have proper results for user.rb" do
29
29
  assert_equal [nil, 2, 6, 2, nil, nil, 2, 0, nil, nil], @merged[source_fixture('app/models/user.rb')]
30
30
  end
31
-
31
+
32
32
  should "have proper results for sample_controller.rb" do
33
33
  assert_equal [nil, 4, 2, 1, nil, nil, 2, 0, nil, nil], @merged[source_fixture('app/controllers/sample_controller.rb')]
34
34
  end
35
-
35
+
36
36
  should "have proper results for resultset1.rb" do
37
37
  assert_equal [1, 1, 1, 1], @merged[source_fixture('resultset1.rb')]
38
38
  end
39
-
39
+
40
40
  should "have proper results for resultset2.rb" do
41
41
  assert_equal [nil, 1, 1, nil], @merged[source_fixture('resultset2.rb')]
42
42
  end
43
43
  end
44
-
44
+
45
45
  # See Github issue #6
46
46
  should "return an empty hash when the resultset cache file is empty" do
47
47
  File.open(SimpleCov::ResultMerger.resultset_path, "w+") {|f| f.puts ""}
48
- assert_equal Hash.new, SimpleCov::ResultMerger.resultset
48
+ assert_equal Hash.new, SimpleCov::ResultMerger.resultset
49
49
  end
50
50
 
51
- # See Github issue #6
51
+ # See Github issue #6
52
52
  should "return an empty hash when the resultset cache file is not present" do
53
53
  system "rm #{SimpleCov::ResultMerger.resultset_path}" if File.exist?(SimpleCov::ResultMerger.resultset_path)
54
- assert_equal Hash.new, SimpleCov::ResultMerger.resultset
54
+ assert_equal Hash.new, SimpleCov::ResultMerger.resultset
55
55
  end
56
-
56
+
57
57
  context "and results generated from those" do
58
58
  setup do
59
59
  system "rm #{SimpleCov::ResultMerger.resultset_path}" if File.exist?(SimpleCov::ResultMerger.resultset_path)
@@ -62,46 +62,46 @@ class TestMergeHelpers < Test::Unit::TestCase
62
62
  @result2 = SimpleCov::Result.new(@resultset2)
63
63
  @result2.command_name = "result2"
64
64
  end
65
-
65
+
66
66
  context "with stored results" do
67
67
  setup do
68
68
  assert SimpleCov::ResultMerger.store_result(@result1)
69
69
  assert SimpleCov::ResultMerger.store_result(@result2)
70
70
  end
71
-
71
+
72
72
  should "have stored data in resultset_path yaml file" do
73
73
  assert File.readlines(SimpleCov::ResultMerger.resultset_path).length > 50
74
74
  end
75
-
75
+
76
76
  should "return a hash containing keys ['result1' and 'result2'] for resultset" do
77
77
  assert_equal ['result1', 'result2'], SimpleCov::ResultMerger.resultset.keys.sort
78
78
  end
79
-
79
+
80
80
  should "return proper values for merged_result" do
81
81
  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)
82
82
  end
83
-
83
+
84
84
  context "with second result way above the merge_timeout" do
85
- setup do
85
+ setup do
86
86
  @result2.created_at = Time.now - 172800 # two days ago
87
87
  assert SimpleCov::ResultMerger.store_result(@result2)
88
88
  end
89
-
89
+
90
90
  should "have only one result in SimpleCov::ResultMerger.results" do
91
91
  assert_equal 1, SimpleCov::ResultMerger.results.length
92
92
  end
93
93
  end
94
-
94
+
95
95
  context "with merging disabled" do
96
96
  setup { SimpleCov.use_merging false }
97
-
97
+
98
98
  should "return nil for SimpleCov.result" do
99
99
  assert_nil SimpleCov.result
100
100
  end
101
101
  end
102
102
  end
103
-
103
+
104
104
  end
105
105
  end
106
106
  end
107
- end
107
+ end
data/test/test_result.rb CHANGED
@@ -11,74 +11,77 @@ class TestResult < Test::Unit::TestCase
11
11
  source_fixture('app/models/user.rb') => [nil, 1, 1, 1, nil, nil, 1, 0, nil, nil],
12
12
  source_fixture('app/controllers/sample_controller.rb') => [nil, 1, 1, 1, nil, nil, 1, 0, nil, nil]}
13
13
  end
14
-
14
+
15
15
  context "a simple cov result initialized from that" do
16
16
  setup { @result = SimpleCov::Result.new(@original_result) }
17
-
17
+
18
18
  should "have 3 filenames" do
19
19
  assert_equal 3, @result.filenames.count
20
20
  end
21
-
21
+
22
22
  should "have 3 source files" do
23
23
  assert_equal 3, @result.source_files.count
24
24
  assert @result.source_files.all? {|s| s.instance_of?(SimpleCov::SourceFile)}, "Not alL instances are of SimpleCov::SourceFile type"
25
25
  end
26
-
26
+
27
+ should "return an instance of SimpleCov::FileList for source_files and files" do
28
+ assert_equal SimpleCov::FileList, @result.source_files.class
29
+ assert_equal SimpleCov::FileList, @result.files.class
30
+ end
31
+
27
32
  should "have files equal to source_files" do
28
33
  assert_equal @result.files, @result.source_files
29
34
  end
30
-
35
+
31
36
  should "have accurate covered percent" do
32
37
  # in our fixture, there are 13 covered line (result in 1) in all 15 relevant line (result in non-nil)
33
38
  assert_equal 100.0*13/15, @result.covered_percent
34
39
  end
35
-
36
- context "dumped with to_yaml" do
37
- setup { @yaml = @result.to_yaml }
38
- should("be a string") { assert_equal String, @yaml.class }
39
-
40
+
41
+ context "dumped with to_hash" do
42
+ setup { @hash = @result.to_hash }
43
+ should("be a hash") { assert_equal Hash, @hash.class }
44
+
40
45
  context "loaded back with from_yaml" do
41
- setup { @dumped_result = SimpleCov::Result.from_yaml(@yaml) }
42
-
46
+ setup { @dumped_result = SimpleCov::Result.from_hash(@hash) }
47
+
43
48
  should "have 3 source files" do
44
49
  assert_equal @result.source_files.count, @dumped_result.source_files.count
45
50
  end
46
-
51
+
47
52
  should "have the same covered_percent" do
48
53
  assert_equal @result.covered_percent, @dumped_result.covered_percent
49
54
  end
50
-
51
- should "have the same created_at" do
52
- # Using to_i here since direct comparison seems to fail on 64-bit architecture because
53
- # of fraction difference...
55
+
56
+ should "have the same timestamp" do
54
57
  assert_equal @result.created_at.to_i, @dumped_result.created_at.to_i
55
58
  end
56
-
59
+
57
60
  should "have the same command_name" do
58
61
  assert_equal @result.command_name, @dumped_result.command_name
59
62
  end
60
-
63
+
61
64
  should "have the same original_result" do
62
65
  assert_equal @result.original_result, @dumped_result.original_result
63
66
  end
64
67
  end
65
68
  end
66
69
  end
67
-
70
+
68
71
  context "with some filters set up" do
69
72
  setup do
70
73
  SimpleCov.add_filter 'sample.rb'
71
74
  end
72
-
75
+
73
76
  should "have 2 files in a new simple cov result" do
74
77
  assert_equal 2, SimpleCov::Result.new(@original_result).source_files.length
75
78
  end
76
-
79
+
77
80
  should "have 80 covered percent" do
78
81
  assert_equal 80, SimpleCov::Result.new(@original_result).covered_percent
79
82
  end
80
83
  end
81
-
84
+
82
85
  context "with groups set up for all files" do
83
86
  setup do
84
87
  SimpleCov.add_group 'Models', 'app/models'
@@ -88,28 +91,28 @@ class TestResult < Test::Unit::TestCase
88
91
  end
89
92
  @result = SimpleCov::Result.new(@original_result)
90
93
  end
91
-
94
+
92
95
  should "have 3 groups" do
93
96
  assert_equal 3, @result.groups.length
94
97
  end
95
-
98
+
96
99
  should "have user.rb in 'Models' group" do
97
100
  assert_equal 'user.rb', File.basename(@result.groups['Models'].first.filename)
98
101
  end
99
-
102
+
100
103
  should "have sample_controller.rb in 'Controllers' group" do
101
104
  assert_equal 'sample_controller.rb', File.basename(@result.groups['Controllers'].first.filename)
102
105
  end
103
-
106
+
104
107
  context "and simple formatter being used" do
105
108
  setup {SimpleCov.formatter = SimpleCov::Formatter::SimpleFormatter}
106
-
109
+
107
110
  should "return a formatted string with result.format!" do
108
111
  assert_equal String, @result.format!.class
109
112
  end
110
113
  end
111
114
  end
112
-
115
+
113
116
  context "with groups set up that do not match all files" do
114
117
  setup do
115
118
  SimpleCov.configure do
@@ -118,11 +121,11 @@ class TestResult < Test::Unit::TestCase
118
121
  end
119
122
  @result = SimpleCov::Result.new(@original_result)
120
123
  end
121
-
124
+
122
125
  should "have 3 groups" do
123
126
  assert_equal 3, @result.groups.length
124
127
  end
125
-
128
+
126
129
  should "have 1 item per group" do
127
130
  @result.groups.each do |name, files|
128
131
  assert_equal 1, files.length, "Group #{name} should have 1 file"
@@ -132,6 +135,12 @@ class TestResult < Test::Unit::TestCase
132
135
  should "have sample.rb in 'Ungrouped' group" do
133
136
  assert_equal 'sample.rb', File.basename(@result.groups['Ungrouped'].first.filename)
134
137
  end
138
+
139
+ should "return all groups as instances of SimpleCov::FileList" do
140
+ @result.groups.each do |name, files|
141
+ assert_equal SimpleCov::FileList, files.class
142
+ end
143
+ end
135
144
  end
136
145
  end
137
146
  end
@@ -15,25 +15,25 @@ class TestReturnCodes < Test::Unit::TestCase
15
15
  `ruby testunit_good.rb`
16
16
  assert_equal 0, $?.exitstatus
17
17
  end
18
-
18
+
19
19
  should "have return code 0 when running rspec_good.rb" do
20
20
  `rspec rspec_good.rb`
21
21
  assert_equal 0, $?.exitstatus
22
22
  end
23
-
23
+
24
24
  should "have non-0 return code when running testunit_bad.rb" do
25
25
  `ruby testunit_bad.rb`
26
26
  assert_not_equal 0, $?.exitstatus
27
27
  end
28
-
28
+
29
29
  should "have return code 1 when running rspec_bad.rb" do
30
30
  `rspec rspec_bad.rb`
31
31
  assert_not_equal 0, $?.exitstatus
32
32
  end
33
-
33
+
34
34
  teardown do
35
35
  Dir.chdir(@current_dir)
36
36
  end
37
37
  end
38
38
  end
39
- end
39
+ end
@@ -2,50 +2,74 @@ require 'helper'
2
2
 
3
3
  class TestSourceFile < Test::Unit::TestCase
4
4
  on_ruby '1.9' do
5
+ COVERAGE_FOR_SAMPLE_RB = [nil, 1, 1, 1, nil, nil, 1, 0, nil, nil, nil, nil, nil, nil, nil, nil]
5
6
  context "A source file initialized with some coverage data" do
6
7
  setup do
7
- @source_file = SimpleCov::SourceFile.new(source_fixture('sample.rb'), [nil, 1, 1, 1, nil, nil, 1, 0, nil, nil])
8
+ @source_file = SimpleCov::SourceFile.new(source_fixture('sample.rb'), COVERAGE_FOR_SAMPLE_RB)
8
9
  end
9
-
10
+
10
11
  should "have a filename" do
11
12
  assert @source_file.filename
12
13
  end
13
-
14
+
14
15
  should "have source equal to src" do
15
16
  assert_equal @source_file.source, @source_file.src
16
17
  end
17
-
18
+
18
19
  should "have source_lines equal to lines" do
19
20
  assert_equal @source_file.source_lines, @source_file.lines
20
21
  end
21
-
22
- should "have 10 source lines" do
23
- assert_equal 10, @source_file.lines.count
22
+
23
+ should "have 16 source lines" do
24
+ assert_equal 16, @source_file.lines.count
24
25
  end
25
-
26
+
26
27
  should "have all source lines of type SimpleCov::SourceFile::Line" do
27
28
  assert @source_file.lines.all? {|l| l.instance_of?(SimpleCov::SourceFile::Line)}
28
29
  end
29
-
30
+
30
31
  should "have 'class Foo' as line(2).source" do
31
32
  assert_equal "class Foo\n", @source_file.line(2).source
32
33
  end
33
-
34
+
34
35
  should "return lines number 2, 3, 4, 7 for covered_lines" do
35
36
  assert_equal [2, 3, 4, 7], @source_file.covered_lines.map(&:line)
36
37
  end
37
-
38
+
38
39
  should "return lines number 8 for missed_lines" do
39
40
  assert_equal [8], @source_file.missed_lines.map(&:line)
40
41
  end
41
-
42
- should "return lines number 1, 5, 6, 9, 10 for never_lines" do
43
- assert_equal [1, 5, 6, 9, 10], @source_file.never_lines.map(&:line)
42
+
43
+ should "return lines number 1, 5, 6, 9, 10, 11, 15, 16 for never_lines" do
44
+ assert_equal [1, 5, 6, 9, 10, 11, 15, 16], @source_file.never_lines.map(&:line)
45
+ end
46
+
47
+ should "return line numbers 12, 13, 14 for skipped_lines" do
48
+ assert_equal [12, 13, 14], @source_file.skipped_lines.map(&:line)
44
49
  end
45
-
50
+
46
51
  should "have 80% covered_percent" do
47
52
  assert_equal 80.0, @source_file.covered_percent
48
53
  end
49
54
  end
55
+
56
+ context "Simulating potential Ruby 1.9 defect -- see Issue #56" do
57
+ setup do
58
+ @source_file = SimpleCov::SourceFile.new(source_fixture('sample.rb'), COVERAGE_FOR_SAMPLE_RB + [nil])
59
+ end
60
+
61
+ should "have 16 source lines regardless of extra data in coverage array" do
62
+ # Do not litter test output with known warning
63
+ capture_stderr { assert_equal 16, @source_file.lines.count }
64
+ end
65
+
66
+ should "print a warning to stderr if coverage array contains more data than lines in the file" do
67
+ captured_output = capture_stderr do
68
+ @source_file.lines
69
+ end
70
+
71
+ assert_match /^Warning: coverage data provided/, captured_output
72
+ end
73
+ end
50
74
  end
51
75
  end