slather 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,219 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'spec_helper')
2
+
3
+ describe Slather::Project do
4
+
5
+ let(:fixtures_project) do
6
+ Slather::Project.any_instance.stub(:configure_from_yml)
7
+ Slather::Project.open(FIXTURES_PROJECT_PATH)
8
+ end
9
+
10
+ describe "::open" do
11
+ it "should return a project instance that has been configured from yml" do
12
+ expect_any_instance_of(Slather::Project).to receive(:configure_from_yml)
13
+ expect(fixtures_project).not_to be_nil
14
+ end
15
+ end
16
+
17
+ describe "#derived_data_dir" do
18
+ it "should return the system's derived data directory" do
19
+ expect(fixtures_project.send(:derived_data_dir)).to eq(File.expand_path('~') + "/Library/Developer/Xcode/DerivedData/")
20
+ end
21
+ end
22
+
23
+ describe "#build_directory" do
24
+ it "should return the build_directory property, if it has been explicitly set" do
25
+ build_directory_mock = double(String)
26
+ fixtures_project.build_directory = build_directory_mock
27
+ expect(fixtures_project.build_directory).to eq(build_directory_mock)
28
+ end
29
+
30
+ it "should return the derived_data_dir if no build_directory has been set" do
31
+ derived_data_dir_mock = double(String)
32
+ fixtures_project.stub(:derived_data_dir).and_return(derived_data_dir_mock)
33
+ expect(fixtures_project.build_directory).to eq(derived_data_dir_mock)
34
+ end
35
+ end
36
+
37
+ describe "::yml" do
38
+ before(:each) { Slather::Project.instance_variable_set("@yml", nil) }
39
+
40
+ context ".slather.yml file exists" do
41
+ before(:all) { File.open(".slather.yml", "w") { |f| f.write("two: 2") } }
42
+ after(:all) { File.delete(".slather.yml") }
43
+
44
+ it "should load and return .slather.yml, if it exists" do
45
+ expect(Slather::Project.yml).to eq({"two" => 2})
46
+ end
47
+ end
48
+
49
+ context ".slather.yml file doesn't exist" do
50
+ it "should return an empy hash" do
51
+ expect(Slather::Project.yml).to eq({})
52
+ end
53
+ end
54
+ end
55
+
56
+ describe "#coverage_files" do
57
+ class SpecCoverageFile < Slather::CoverageFile
58
+ end
59
+
60
+ before(:each) do
61
+ Dir.stub(:[]).and_call_original
62
+ Dir.stub(:[]).with("#{fixtures_project.build_directory}/**/*.gcno").and_return(["/some/path/fixtures.gcno",
63
+ "/some/path/peekaview.gcno",
64
+ "/some/path/fixturesTests.gcno",
65
+ "/some/path/peekaviewTests.gcno",
66
+ "/some/path/NotInProject.gcno",
67
+ "/some/path/NSRange.gcno"])
68
+ fixtures_project.stub(:coverage_file_class).and_return(SpecCoverageFile)
69
+ end
70
+
71
+ it "should return coverage file objects of type coverage_file_class for unignored project files" do
72
+ fixtures_project.ignore_list = ["*fixturesTests*"]
73
+ coverage_files = fixtures_project.send(:coverage_files)
74
+ coverage_files.each { |cf| expect(cf.kind_of?(SpecCoverageFile)).to be_truthy }
75
+ expect(coverage_files.map { |cf| cf.source_file_pathname.basename.to_s }).to eq(["fixtures.m", "peekaview.m"])
76
+ end
77
+
78
+ it "should raise an exception if no unignored project coverage file files were found" do
79
+ fixtures_project.ignore_list = ["*fixturesTests*", "*fixtures*"]
80
+ expect {fixtures_project.send(:coverage_files)}.to raise_error(StandardError)
81
+ end
82
+ end
83
+
84
+ describe "#configure_from_yml" do
85
+ it "should configure all properties from the yml" do
86
+ unstubbed_project = Slather::Project.open(FIXTURES_PROJECT_PATH)
87
+ expect(unstubbed_project).to receive(:configure_build_directory_from_yml)
88
+ expect(unstubbed_project).to receive(:configure_ignore_list_from_yml)
89
+ expect(unstubbed_project).to receive(:configure_ci_service_from_yml)
90
+ expect(unstubbed_project).to receive(:configure_coverage_service_from_yml)
91
+ unstubbed_project.configure_from_yml
92
+ end
93
+ end
94
+
95
+ describe "#configure_ignore_list_from_yml" do
96
+ it "should set the ignore_list if it has been provided in the yml and has not already been set" do
97
+ Slather::Project.stub(:yml).and_return({"ignore" => ["test", "ing"] })
98
+ fixtures_project.configure_ignore_list_from_yml
99
+ expect(fixtures_project.ignore_list).to eq(["test", "ing"])
100
+ end
101
+
102
+ it "should force the ignore_list into an array" do
103
+ Slather::Project.stub(:yml).and_return({"ignore" => "test" })
104
+ fixtures_project.configure_ignore_list_from_yml
105
+ expect(fixtures_project.ignore_list).to eq(["test"])
106
+ end
107
+
108
+ it "should not set the ignore_list if it has already been set" do
109
+ Slather::Project.stub(:yml).and_return({"ignore" => ["test", "ing"] })
110
+ fixtures_project.ignore_list = ["already", "set"]
111
+ fixtures_project.configure_ignore_list_from_yml
112
+ expect(fixtures_project.ignore_list).to eq(["already", "set"])
113
+ end
114
+
115
+ it "should default the ignore_list to an empty array if nothing is provided in the yml" do
116
+ Slather::Project.stub(:yml).and_return({})
117
+ fixtures_project.configure_ignore_list_from_yml
118
+ expect(fixtures_project.ignore_list).to eq([])
119
+ end
120
+ end
121
+
122
+ describe "#configure_build_directory_from_yml" do
123
+ it "should set the build_directory if it has been provided in the yml and has not already been set" do
124
+ Slather::Project.stub(:yml).and_return({"build_directory" => "/some/path"})
125
+ fixtures_project.configure_build_directory_from_yml
126
+ expect(fixtures_project.build_directory).to eq("/some/path")
127
+ end
128
+
129
+ it "should not set the build_directory if it has already been set" do
130
+ Slather::Project.stub(:yml).and_return({"build_directory" => "/some/path"})
131
+ fixtures_project.build_directory = "/already/set"
132
+ fixtures_project.configure_build_directory_from_yml
133
+ expect(fixtures_project.build_directory).to eq("/already/set")
134
+ end
135
+
136
+ it "should default the build_directory to derived data if nothing is provided in the yml" do
137
+ Slather::Project.stub(:yml).and_return({})
138
+ fixtures_project.configure_build_directory_from_yml
139
+ expect(fixtures_project.build_directory).to eq(fixtures_project.send(:derived_data_dir))
140
+ end
141
+ end
142
+
143
+ describe "#configure_ci_service_from_yml" do
144
+ it "should set the ci_service if it has been provided in the yml and has not already been set" do
145
+ Slather::Project.stub(:yml).and_return({"ci_service" => "some_service"})
146
+ fixtures_project.configure_ci_service_from_yml
147
+ expect(fixtures_project.ci_service).to eq(:some_service)
148
+ end
149
+
150
+ it "should not set the ci_service if it has already been set" do
151
+ Slather::Project.stub(:yml).and_return({"ci_service" => "some service"})
152
+ fixtures_project.ci_service = "already_set"
153
+ fixtures_project.configure_ci_service_from_yml
154
+ expect(fixtures_project.ci_service).to eq(:already_set)
155
+ end
156
+
157
+ it "should default the ci_service to :travis_ci if nothing is provided in the yml" do
158
+ Slather::Project.stub(:yml).and_return({})
159
+ fixtures_project.configure_ci_service_from_yml
160
+ expect(fixtures_project.ci_service).to eq(:travis_ci)
161
+ end
162
+ end
163
+
164
+ describe "#ci_service=" do
165
+ it "should set the ci_service as a symbol" do
166
+ fixtures_project.ci_service = "foobar"
167
+ expect(fixtures_project.ci_service).to eq(:foobar)
168
+ end
169
+ end
170
+
171
+ describe "#configure_coverage_service_from_yml" do
172
+ it "should set the coverage_service if it has been provided by the yml" do
173
+ Slather::Project.stub(:yml).and_return({"coverage_service" => "some_service"})
174
+ expect(fixtures_project).to receive(:coverage_service=).with("some_service")
175
+ fixtures_project.configure_coverage_service_from_yml
176
+ end
177
+
178
+ it "should default the coverage_service to :terminal if nothing is provided in the yml" do
179
+ Slather::Project.stub(:yml).and_return({})
180
+ expect(fixtures_project).to receive(:coverage_service=).with(:terminal)
181
+ fixtures_project.configure_coverage_service_from_yml
182
+ end
183
+
184
+ it "should not set the coverage_service if it has already been set" do
185
+ Slather::Project.stub(:yml).and_return({"coverage_service" => "some_service" })
186
+ fixtures_project.stub(:coverage_service).and_return("already set")
187
+ expect(fixtures_project).to_not receive(:coverage_service=)
188
+ fixtures_project.configure_coverage_service_from_yml
189
+ end
190
+ end
191
+
192
+ describe "#coverage_service=" do
193
+ it "should extend Slather::CoverageService::Coveralls and set coverage_service = :coveralls if given coveralls" do
194
+ expect(fixtures_project).to receive(:extend).with(Slather::CoverageService::Coveralls)
195
+ fixtures_project.coverage_service = "coveralls"
196
+ expect(fixtures_project.coverage_service).to eq(:coveralls)
197
+ end
198
+
199
+ it "should extend Slather::CoverageService::SimpleOutput and set coverage_service = :terminal if given terminal" do
200
+ expect(fixtures_project).to receive(:extend).with(Slather::CoverageService::SimpleOutput)
201
+ fixtures_project.coverage_service = "terminal"
202
+ expect(fixtures_project.coverage_service).to eq(:terminal)
203
+ end
204
+
205
+ it "should raise an exception if it does not recognize the coverage service" do
206
+ expect { fixtures_project.coverage_service = "xcode bots, lol" }.to raise_error(StandardError)
207
+ end
208
+ end
209
+
210
+ describe "#setup_for_coverage" do
211
+ it "should enable the correct flags to generate test coverage on all of the build_configurations build settings" do
212
+ fixtures_project.setup_for_coverage
213
+ fixtures_project.build_configurations.each do |build_configuration|
214
+ expect(build_configuration.build_settings["GCC_INSTRUMENT_PROGRAM_FLOW_ARCS"]).to eq("YES")
215
+ expect(build_configuration.build_settings["GCC_GENERATE_TEST_COVERAGE_FILES"]).to eq("YES")
216
+ end
217
+ end
218
+ end
219
+ end
@@ -0,0 +1,10 @@
1
+ require 'bundler/setup'
2
+ Bundler.setup
3
+
4
+ require 'slather'
5
+ require 'pry'
6
+
7
+ FIXTURES_PROJECT_PATH = File.join(File.dirname(__FILE__), 'fixtures/fixtures.xcodeproj')
8
+
9
+ RSpec.configure do |config|
10
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slather
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Larsen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-17 00:00:00.000000000 Z
11
+ date: 2014-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -110,10 +110,29 @@ files:
110
110
  - bin/slather
111
111
  - lib/slather.rb
112
112
  - lib/slather/coverage_file.rb
113
+ - lib/slather/coverage_service/coveralls.rb
114
+ - lib/slather/coverage_service/simple_output.rb
113
115
  - lib/slather/coveralls_coverage_file.rb
114
116
  - lib/slather/project.rb
115
117
  - lib/slather/version.rb
116
118
  - slather.gemspec
119
+ - spec/fixtures/fixtures.xcodeproj/project.pbxproj
120
+ - spec/fixtures/fixtures.xcodeproj/project.xcworkspace/contents.xcworkspacedata
121
+ - spec/fixtures/fixtures/Supporting Files/fixtures-Prefix.pch
122
+ - spec/fixtures/fixtures/fixtures.h
123
+ - spec/fixtures/fixtures/fixtures.m
124
+ - spec/fixtures/fixtures/more_files/peekaview.h
125
+ - spec/fixtures/fixtures/more_files/peekaview.m
126
+ - spec/fixtures/fixturesTests/Supporting Files/en.lproj/InfoPlist.strings
127
+ - spec/fixtures/fixturesTests/Supporting Files/fixturesTests-Info.plist
128
+ - spec/fixtures/fixturesTests/fixturesTests.m
129
+ - spec/fixtures/fixturesTests/peekaviewTests.m
130
+ - spec/slather/coverage_file_spec.rb
131
+ - spec/slather/coverage_service/coveralls_spec.rb
132
+ - spec/slather/coverage_service/simple_output_spec.rb
133
+ - spec/slather/fixtures.gcno
134
+ - spec/slather/project_spec.rb
135
+ - spec/spec_helper.rb
117
136
  homepage: https://github.com/marklarr/slather
118
137
  licenses:
119
138
  - MIT
@@ -138,5 +157,22 @@ rubygems_version: 2.2.2
138
157
  signing_key:
139
158
  specification_version: 4
140
159
  summary: Test coverage reports for Xcode projects
141
- test_files: []
160
+ test_files:
161
+ - spec/fixtures/fixtures.xcodeproj/project.pbxproj
162
+ - spec/fixtures/fixtures.xcodeproj/project.xcworkspace/contents.xcworkspacedata
163
+ - spec/fixtures/fixtures/Supporting Files/fixtures-Prefix.pch
164
+ - spec/fixtures/fixtures/fixtures.h
165
+ - spec/fixtures/fixtures/fixtures.m
166
+ - spec/fixtures/fixtures/more_files/peekaview.h
167
+ - spec/fixtures/fixtures/more_files/peekaview.m
168
+ - spec/fixtures/fixturesTests/Supporting Files/en.lproj/InfoPlist.strings
169
+ - spec/fixtures/fixturesTests/Supporting Files/fixturesTests-Info.plist
170
+ - spec/fixtures/fixturesTests/fixturesTests.m
171
+ - spec/fixtures/fixturesTests/peekaviewTests.m
172
+ - spec/slather/coverage_file_spec.rb
173
+ - spec/slather/coverage_service/coveralls_spec.rb
174
+ - spec/slather/coverage_service/simple_output_spec.rb
175
+ - spec/slather/fixtures.gcno
176
+ - spec/slather/project_spec.rb
177
+ - spec/spec_helper.rb
142
178
  has_rdoc: