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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 115113315811da74ef6a2d39bf2ed2f617d091c4
4
- data.tar.gz: d0b4058a1a1751da72781357e0325f3a0acf53d7
3
+ metadata.gz: aea59476a002df673244b9df077b9ec4c8064c5c
4
+ data.tar.gz: e33c1970119627924736028e691a7f90daea3d49
5
5
  SHA512:
6
- metadata.gz: 64bffbc0f06b6e17c9616c2eeeb7daf4bc010962637eb7f50c527d48964048a78266f9c25858f0797026032f5618280086503aff85e91c216e7138630601b285
7
- data.tar.gz: 32b3638d6c38aab842e68c4dda5d2d0e44f53661a9238a1db7b8ed11405a498b973ec3f02c7548aba66368d2d989f664a06ac97ae6ee87f4babbec5d35ea5f1d
6
+ metadata.gz: 85dae18b77ea9a3f4888a9083f0deb6a52d21b25439066abf61d1224da062541cbdb2e2f4e771e52521f2bfff0ee7c8e360a1008ab680775041e1141cc48064f
7
+ data.tar.gz: 761c6012b9305cfa2b18fe4525ec6b0ef2623e34f51b8b4199396603af15d08e4a11a36286174abbf7c8dfdd00a113e4dff9257288a61fb76512606ed88cd445
data/.travis.yml CHANGED
@@ -12,4 +12,3 @@ before_script:
12
12
  - sudo ./install_openstudio.sh $OPENSTUDIO_VERSION $OPENSTUDIO_SHA
13
13
  script:
14
14
  - rake
15
-
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
@@ -4,5 +4,3 @@ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in openstudio_measure_tester.gemspec
6
6
  gemspec
7
-
8
- gem 'rake'
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
- gem 'openstudio_measure_tester', '~> 0.1'
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:test`
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
- parse_results
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
- k, coverage_results = hash.first
64
- puts "Coverage results are of type #{k}"
65
-
66
- # find all measure names
67
- measure_names = []
68
- coverage_results['coverage'].each do |key, data|
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
- name = parts[-2]
72
- pp name
73
- measure_names << name
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
- measure_names.each do |measure_name|
78
- cn = ''
79
- results = coverage_results['coverage'].select { |key, _data| key.include? measure_name }
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
- results.each do |key, data|
126
+ measure_map[:files].each do |test_file|
127
+ cov_results_by_line = coverage_results['coverage'][test_file]
90
128
  fhash = {}
91
- fhash['name'] = key.partition(measure_name + '/').last
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
- data.delete(nil)
136
+ cov_results_by_line.delete(nil)
114
137
 
115
- cov = data.count { |x| x > 0 }
116
- fhash['percent_coverage'] = ((cov.to_f / data.size.to_f) * 100).round(2)
117
- fhash['missed_lines'] = data.size - cov
118
- fhash['relevant_lines'] = data.size
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[cn] = mhash
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
- measure_info = infoExtractor(measure, OpenStudio::Model::OptionalModel.new, OpenStudio::OptionalWorkspace.new)
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 "Could not find .git for measure(s), will not be able to report git information"
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
- FileUtils.mv "#{@results_dir}/test/html_reports", "#{@test_results_dir}/minitest/html_reports"
87
- FileUtils.mv "#{@results_dir}/test/reports", "#{@test_results_dir}/minitest/reports"
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'
@@ -28,7 +28,6 @@
28
28
 
29
29
  $coverage_started = false
30
30
  unless $coverage_started
31
- puts 'Coverage starting'
32
31
  require 'simplecov'
33
32
  SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new(
34
33
  [
@@ -27,5 +27,5 @@
27
27
  ########################################################################################################################
28
28
 
29
29
  module OpenStudioMeasureTester
30
- VERSION = '0.1.2'.freeze
30
+ VERSION = '0.1.3'.freeze
31
31
  end
@@ -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', '~> 1.16'
24
- spec.add_development_dependency 'rspec', '~> 3.0'
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', '~> 5.1.4'
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.0'
30
- spec.add_dependency 'minitest-reporters', '~> 1.1'
31
- spec.add_dependency 'rake', '~> 12.3'
32
- spec.add_dependency 'rubocop', '~> 0.52'
33
- spec.add_dependency 'rubocop-checkstyle_formatter', '~> 0.4'
34
- spec.add_dependency 'simplecov', '~> 0.15'
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.2
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-03-15 00:00:00.000000000 Z
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: '1.16'
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: '1.16'
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: '3.0'
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: '3.0'
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.4
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.4
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.0
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.0
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: '1.1'
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: '1.1'
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: '0.52'
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: '0.52'
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.15'
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.15'
166
+ version: '0.16'
167
167
  description: Testing framework for OpenStudio measures
168
168
  email:
169
169
  - nicholas.long@nrel.gov