openstudio_measure_tester 0.1.2 → 0.1.3
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.
- checksums.yaml +4 -4
- data/.travis.yml +0 -1
- data/CHANGELOG.md +7 -0
- data/Gemfile +0 -2
- data/README.md +11 -17
- data/lib/openstudio_measure_tester/coverage.rb +64 -40
- data/lib/openstudio_measure_tester/openstudio_style.rb +12 -11
- data/lib/openstudio_measure_tester/openstudio_testing_result.rb +11 -4
- data/lib/openstudio_measure_tester/rake_task.rb +1 -1
- data/lib/openstudio_measure_tester/test_helper.rb +0 -1
- data/lib/openstudio_measure_tester/version.rb +1 -1
- data/openstudio_measure_tester.gemspec +11 -11
- metadata +38 -38
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aea59476a002df673244b9df077b9ec4c8064c5c
|
4
|
+
data.tar.gz: e33c1970119627924736028e691a7f90daea3d49
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 85dae18b77ea9a3f4888a9083f0deb6a52d21b25439066abf61d1224da062541cbdb2e2f4e771e52521f2bfff0ee7c8e360a1008ab680775041e1141cc48064f
|
7
|
+
data.tar.gz: 761c6012b9305cfa2b18fe4525ec6b0ef2623e34f51b8b4199396603af15d08e4a11a36286174abbf7c8dfdd00a113e4dff9257288a61fb76512606ed88cd445
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
# Version 0.1.3
|
2
|
+
|
3
|
+
* Catch when infoExtractor is unable to parse measure arguments
|
4
|
+
* Allow a measure name to include "test"
|
5
|
+
* Lock down versions of dependencies
|
6
|
+
* Add a broken measure to the test
|
7
|
+
|
1
8
|
# Version 0.1.2
|
2
9
|
|
3
10
|
* Do not crash when the current measure is not in a Git repository
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -11,13 +11,13 @@ The OpenStudio Measure Tester is a rubygem that exposes rake tasks for testing O
|
|
11
11
|
|
12
12
|
* Gemfile
|
13
13
|
```ruby
|
14
|
-
|
14
|
+
source 'https://rubygems.org'
|
15
|
+
gem 'openstudio_measure_tester'
|
15
16
|
|
16
|
-
# or
|
17
|
-
gem 'openstudio_measure_tester', github: 'NREL/openstudio_measure_tester_gem'
|
18
|
-
|
19
|
-
# or
|
17
|
+
# or for release on Github
|
18
|
+
gem 'openstudio_measure_tester', github: 'NREL/openstudio_measure_tester_gem', branch: 'develop'
|
20
19
|
|
20
|
+
# or for local development
|
21
21
|
gem 'openstudio_measure_tester', path: '../<path-to-checkout>'
|
22
22
|
```
|
23
23
|
|
@@ -30,22 +30,17 @@ The OpenStudio Measure Tester is a rubygem that exposes rake tasks for testing O
|
|
30
30
|
|
31
31
|
* Run `bundle update`
|
32
32
|
* run `bundle exec rake -T` to see the new tests that are available.
|
33
|
-
* In existing measure directory, run `bundle exec rake openstudio:
|
33
|
+
* In existing measure directory, run `bundle exec rake openstudio:all`
|
34
|
+
* Minitest, Coverage, Rubocop, and OpenStudio Style will run. The last message that appears to the screen is the location of the dashboard.
|
35
|
+
|
36
|
+
```
|
37
|
+
Open ./test_results/dashboard/index.html to view measure testing dashboard.
|
38
|
+
```
|
34
39
|
|
35
40
|
## Disclaimer
|
36
41
|
|
37
42
|
This project is under active development and will be changing significantly.
|
38
43
|
|
39
|
-
## Potential Issues
|
40
|
-
|
41
|
-
Currently, the project downloads the rubocops from the OpenStudio-resources Github repo and saves them to the gem's installation location. This may be write protected on some machines.
|
42
|
-
|
43
|
-
|
44
|
-
# TODOS
|
45
|
-
|
46
|
-
* Callbacks to gather results
|
47
|
-
* MiniTest results to JSON (currently only stdout)
|
48
|
-
|
49
44
|
# Testing in Docker
|
50
45
|
|
51
46
|
```bash
|
@@ -58,5 +53,4 @@ chmod +x install_openstudio.sh
|
|
58
53
|
./install_ruby.sh 2.2.4 b6eff568b48e0fda76e5a36333175df049b204e91217aa32a65153cc0cdcb761
|
59
54
|
./install_openstudio.sh 2.4.0 f58a3e1808
|
60
55
|
export RUBYLIB=/usr/Ruby
|
61
|
-
|
62
56
|
```
|
@@ -45,10 +45,27 @@ module OpenStudioMeasureTester
|
|
45
45
|
@total_missed_lines = 0
|
46
46
|
|
47
47
|
@measure_coverages = {}
|
48
|
+
end
|
49
|
+
|
50
|
+
def parse_class_name(measure_file)
|
51
|
+
# grab the class name out of the parts
|
52
|
+
unless File.exist? measure_file
|
53
|
+
# magically try to find the path name by dropping the first element of array. This is
|
54
|
+
# mainly needed for the testing framework as we are committing the .resultset.json which may
|
55
|
+
# have been generated by any user, esp since the file names are fully qualified in the .resultsset.json,
|
56
|
+
puts "Trying to determine the file path of unknown measure #{measure_file}"
|
57
|
+
measure_file = measure_file.split('/')[1..-1].join('/') until File.exist?(measure_file) || measure_file.split('/').empty?
|
58
|
+
end
|
48
59
|
|
49
|
-
|
60
|
+
# file should exist now. Read from the class name
|
61
|
+
File.readlines(measure_file).each do |line|
|
62
|
+
if (line.include? 'class') && line.split(' ')[0] == 'class'
|
63
|
+
return line.match(/class\s(.*)\s</)[1]
|
64
|
+
end
|
65
|
+
end
|
50
66
|
end
|
51
67
|
|
68
|
+
# Call this method to parse the results of the Coverage runs
|
52
69
|
def parse_results
|
53
70
|
file = "#{@path_to_results}/.resultset.json"
|
54
71
|
|
@@ -60,24 +77,44 @@ module OpenStudioMeasureTester
|
|
60
77
|
|
61
78
|
# Sometimes the coverage is RSpec, sometimes MiniTest. Depends if running
|
62
79
|
# tests in this Gem, or using this gem where MiniTest is already loaded.
|
63
|
-
|
64
|
-
puts "Coverage results are of type #{k}"
|
65
|
-
|
66
|
-
#
|
67
|
-
|
68
|
-
|
80
|
+
_, coverage_results = hash.first
|
81
|
+
# puts "Coverage results are of type #{k}"
|
82
|
+
|
83
|
+
# Find all measure names. Currently this is hardcoded to be the second to last element
|
84
|
+
# of the file path name of the measure.rb. For example the key in the resultset.json file is
|
85
|
+
# typically of the form:
|
86
|
+
# OpenStudio-measure-tester-gem/spec/test_measures/AddOverhangsByProjectionFactor/measure.rb"
|
87
|
+
# which results in the measure name being 'AddOverhangsByProjectionFactor'
|
88
|
+
# The measure names stores the mapping of the measure names to the key in the resultset.json
|
89
|
+
# This requires two passes through the list of files, the first to grab the measure.rb files, which has
|
90
|
+
# the classname, then to go through and grab all the other files that exist for the same measure class name.
|
91
|
+
# Two passes because the order of the files in .resultset.json is not guaranteed to have measure.rb first.
|
92
|
+
measure_maps = {}
|
93
|
+
coverage_results['coverage'].keys.each do |key|
|
69
94
|
parts = key.split('/')
|
70
95
|
if parts.last == 'measure.rb'
|
71
|
-
|
72
|
-
|
73
|
-
|
96
|
+
class_name = parse_class_name(key)
|
97
|
+
measure_maps[class_name] = {
|
98
|
+
class_name: class_name,
|
99
|
+
root_path: File.dirname(key),
|
100
|
+
files: [key]
|
101
|
+
}
|
74
102
|
end
|
75
103
|
end
|
76
104
|
|
77
|
-
|
78
|
-
|
79
|
-
|
105
|
+
# second pass, add other files.
|
106
|
+
coverage_results['coverage'].keys.each do |key|
|
107
|
+
next if key.split('/').last == 'measure.rb'
|
80
108
|
|
109
|
+
measure_maps.each do |m_key, m_value|
|
110
|
+
if key.include? m_value[:root_path]
|
111
|
+
measure_maps[m_key][:files] << key
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
# remap all this data to another format... seems like we could do this another way
|
117
|
+
measure_maps.each do |class_name, measure_map|
|
81
118
|
mhash = {}
|
82
119
|
mhash['total_lines'] = 0
|
83
120
|
mhash['relevant_lines'] = 0
|
@@ -86,53 +123,40 @@ module OpenStudioMeasureTester
|
|
86
123
|
mhash['percent_coverage'] = 0
|
87
124
|
mhash['files'] = []
|
88
125
|
|
89
|
-
|
126
|
+
measure_map[:files].each do |test_file|
|
127
|
+
cov_results_by_line = coverage_results['coverage'][test_file]
|
90
128
|
fhash = {}
|
91
|
-
|
92
|
-
fhash['total_lines'] = data.size
|
93
|
-
|
94
|
-
# get the class name
|
95
|
-
if fhash['name'] == 'measure.rb'
|
96
|
-
unless File.exist? key
|
97
|
-
# magically try to find the path name by dropping the first element of array
|
98
|
-
puts "Trying to determine the file path of unknown measure #{key}"
|
99
|
-
key = key.split('/')[1..-1].join('/') until File.exist?(key) || key.split('/').empty?
|
100
|
-
end
|
101
|
-
|
102
|
-
# file should exist now
|
103
|
-
File.readlines(key).each do |line|
|
104
|
-
if (line.include? 'class') && line.split(' ')[0] == 'class'
|
105
|
-
cn = line.split(' ')[1].gsub /_?[tT]est\z/, ''
|
106
|
-
break
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
129
|
+
# get the relative file path
|
110
130
|
|
131
|
+
fhash['name'] = test_file.gsub("#{measure_map[:root_path]}/", '')
|
132
|
+
fhash['total_lines'] = cov_results_by_line.size
|
111
133
|
mhash['total_lines'] += fhash['total_lines']
|
134
|
+
|
112
135
|
# remove nils from array
|
113
|
-
|
136
|
+
cov_results_by_line.delete(nil)
|
114
137
|
|
115
|
-
cov =
|
116
|
-
fhash['percent_coverage'] = ((cov.to_f /
|
117
|
-
fhash['missed_lines'] =
|
118
|
-
fhash['relevant_lines'] =
|
138
|
+
cov = cov_results_by_line.count {|x| x > 0}
|
139
|
+
fhash['percent_coverage'] = ((cov.to_f / cov_results_by_line.size.to_f) * 100).round(2)
|
140
|
+
fhash['missed_lines'] = cov_results_by_line.size - cov
|
141
|
+
fhash['relevant_lines'] = cov_results_by_line.size
|
119
142
|
fhash['covered_lines'] = cov
|
120
143
|
|
121
144
|
# measure-level totals
|
122
145
|
mhash['relevant_lines'] += fhash['relevant_lines']
|
123
146
|
mhash['covered_lines'] += fhash['covered_lines']
|
124
147
|
mhash['missed_lines'] += fhash['missed_lines']
|
125
|
-
|
126
148
|
mhash['files'] << fhash
|
127
149
|
end
|
150
|
+
|
128
151
|
mhash['percent_coverage'] = (mhash['covered_lines'].to_f / mhash['relevant_lines'].to_f * 100).round(2)
|
129
|
-
@measure_coverages[
|
152
|
+
@measure_coverages[class_name] = mhash
|
130
153
|
@total_lines += mhash['total_lines']
|
131
154
|
@total_relevant_lines += mhash['relevant_lines']
|
132
155
|
@total_covered_lines += mhash['covered_lines']
|
133
156
|
@total_missed_lines += mhash['missed_lines']
|
134
157
|
end
|
135
158
|
|
159
|
+
|
136
160
|
# pp @measure_coverages
|
137
161
|
lines = @total_relevant_lines # unnecessary but breaks formatting otherwise
|
138
162
|
# lines can be zero if coverage doesn't run correctly
|
@@ -74,13 +74,13 @@ module OpenStudioMeasureTester
|
|
74
74
|
type: :deprecated,
|
75
75
|
severity: :error,
|
76
76
|
file_type: :measure
|
77
|
-
|
78
|
-
regex: /require .openstudio_measure_tester\/test_helper./,
|
79
|
-
check_type: :if_missing,
|
80
|
-
message: "Must include 'require 'openstudio_measure_tester/test_helper'' in Test file to report coverage correctly.",
|
81
|
-
type: :syntax,
|
82
|
-
severity: :error,
|
83
|
-
file_type: :test
|
77
|
+
# }, {
|
78
|
+
# regex: /require .openstudio_measure_tester\/test_helper./,
|
79
|
+
# check_type: :if_missing,
|
80
|
+
# message: "Must include 'require 'openstudio_measure_tester/test_helper'' in Test file to report coverage correctly.",
|
81
|
+
# type: :syntax,
|
82
|
+
# severity: :error,
|
83
|
+
# file_type: :test
|
84
84
|
}, {
|
85
85
|
regex: /MiniTest::Unit::TestCase/,
|
86
86
|
check_type: :if_exists,
|
@@ -149,14 +149,17 @@ module OpenStudioMeasureTester
|
|
149
149
|
log_message("Could not find LICENSE.md in '#{measure_dir}'.", :general, :warning)
|
150
150
|
end
|
151
151
|
|
152
|
-
|
153
152
|
unless measure_missing
|
154
153
|
measure = OpenStudio::BCLMeasure.load(measure_dir)
|
155
154
|
if measure.empty?
|
156
155
|
log_message("Failed to load measure '#{measure_dir}'", :general, :error)
|
157
156
|
else
|
158
157
|
measure = measure.get
|
159
|
-
|
158
|
+
begin
|
159
|
+
measure_info = infoExtractor(measure, OpenStudio::Model::OptionalModel.new, OpenStudio::OptionalWorkspace.new)
|
160
|
+
rescue NameError => error
|
161
|
+
log_message("Unable to parse info from measure. Error: '#{error}'", :general, :error)
|
162
|
+
end
|
160
163
|
|
161
164
|
measure_hash = generate_measure_hash(measure_dir, measure, measure_info)
|
162
165
|
measure_hash.merge!(get_attributes_from_measure(measure_dir, measure_hash[:class_name]))
|
@@ -173,8 +176,6 @@ module OpenStudioMeasureTester
|
|
173
176
|
|
174
177
|
# pp @measure_messages
|
175
178
|
|
176
|
-
|
177
|
-
|
178
179
|
# calculate the info, warnings, errors and return the measure data
|
179
180
|
# TODO: break out the issues by file
|
180
181
|
return {
|
@@ -52,8 +52,8 @@ module OpenStudioMeasureTester
|
|
52
52
|
if !logs.empty?
|
53
53
|
sha = logs.first.sha
|
54
54
|
end
|
55
|
-
rescue StandardError => error
|
56
|
-
puts
|
55
|
+
rescue StandardError => error
|
56
|
+
puts 'Could not find .git for measure(s), will not be able to report git information'
|
57
57
|
end
|
58
58
|
|
59
59
|
# check if the results data already exist, and if so, then load the file now to keep the results
|
@@ -76,6 +76,7 @@ module OpenStudioMeasureTester
|
|
76
76
|
FileUtils.mv "#{@results_dir}/coverage", "#{@test_results_dir}/."
|
77
77
|
|
78
78
|
cov = OpenStudioMeasureTester::Coverage.new("#{@test_results_dir}/coverage")
|
79
|
+
cov.parse_results
|
79
80
|
@results['coverage'] = cov.to_hash
|
80
81
|
end
|
81
82
|
|
@@ -83,8 +84,14 @@ module OpenStudioMeasureTester
|
|
83
84
|
if Dir.exist?("#{@results_dir}/test/html_reports") || Dir.exist?("#{@results_dir}/test/reports")
|
84
85
|
FileUtils.rm_rf "#{@test_results_dir}/minitest" if Dir.exist? "#{@test_results_dir}/minitest"
|
85
86
|
FileUtils.mkdir_p "#{@test_results_dir}/minitest"
|
86
|
-
|
87
|
-
|
87
|
+
|
88
|
+
if Dir.exist?("#{@results_dir}/test/html_reports")
|
89
|
+
FileUtils.mv "#{@results_dir}/test/html_reports", "#{@test_results_dir}/minitest/html_reports"
|
90
|
+
end
|
91
|
+
|
92
|
+
if Dir.exist?("#{@results_dir}/test/reports")
|
93
|
+
FileUtils.mv "#{@results_dir}/test/reports", "#{@test_results_dir}/minitest/reports"
|
94
|
+
end
|
88
95
|
|
89
96
|
# Delete the test folder if it is empty
|
90
97
|
FileUtils.rm_rf "#{@results_dir}/test" if Dir.entries("#{@results_dir}/test").size == 2
|
@@ -214,7 +214,7 @@ module OpenStudioMeasureTester
|
|
214
214
|
end
|
215
215
|
|
216
216
|
desc 'Run RuboCop Auto Correct on Measures'
|
217
|
-
task auto_correct: 'openstudio:rubocop_core:auto_correct'
|
217
|
+
task auto_correct: ['openstudio:prepare_rubocop', 'openstudio:rubocop_core:auto_correct']
|
218
218
|
end
|
219
219
|
|
220
220
|
desc 'Run RuboCop on Measures'
|
@@ -20,16 +20,16 @@ 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', '
|
24
|
-
spec.add_development_dependency 'rspec', '
|
23
|
+
spec.add_development_dependency 'bundler', '1.16.1'
|
24
|
+
spec.add_development_dependency 'rspec', '3.7.0'
|
25
25
|
|
26
|
-
spec.add_dependency 'activesupport', '
|
27
|
-
spec.add_dependency 'ci_reporter_minitest', '
|
28
|
-
spec.add_dependency 'git', '
|
29
|
-
spec.add_dependency 'minitest', '
|
30
|
-
spec.add_dependency 'minitest-reporters', '
|
31
|
-
spec.add_dependency 'rake', '
|
32
|
-
spec.add_dependency 'rubocop', '
|
33
|
-
spec.add_dependency 'rubocop-checkstyle_formatter', '
|
34
|
-
spec.add_dependency 'simplecov', '
|
26
|
+
spec.add_dependency 'activesupport', '5.1.5'
|
27
|
+
spec.add_dependency 'ci_reporter_minitest', '1.0.0'
|
28
|
+
spec.add_dependency 'git', '1.3.0'
|
29
|
+
spec.add_dependency 'minitest', '5.4.3'
|
30
|
+
spec.add_dependency 'minitest-reporters', '1.1.19'
|
31
|
+
spec.add_dependency 'rake', '12.3'
|
32
|
+
spec.add_dependency 'rubocop', '0.53.0'
|
33
|
+
spec.add_dependency 'rubocop-checkstyle_formatter', '0.4'
|
34
|
+
spec.add_dependency 'simplecov', '0.16'
|
35
35
|
end
|
metadata
CHANGED
@@ -1,169 +1,169 @@
|
|
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.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nicholas Long
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.16.1
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 1.16.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 3.7.0
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 3.7.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: activesupport
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 5.1.
|
47
|
+
version: 5.1.5
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 5.1.
|
54
|
+
version: 5.1.5
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: ci_reporter_minitest
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - '='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 1.0.0
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - '='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 1.0.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: git
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - '='
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: 1.3.0
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - '='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 1.3.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: minitest
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - '='
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 5.4.
|
89
|
+
version: 5.4.3
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - '='
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 5.4.
|
96
|
+
version: 5.4.3
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: minitest-reporters
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - '='
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
103
|
+
version: 1.1.19
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - '='
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
110
|
+
version: 1.1.19
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: rake
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - '='
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '12.3'
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - '='
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '12.3'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: rubocop
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- -
|
129
|
+
- - '='
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
131
|
+
version: 0.53.0
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- -
|
136
|
+
- - '='
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
138
|
+
version: 0.53.0
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: rubocop-checkstyle_formatter
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- -
|
143
|
+
- - '='
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: '0.4'
|
146
146
|
type: :runtime
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- -
|
150
|
+
- - '='
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0.4'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: simplecov
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
|
-
- -
|
157
|
+
- - '='
|
158
158
|
- !ruby/object:Gem::Version
|
159
|
-
version: '0.
|
159
|
+
version: '0.16'
|
160
160
|
type: :runtime
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
|
-
- -
|
164
|
+
- - '='
|
165
165
|
- !ruby/object:Gem::Version
|
166
|
-
version: '0.
|
166
|
+
version: '0.16'
|
167
167
|
description: Testing framework for OpenStudio measures
|
168
168
|
email:
|
169
169
|
- nicholas.long@nrel.gov
|