openstudio_measure_tester 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|