openstudio_measure_tester 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +5 -2
- data/.rubocop.yml +1 -1
- data/.travis.yml +14 -7
- data/CHANGELOG.md +9 -0
- data/Gemfile +2 -2
- data/README.md +37 -4
- data/bin/run_measure_tests +22 -0
- data/lib/openstudio_measure_tester.rb +32 -3
- data/lib/openstudio_measure_tester/core_ext.rb +1 -1
- data/lib/openstudio_measure_tester/coverage.rb +11 -5
- data/lib/openstudio_measure_tester/dashboard.rb +5 -5
- data/lib/openstudio_measure_tester/minitest_result.rb +18 -27
- data/lib/openstudio_measure_tester/openstudio_style.rb +10 -10
- data/lib/openstudio_measure_tester/openstudio_testing_result.rb +62 -49
- data/lib/openstudio_measure_tester/rake_task.rb +32 -178
- data/lib/openstudio_measure_tester/rubocop_result.rb +68 -78
- data/lib/openstudio_measure_tester/runner.rb +270 -0
- data/lib/openstudio_measure_tester/version.rb +1 -1
- data/openstudio_measure_tester.gemspec +2 -4
- metadata +12 -35
- data/lib/openstudio_measure_tester/test_helper.rb +0 -43
@@ -0,0 +1,270 @@
|
|
1
|
+
module OpenStudioMeasureTester
|
2
|
+
# The runner is the workhorse that executes the tests. This class does not invoke Rake and can be run
|
3
|
+
# as a library method or as a CLI call
|
4
|
+
class Runner
|
5
|
+
# Initialize the runner
|
6
|
+
#
|
7
|
+
# @param base_dir [string] Base dir, measures will be recursively tested from this location. Results will be here too.
|
8
|
+
def initialize(base_dir)
|
9
|
+
@base_dir = base_dir
|
10
|
+
|
11
|
+
puts "Base dir is #{base_dir}"
|
12
|
+
end
|
13
|
+
|
14
|
+
# Create and return the location where the tests results need to be stored
|
15
|
+
def test_results_dir
|
16
|
+
dir = "#{@base_dir}/test_results"
|
17
|
+
FileUtils.mkdir_p dir unless Dir.exist? dir
|
18
|
+
|
19
|
+
return dir
|
20
|
+
end
|
21
|
+
|
22
|
+
# Run ERB to create the dashboard
|
23
|
+
def dashboard
|
24
|
+
template = OpenStudioMeasureTester::Dashboard.new(test_results_dir)
|
25
|
+
template.render
|
26
|
+
end
|
27
|
+
|
28
|
+
# Prepare the current directory and the root directory to remove old test results before running
|
29
|
+
# the new tests
|
30
|
+
#
|
31
|
+
# @param orig_results_dir [string] Location on where there results of minitest/coverage will be stored.
|
32
|
+
def pre_process_minitest(orig_results_dir)
|
33
|
+
puts "Current directory is #{@base_dir}"
|
34
|
+
puts "Pre-processed tests run data in #{orig_results_dir}"
|
35
|
+
puts "Test results will be stored in: #{test_results_dir}"
|
36
|
+
|
37
|
+
# There is a bunch of moving that needs to happen with coverage/minitest...
|
38
|
+
FileUtils.rm_rf "#{orig_results_dir}/coverage" if Dir.exist? "#{orig_results_dir}/coverage"
|
39
|
+
FileUtils.rm_rf "#{@base_dir}/coverage" if Dir.exist? "#{@base_dir}/coverage"
|
40
|
+
FileUtils.rm_rf "#{test_results_dir}/coverage" if Dir.exist? "#{test_results_dir}/coverage"
|
41
|
+
|
42
|
+
FileUtils.rm_rf "#{orig_results_dir}/minitest" if Dir.exist? "#{orig_results_dir}/minitest"
|
43
|
+
FileUtils.rm_rf "#{@base_dir}/minitest" if Dir.exist? "#{@base_dir}/minitest"
|
44
|
+
FileUtils.rm_rf "#{test_results_dir}/minitest" if Dir.exist? "#{test_results_dir}/minitest"
|
45
|
+
|
46
|
+
FileUtils.rm_rf "#{orig_results_dir}/test" if Dir.exist? "#{orig_results_dir}/test"
|
47
|
+
FileUtils.rm_rf "#{@base_dir}/test" if Dir.exist? "#{@base_dir}/test"
|
48
|
+
# remove the test directory if it is empty (size == 2 for . and ..)
|
49
|
+
if Dir.exist?("#{test_results_dir}/test") && Dir.entries("#{test_results_dir}/test").size == 2
|
50
|
+
FileUtils.rm_rf "#{test_results_dir}/test"
|
51
|
+
end
|
52
|
+
FileUtils.rm_rf "#{test_results_dir}/minitest" if Dir.exist? "#{test_results_dir}/minitest"
|
53
|
+
|
54
|
+
# Create the test_results directory to store all the results
|
55
|
+
return test_results_dir
|
56
|
+
end
|
57
|
+
|
58
|
+
# Rubocop stores the results (for now) in the test_results directory
|
59
|
+
def pre_process_rubocop
|
60
|
+
# copy over the .rubocop.yml file into the root directory of where this is running.
|
61
|
+
shared_rubocop_file = File.expand_path('../../.rubocop.yml', File.dirname(__FILE__))
|
62
|
+
dest_file = "#{File.expand_path(@base_dir)}/.rubocop.yml"
|
63
|
+
if shared_rubocop_file != dest_file
|
64
|
+
FileUtils.copy(shared_rubocop_file, dest_file)
|
65
|
+
end
|
66
|
+
|
67
|
+
puts "Current directory is #{@base_dir}"
|
68
|
+
# puts "Pre-processing tests run in #{@base_dir}"
|
69
|
+
puts "Test results will be stored in: #{test_results_dir}"
|
70
|
+
|
71
|
+
FileUtils.rm_rf "#{test_results_dir}/rubocop" if Dir.exist? "#{test_results_dir}/rubocop"
|
72
|
+
FileUtils.rm_rf "#{@base_dir}/rubocop" if Dir.exist? "#{@base_dir}/rubocop"
|
73
|
+
|
74
|
+
# Call the test_results dir to create the directory and return it as a string.
|
75
|
+
return test_results_dir
|
76
|
+
end
|
77
|
+
|
78
|
+
# Post process the various results and save them into the base_dir
|
79
|
+
#
|
80
|
+
# @param original_results_directory [string] Location of the results from coverag and minitest
|
81
|
+
def post_process_results(original_results_directory = nil)
|
82
|
+
puts " ========================= Starting Results Post Process ================================"
|
83
|
+
puts "Current directory: #{@base_dir}"
|
84
|
+
puts "Test results will be stored in: #{test_results_dir}"
|
85
|
+
|
86
|
+
results = OpenStudioMeasureTester::OpenStudioTestingResult.new(@base_dir, test_results_dir, original_results_directory)
|
87
|
+
results.save_results # one single file for dashboard
|
88
|
+
|
89
|
+
# call the create dashboard command now that we have results
|
90
|
+
dashboard
|
91
|
+
|
92
|
+
# return the results exit code
|
93
|
+
return results.exit_code
|
94
|
+
end
|
95
|
+
|
96
|
+
# OpenStudio style check preparation
|
97
|
+
#
|
98
|
+
# @param base_dir [string] Base directory where results will be stored. If called from rake it is the location of the Rakefile.
|
99
|
+
# @param measures_dir [string] The current working directory. If called from Rake it is the active directory.
|
100
|
+
def pre_process_style
|
101
|
+
puts "Current directory is #{@base_dir}"
|
102
|
+
puts "Test results will be stored in: #{test_results_dir}"
|
103
|
+
|
104
|
+
FileUtils.rm_rf "#{test_results_dir}/openstudio_style" if Dir.exist? "#{test_results_dir}/openstudio_style"
|
105
|
+
FileUtils.rm_rf "#{@base_dir}/openstudio_style" if Dir.exist? "#{@base_dir}/openstudio_style"
|
106
|
+
|
107
|
+
# Call the test_results dir to create the directory and return it as a string.
|
108
|
+
return test_results_dir
|
109
|
+
end
|
110
|
+
|
111
|
+
def run_style(skip_post_process)
|
112
|
+
puts " ========================= Starting Run for OpenStudio Style ================================"
|
113
|
+
pre_process_style
|
114
|
+
|
115
|
+
# Run the style tests
|
116
|
+
style = OpenStudioMeasureTester::OpenStudioStyle.new(test_results_dir, "#{@base_dir}/**/measure.rb")
|
117
|
+
style.save_results
|
118
|
+
|
119
|
+
if skip_post_process
|
120
|
+
return true
|
121
|
+
else
|
122
|
+
return post_process_results
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def run_rubocop(skip_post_process, auto_correct = false)
|
127
|
+
puts " ========================= Starting Run for Rubocop ================================"
|
128
|
+
pre_process_rubocop
|
129
|
+
|
130
|
+
rubocop_results_file = "#{test_results_dir}/rubocop/rubocop-results.xml"
|
131
|
+
# The documentation on running RuboCop from the Ruby source is not really helpful. I reversed engineered this
|
132
|
+
# by putting in puts statements in my local install rubocop gem to see how options were passed.
|
133
|
+
#
|
134
|
+
# https://github.com/bbatsov/rubocop/blob/9bdbaba9dcaa3dedad5e857b440d0d8988b806f5/lib/rubocop/runner.rb#L25
|
135
|
+
require 'rubocop/formatter/checkstyle_formatter'
|
136
|
+
options = {
|
137
|
+
# out and output_path do not actually save the results, has to be appended after the formatter.
|
138
|
+
# out: 'junk.xml',
|
139
|
+
# output_path: 'junk.xml',
|
140
|
+
auto_correct: auto_correct,
|
141
|
+
color: false,
|
142
|
+
formatters: ['simple', ['RuboCop::Formatter::CheckstyleFormatter', rubocop_results_file]]
|
143
|
+
}
|
144
|
+
|
145
|
+
# Load in the ruby config from the root directory
|
146
|
+
config_store = RuboCop::ConfigStore.new
|
147
|
+
# puts "Searching for .rubocop.yml recursively from #{@base_dir}"
|
148
|
+
config_store.for(@base_dir)
|
149
|
+
|
150
|
+
rc_runner = RuboCop::Runner.new(options, config_store)
|
151
|
+
rc_runner.run(["#{File.expand_path(@base_dir)}/**/*.rb"])
|
152
|
+
|
153
|
+
if skip_post_process
|
154
|
+
return true
|
155
|
+
else
|
156
|
+
return post_process_results
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
# The results of the coverage and minitest are stored in the root of the directory structure (if Rake)
|
161
|
+
def run_test(skip_post_process, original_results_directory, run_coverage = true)
|
162
|
+
puts " ========================= Starting Run for Minitest (and coverage) ============================"
|
163
|
+
# not sure what @base_dir has to be right now
|
164
|
+
pre_process_minitest(original_results_directory)
|
165
|
+
|
166
|
+
# Specify the minitest reporters
|
167
|
+
require 'minitest/reporters'
|
168
|
+
Minitest::Reporters.use! [
|
169
|
+
Minitest::Reporters::HtmlReporter.new,
|
170
|
+
Minitest::Reporters::JUnitReporter.new
|
171
|
+
]
|
172
|
+
|
173
|
+
if run_coverage
|
174
|
+
# Load in the coverage before loading the test files
|
175
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new(
|
176
|
+
[
|
177
|
+
SimpleCov::Formatter::HTMLFormatter
|
178
|
+
]
|
179
|
+
)
|
180
|
+
|
181
|
+
SimpleCov.start do
|
182
|
+
# Track all files inside of @base_dir
|
183
|
+
track_files "#{@base_dir}/**/*.rb"
|
184
|
+
|
185
|
+
use_merging false
|
186
|
+
|
187
|
+
# Exclude all files outside of @base_dir
|
188
|
+
root_filter = nil
|
189
|
+
add_filter do |src|
|
190
|
+
root_filter ||= /\A#{Regexp.escape(@base_dir + File::SEPARATOR)}/io
|
191
|
+
src.filename !~ root_filter
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
num_tests = 0
|
197
|
+
Dir["#{@base_dir}/**/*_Test.rb", "#{@base_dir}/**/*_test.rb"].uniq.each do |file|
|
198
|
+
puts "Loading file for testing: #{file}"
|
199
|
+
load File.expand_path(file)
|
200
|
+
num_tests += 1
|
201
|
+
end
|
202
|
+
|
203
|
+
if num_tests < 1
|
204
|
+
puts 'No tests found'
|
205
|
+
|
206
|
+
if run_coverage
|
207
|
+
# This doesn't seem to be working, it doesn't save off the .resultset.json.
|
208
|
+
begin
|
209
|
+
simplecov_exit_status = SimpleCov.end_now
|
210
|
+
rescue NoMethodError
|
211
|
+
# in case using some other version of SimpleCov
|
212
|
+
SimpleCov.set_exit_exception
|
213
|
+
exit_status = SimpleCov.exit_status_from_exception
|
214
|
+
SimpleCov.result.format!
|
215
|
+
simplecov_exit_status = SimpleCov.process_result(SimpleCov.result, exit_status)
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
if skip_post_process
|
220
|
+
return true
|
221
|
+
else
|
222
|
+
return post_process_results(original_results_directory)
|
223
|
+
end
|
224
|
+
else
|
225
|
+
puts "Inspected #{num_tests} tests"
|
226
|
+
end
|
227
|
+
|
228
|
+
# Now call run on the loaded files. Note that the Minitest.autorun method has been nulled out in the
|
229
|
+
# openstudio_measure_tester.rb file, so it will not run.
|
230
|
+
begin
|
231
|
+
Minitest.run ['--verbose']
|
232
|
+
rescue StandardError => exception
|
233
|
+
puts
|
234
|
+
puts '!!!!!!!!!!!!!!!!!!!!! Minitest Error Occurred !!!!!!!!!!!!!!!!!!!!!'
|
235
|
+
puts exception.message
|
236
|
+
puts exception.backtrace
|
237
|
+
puts '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
|
238
|
+
puts
|
239
|
+
end
|
240
|
+
|
241
|
+
# Shutdown SimpleCov and collect results
|
242
|
+
# This will set SimpleCov.running to false which will prevent from running again at_exit
|
243
|
+
if run_coverage
|
244
|
+
begin
|
245
|
+
simplecov_exit_status = SimpleCov.end_now
|
246
|
+
rescue NoMethodError
|
247
|
+
# in case using some other version of SimpleCov
|
248
|
+
SimpleCov.set_exit_exception
|
249
|
+
exit_status = SimpleCov.exit_status_from_exception
|
250
|
+
SimpleCov.result.format!
|
251
|
+
simplecov_exit_status = SimpleCov.process_result(SimpleCov.result, exit_status)
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
if skip_post_process
|
256
|
+
return true
|
257
|
+
else
|
258
|
+
return post_process_results(original_results_directory)
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
262
|
+
def run_all(original_results_directory)
|
263
|
+
# do not run coverage now since the at_exit is causing exceptions when running (GC?)
|
264
|
+
run_rubocop(true)
|
265
|
+
run_style(true)
|
266
|
+
run_test(true, original_results_directory, false)
|
267
|
+
post_process_results(original_results_directory)
|
268
|
+
end
|
269
|
+
end
|
270
|
+
end
|
@@ -6,7 +6,7 @@ require 'openstudio_measure_tester/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = 'openstudio_measure_tester'
|
8
8
|
spec.version = OpenStudioMeasureTester::VERSION
|
9
|
-
spec.authors = ['Nicholas Long']
|
9
|
+
spec.authors = ['Nicholas Long', 'Katherine Fleming', 'Daniel Macumber', 'Robert Guglielmetti']
|
10
10
|
spec.email = ['nicholas.long@nrel.gov']
|
11
11
|
|
12
12
|
spec.summary = 'Testing framework for OpenStudio measures'
|
@@ -20,11 +20,9 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
21
|
spec.require_paths = ['lib']
|
22
22
|
|
23
|
-
spec.add_development_dependency 'bundler', '1.16
|
23
|
+
spec.add_development_dependency 'bundler', '~> 1.16'
|
24
24
|
spec.add_development_dependency 'rspec', '3.7.0'
|
25
25
|
|
26
|
-
spec.add_dependency 'activesupport', '5.1.6'
|
27
|
-
spec.add_dependency 'ci_reporter_minitest', '1.0.0'
|
28
26
|
spec.add_dependency 'git', '1.3.0'
|
29
27
|
spec.add_dependency 'minitest', '5.4.3'
|
30
28
|
spec.add_dependency 'minitest-reporters', '1.2.0'
|
metadata
CHANGED
@@ -1,29 +1,32 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openstudio_measure_tester
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nicholas Long
|
8
|
+
- Katherine Fleming
|
9
|
+
- Daniel Macumber
|
10
|
+
- Robert Guglielmetti
|
8
11
|
autorequire:
|
9
12
|
bindir: exe
|
10
13
|
cert_chain: []
|
11
|
-
date: 2018-
|
14
|
+
date: 2018-06-13 00:00:00.000000000 Z
|
12
15
|
dependencies:
|
13
16
|
- !ruby/object:Gem::Dependency
|
14
17
|
name: bundler
|
15
18
|
requirement: !ruby/object:Gem::Requirement
|
16
19
|
requirements:
|
17
|
-
- -
|
20
|
+
- - "~>"
|
18
21
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.16
|
22
|
+
version: '1.16'
|
20
23
|
type: :development
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- -
|
27
|
+
- - "~>"
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.16
|
29
|
+
version: '1.16'
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: rspec
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,34 +41,6 @@ dependencies:
|
|
38
41
|
- - '='
|
39
42
|
- !ruby/object:Gem::Version
|
40
43
|
version: 3.7.0
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: activesupport
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - '='
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 5.1.6
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - '='
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 5.1.6
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: ci_reporter_minitest
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - '='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 1.0.0
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - '='
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: 1.0.0
|
69
44
|
- !ruby/object:Gem::Dependency
|
70
45
|
name: git
|
71
46
|
requirement: !ruby/object:Gem::Requirement
|
@@ -173,6 +148,7 @@ extra_rdoc_files: []
|
|
173
148
|
files:
|
174
149
|
- ".gitignore"
|
175
150
|
- ".rspec"
|
151
|
+
- ".rubocop-http---s3-amazonaws-com-openstudio-resources-styles-rubocop-yml"
|
176
152
|
- ".rubocop.yml"
|
177
153
|
- ".travis.yml"
|
178
154
|
- CHANGELOG.md
|
@@ -181,6 +157,7 @@ files:
|
|
181
157
|
- README.md
|
182
158
|
- Rakefile
|
183
159
|
- bin/console
|
160
|
+
- bin/run_measure_tests
|
184
161
|
- bin/setup
|
185
162
|
- dashboard/css/bootstrap-grid.css
|
186
163
|
- dashboard/css/bootstrap-grid.min.css
|
@@ -201,8 +178,8 @@ files:
|
|
201
178
|
- lib/openstudio_measure_tester/openstudio_testing_result.rb
|
202
179
|
- lib/openstudio_measure_tester/rake_task.rb
|
203
180
|
- lib/openstudio_measure_tester/rubocop_result.rb
|
181
|
+
- lib/openstudio_measure_tester/runner.rb
|
204
182
|
- lib/openstudio_measure_tester/templates/dashboard.html.erb
|
205
|
-
- lib/openstudio_measure_tester/test_helper.rb
|
206
183
|
- lib/openstudio_measure_tester/version.rb
|
207
184
|
- openstudio_measure_tester.gemspec
|
208
185
|
homepage: https://openstudio.nrel.gov
|
@@ -1,43 +0,0 @@
|
|
1
|
-
########################################################################################################################
|
2
|
-
# OpenStudio(R), Copyright (c) 2008-2018, Alliance for Sustainable Energy, LLC. All rights reserved.
|
3
|
-
#
|
4
|
-
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
5
|
-
# following conditions are met:
|
6
|
-
#
|
7
|
-
# (1) Redistributions of source code must retain the above copyright notice, this list of conditions and the following
|
8
|
-
# disclaimer.
|
9
|
-
#
|
10
|
-
# (2) Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
|
11
|
-
# following disclaimer in the documentation and/or other materials provided with the distribution.
|
12
|
-
#
|
13
|
-
# (3) Neither the name of the copyright holder nor the names of any contributors may be used to endorse or promote
|
14
|
-
# products derived from this software without specific prior written permission from the respective party.
|
15
|
-
#
|
16
|
-
# (4) Other than as required in clauses (1) and (2), distributions in any form of modifications or other derivative
|
17
|
-
# works may not use the "OpenStudio" trademark, "OS", "os", or any other confusingly similar designation without
|
18
|
-
# specific prior written permission from Alliance for Sustainable Energy, LLC.
|
19
|
-
#
|
20
|
-
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
21
|
-
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
22
|
-
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER, THE UNITED STATES GOVERNMENT, OR ANY CONTRIBUTORS BE LIABLE FOR
|
23
|
-
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
24
|
-
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
25
|
-
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
26
|
-
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
27
|
-
########################################################################################################################
|
28
|
-
|
29
|
-
$coverage_started = false
|
30
|
-
unless $coverage_started
|
31
|
-
require 'simplecov'
|
32
|
-
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new(
|
33
|
-
[
|
34
|
-
SimpleCov::Formatter::HTMLFormatter
|
35
|
-
]
|
36
|
-
)
|
37
|
-
|
38
|
-
SimpleCov.start
|
39
|
-
$coverage_started = true
|
40
|
-
end
|
41
|
-
|
42
|
-
require 'minitest/reporters'
|
43
|
-
Minitest::Reporters.use! [Minitest::Reporters::SpecReporter.new, Minitest::Reporters::HtmlReporter.new]
|