openstudio_measure_tester 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/.travis.yml +5 -11
- data/CHANGELOG.md +5 -0
- data/README.md +21 -18
- data/dashboard/css/dashboard.css +2 -2
- data/dashboard/index.html +1 -19
- data/lib/openstudio_measure_tester.rb +24 -21
- data/lib/openstudio_measure_tester/minitest_result.rb +83 -34
- data/lib/openstudio_measure_tester/openstudio_style.rb +15 -2
- data/lib/openstudio_measure_tester/openstudio_testing_result.rb +11 -8
- data/lib/openstudio_measure_tester/runner.rb +73 -7
- data/lib/openstudio_measure_tester/templates/dashboard.html.erb +130 -15
- data/lib/openstudio_measure_tester/version.rb +1 -1
- data/openstudio_measure_tester.gemspec +8 -2
- metadata +16 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 114965f771ab5429ff6e0a47f9469143723f957a
|
4
|
+
data.tar.gz: 6880af89a1126f2474f503722ce73746074bf04d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 65c48c6e8ebe186696f5a2322dde5899e84bacfadd95510b75cf03e8982bee6137f9ea4d2e36fabb7b103e9211cedb8d228c70ffe6a7f17cc16fadd850299fa2
|
7
|
+
data.tar.gz: aeb836feeafb27e169a38e1569b0f2fe606ba8df68d8133dd2c29627df23b5084d70f8245af706c09aba56621342b30fcb1192477bf2fe37887cc9e162090688
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,21 +1,15 @@
|
|
1
1
|
sudo: true
|
2
2
|
language: ruby
|
3
3
|
rvm:
|
4
|
-
- 2.2.4
|
4
|
+
- 2.2.4
|
5
5
|
matrix:
|
6
6
|
include:
|
7
7
|
- env: OPENSTUDIO_VERSION=2.4.0 && OPENSTUDIO_SHA=f58a3e1808 && RUBYLIB=/usr/Ruby
|
8
8
|
- env: OPENSTUDIO_VERSION=2.5.1 && OPENSTUDIO_SHA=4f268e2854 && RUBYLIB=/usr/Ruby
|
9
9
|
before_install: gem install bundler -v 1.16.2
|
10
10
|
before_script:
|
11
|
-
- curl -sLO https://raw.githubusercontent.com/NREL/OpenStudio-server/develop/docker/deployment/scripts/install_openstudio.sh
|
12
|
-
- chmod +x install_openstudio.sh
|
13
|
-
- sudo ./install_openstudio.sh $OPENSTUDIO_VERSION $OPENSTUDIO_SHA
|
11
|
+
- curl -sLO https://raw.githubusercontent.com/NREL/OpenStudio-server/develop/docker/deployment/scripts/install_openstudio.sh
|
12
|
+
- chmod +x install_openstudio.sh
|
13
|
+
- sudo ./install_openstudio.sh $OPENSTUDIO_VERSION $OPENSTUDIO_SHA
|
14
14
|
script:
|
15
|
-
- bundle exec rake
|
16
|
-
deploy:
|
17
|
-
- provider: rubygems
|
18
|
-
api_key:
|
19
|
-
secure: IOYqPDXgaX5tZgsaeuSs2Q5hUry0l2RHrXDmuEeu7SElLDQSXS2z8c43eHg6GphtIho9NZgonXeCe1QoXb/GdHsyv2Up1XfaTtPkf7LHJo/zYPF7Yjc1mjGpKRPfk1srH8nfb6w9w7zjFlhk73a/Vh26BvdRCXqAA8W72d0ur2p8OTlGSYjcgLihWI13sSKrfHjTRXhOpv6gkziaY2pmvNWeeYdqOD3CpvlMDAMkHY/KptksaqWdBAT9Jr4gIfAGeGbKzye0OmBBrwMV4n/4KZqNNDyjiGYGoSbOhVEsAOHbeJz6IOoC93ICQi/nLuWBw+T8do79X2/GBIj2/N7eaEo4CcYsxMS0JX+dE4yL+OzQOFkDenq0WAEB7JjtBVW3sBHAIRGO2o2Cma6Ga5+86oSD0f5lAvnhiCejA1Fy9X5pnIMsk1zWlPLydPX4TwIm10JBaRLut+MFq0tL5tJunyIwlZnMgVofVdKYZHS7fVOvqSTQhM+iA0Gx5l7bKZQjpO3m91j14pKqdJij0PJ4oxy7ozc38YSUL85NKXnbf2KwnYVxMGz4yBrSalzMjftu6WfCM8liDTb0ACHby56KbPrlVlixJrrJIefZCLqaHtqL2lLlyVV36EtRbNl3It7DrOQ21HK3raOEuSxht3uuTu9FIdTx0TKraJUyToE6gbw=
|
20
|
-
on:
|
21
|
-
tags: true
|
15
|
+
- bundle exec rake
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -43,26 +43,26 @@ The OpenStudio Measure Tester is a rubygem that exposes rake tasks for testing O
|
|
43
43
|
|
44
44
|
* Require the OpenStudio-measure-tester gem
|
45
45
|
|
46
|
-
```ruby
|
47
|
-
require 'openstudio_measure_tester'
|
48
|
-
measures_dir = 'spec/test_measures/AddOverhangsByProjectionFactor'
|
49
|
-
# all measures (recursively) from measures_dir will be tested
|
50
|
-
|
51
|
-
runner = OpenStudioMeasureTester::Runner.new(measures_dir)
|
46
|
+
```ruby
|
47
|
+
require 'openstudio_measure_tester'
|
48
|
+
measures_dir = 'spec/test_measures/AddOverhangsByProjectionFactor'
|
49
|
+
# all measures (recursively) from measures_dir will be tested
|
52
50
|
|
53
|
-
|
54
|
-
base_dir = Dir.pwd
|
55
|
-
|
56
|
-
result = runner.run_all(base_dir)
|
57
|
-
puts result
|
58
|
-
# result will be 0 or 1, 0=success, 1=failure
|
51
|
+
runner = OpenStudioMeasureTester::Runner.new(measures_dir)
|
59
52
|
|
60
|
-
|
53
|
+
# base_dir is needed for coverage results as they are written to disk on the at_exit calls
|
54
|
+
base_dir = Dir.pwd
|
61
55
|
|
62
|
-
runner.
|
56
|
+
result = runner.run_all(base_dir)
|
57
|
+
puts result
|
58
|
+
# result will be 0 or 1, 0=success, 1=failure
|
63
59
|
|
64
|
-
runner.
|
65
|
-
|
60
|
+
runner.run_style(false)
|
61
|
+
|
62
|
+
runner.run_test(false, base_dir)
|
63
|
+
|
64
|
+
runner.run_rubocop(false)
|
65
|
+
```
|
66
66
|
|
67
67
|
* Results will be saved into the run directory (measures_dir from above).
|
68
68
|
|
@@ -85,5 +85,8 @@ export RUBYLIB=/usr/Ruby
|
|
85
85
|
|
86
86
|
# Releasing
|
87
87
|
|
88
|
-
|
89
|
-
|
88
|
+
* Update change log
|
89
|
+
* Update version in `/lib/openstudio_measure_tester/version.rb`
|
90
|
+
* Merge down to master
|
91
|
+
* Release via github
|
92
|
+
* run `rake release` from master
|
data/dashboard/css/dashboard.css
CHANGED
@@ -107,7 +107,7 @@ body {
|
|
107
107
|
.donut .status {
|
108
108
|
display: block;
|
109
109
|
position: absolute;
|
110
|
-
top:
|
110
|
+
top: 43%;
|
111
111
|
left: 50%;
|
112
112
|
width: 30%;
|
113
113
|
height: 0;
|
@@ -125,7 +125,7 @@ body {
|
|
125
125
|
.donut .adjust-pos {
|
126
126
|
|
127
127
|
padding-top: 10%;
|
128
|
-
margin-top: -
|
128
|
+
margin-top: -20%;
|
129
129
|
|
130
130
|
}
|
131
131
|
|
data/dashboard/index.html
CHANGED
@@ -33,22 +33,14 @@
|
|
33
33
|
<div class="card-block">
|
34
34
|
<div class="card-body">
|
35
35
|
<h5 class="card-title">Tests</h5>
|
36
|
-
|
37
|
-
|
38
36
|
<div class="row pt-5">
|
39
|
-
|
40
37
|
<div class="col-sm-4 offset-sm-1 badge-height badge badge-success"><span class='large-text'>0</span></div>
|
41
|
-
|
42
|
-
|
43
38
|
<div class="col-sm-4 offset-sm-2 badge-height badge badge-success"><span class='large-text'>0</span></div>
|
44
|
-
|
45
39
|
</div>
|
46
40
|
<div class="row">
|
47
41
|
<div class="col-sm-4 offset-sm-1 center-text"><span class="badge-text">Failures</span></div>
|
48
42
|
<div class="col-sm-4 offset-sm-2 center-text"><span class="badge-text">Errors</span></div>
|
49
43
|
</div>
|
50
|
-
|
51
|
-
|
52
44
|
</div>
|
53
45
|
</div>
|
54
46
|
</div>
|
@@ -59,16 +51,12 @@
|
|
59
51
|
<div class="card-body">
|
60
52
|
<h5 class="card-title">OpenStudio Style</h5>
|
61
53
|
<div>
|
62
|
-
|
63
54
|
<div class="row pt-5">
|
64
|
-
|
65
55
|
<div class="col-sm-4 offset-sm-4 badge-height badge badge-danger"><span class='large-text'>34</span></div>
|
66
|
-
|
67
56
|
</div>
|
68
57
|
<div class="row">
|
69
58
|
<div class="col-sm-4 offset-sm-4 center-text"><span class="badge-text">Errors</span></div>
|
70
59
|
</div>
|
71
|
-
|
72
60
|
</div>
|
73
61
|
</div>
|
74
62
|
</div>
|
@@ -115,16 +103,11 @@
|
|
115
103
|
<tr>
|
116
104
|
<td>ChangeBuildingLocation</td>
|
117
105
|
<td>
|
118
|
-
|
119
106
|
<span class="badge badge-danger">0</span>
|
120
107
|
<span class="badge badge-warning">0</span>
|
121
|
-
|
122
108
|
</td>
|
123
109
|
<td>
|
124
|
-
|
125
|
-
<span class="badge badge-danger">6</span>
|
126
|
-
|
127
|
-
|
110
|
+
<span class="badge badge-danger">6</span>
|
128
111
|
</td>
|
129
112
|
<td></td>
|
130
113
|
<td>79.69 %</td>
|
@@ -552,7 +535,6 @@
|
|
552
535
|
size(true);
|
553
536
|
|
554
537
|
}());
|
555
|
-
|
556
538
|
</script>
|
557
539
|
</body>
|
558
540
|
</html>
|
@@ -29,11 +29,16 @@
|
|
29
29
|
require 'openstudio'
|
30
30
|
|
31
31
|
require 'pp'
|
32
|
-
require 'git'
|
33
32
|
require 'rexml/document'
|
34
33
|
require 'minitest'
|
35
34
|
require 'simplecov'
|
36
35
|
|
36
|
+
begin
|
37
|
+
require 'git'
|
38
|
+
rescue LoadError => error
|
39
|
+
puts 'Could not load git, will not be able to report git information'
|
40
|
+
end
|
41
|
+
|
37
42
|
# override the default at_exit call
|
38
43
|
SimpleCov.at_exit do
|
39
44
|
end
|
@@ -44,17 +49,17 @@ def Minitest.autorun; end
|
|
44
49
|
# Rubocop loads a lot of objects, anyway to minimize would be nice.
|
45
50
|
require 'rubocop'
|
46
51
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
52
|
+
require_relative 'openstudio_measure_tester/core_ext'
|
53
|
+
require_relative 'openstudio_measure_tester/version'
|
54
|
+
require_relative 'openstudio_measure_tester/openstudio_style'
|
55
|
+
require_relative 'openstudio_measure_tester/minitest_result'
|
56
|
+
require_relative 'openstudio_measure_tester/coverage'
|
57
|
+
require_relative 'openstudio_measure_tester/rubocop_result'
|
58
|
+
require_relative 'openstudio_measure_tester/openstudio_testing_result'
|
59
|
+
require_relative 'openstudio_measure_tester/dashboard'
|
60
|
+
require_relative 'openstudio_measure_tester/runner'
|
56
61
|
|
57
|
-
|
62
|
+
require_relative 'openstudio_measure_tester/rake_task'
|
58
63
|
|
59
64
|
# Set the encoding to UTF-8. OpenStudio Docker images do not have this set by default
|
60
65
|
Encoding.default_external = Encoding::UTF_8
|
@@ -64,15 +69,13 @@ module OpenStudioMeasureTester
|
|
64
69
|
# No action here. Most of this will be rake_tasks at the moment.
|
65
70
|
end
|
66
71
|
|
67
|
-
|
68
72
|
class Minitest::Test
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
73
|
+
def teardown
|
74
|
+
before = ObjectSpace.count_objects
|
75
|
+
GC.start
|
76
|
+
after = ObjectSpace.count_objects
|
77
|
+
delta = {}
|
78
|
+
before.each { |k, v| delta[k] = v - after[k] if after.key? k }
|
79
|
+
puts "GC Delta: #{delta}"
|
80
|
+
end
|
77
81
|
end
|
78
|
-
|
@@ -35,6 +35,7 @@ module OpenStudioMeasureTester
|
|
35
35
|
attr_reader :total_failures
|
36
36
|
attr_reader :total_skipped
|
37
37
|
attr_reader :total_tests
|
38
|
+
attr_reader :total_compatibility_errors
|
38
39
|
attr_reader :measure_results
|
39
40
|
attr_reader :summary
|
40
41
|
|
@@ -46,6 +47,9 @@ module OpenStudioMeasureTester
|
|
46
47
|
@total_errors = 0
|
47
48
|
@total_failures = 0
|
48
49
|
@total_skipped = 0
|
50
|
+
@total_compatibility_errors = 0
|
51
|
+
@total_loaded = true
|
52
|
+
@total_load_errors = []
|
49
53
|
|
50
54
|
@measure_results = {}
|
51
55
|
@summary = {}
|
@@ -55,37 +59,76 @@ module OpenStudioMeasureTester
|
|
55
59
|
end
|
56
60
|
|
57
61
|
def parse_results
|
58
|
-
|
59
|
-
|
60
|
-
|
62
|
+
# use the compatibility file to find the measure name and other files
|
63
|
+
Dir["#{@path_to_results}/compatibility/*.json"].each do |file|
|
64
|
+
puts "Parsing compatibility report #{file}"
|
65
|
+
json_data = JSON.parse(File.read(file), symbolize_names: true)
|
61
66
|
|
62
|
-
#
|
63
|
-
next
|
64
|
-
|
65
|
-
measure_name = file.split('/')[-1].split('.')[0].split('-')[1].gsub /-?[tT]est\z/, ''
|
67
|
+
# Test if the measure has already been parse, if so, then continue
|
68
|
+
next if @measure_results.keys.include? json_data[:measure_name]
|
66
69
|
|
67
70
|
mhash = {}
|
68
|
-
mhash[
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
mhash['measure_skipped'] = testsuite_element.attributes['skipped'].to_i
|
71
|
+
mhash[:tested_class] = json_data[:measure_name]
|
72
|
+
mhash[:openstudio_version] = json_data[:openstudio_version]
|
73
|
+
mhash[:measure_min_version] = json_data[:measure_min_version]
|
74
|
+
mhash[:measure_max_version] = json_data[:measure_max_version]
|
75
|
+
mhash[:loaded] = json_data[:loaded]
|
76
|
+
if json_data[:load_errors].nil?
|
77
|
+
mhash[:load_errors] = []
|
78
|
+
else
|
79
|
+
mhash[:load_errors] = json_data[:load_errors]
|
80
|
+
end
|
79
81
|
|
80
|
-
|
82
|
+
# initialize a bunch of data
|
83
|
+
mhash[:measure_compatibility_errors] = json_data[:compatible] ? 0 : 1
|
84
|
+
mhash[:measure_tests] = 0
|
85
|
+
mhash[:measure_assertions] = 0
|
86
|
+
mhash[:measure_errors] = 0
|
87
|
+
mhash[:measure_failures] = 0
|
88
|
+
mhash[:measure_skipped] = 0
|
89
|
+
mhash[:issues] = {
|
90
|
+
errors: [],
|
91
|
+
failures: [],
|
92
|
+
skipped: [],
|
93
|
+
compatibility_error: json_data[:compatible] ? 0 : 1
|
94
|
+
}
|
95
|
+
|
96
|
+
# find the report XML - if it exists
|
97
|
+
report_xmls = Dir["#{@path_to_results}/reports/TEST-#{json_data[:measure_name]}*.xml"]
|
98
|
+
if report_xmls.count == 1
|
99
|
+
puts "Parsing minitest report #{report_xmls[0]}"
|
100
|
+
doc = REXML::Document.new(File.open(report_xmls[0])).root
|
101
|
+
|
102
|
+
if doc
|
103
|
+
# Note: only 1 failure and 1 error possible per test
|
104
|
+
testsuite_element = doc.elements['testsuite']
|
105
|
+
errors, failures, skipped = parse_measure(testsuite_element)
|
106
|
+
|
107
|
+
mhash[:measure_tests] = testsuite_element.attributes['tests'].to_i
|
108
|
+
mhash[:measure_assertions] = testsuite_element.attributes['assertions'].to_i
|
109
|
+
mhash[:measure_errors] = testsuite_element.attributes['errors'].to_i
|
110
|
+
mhash[:measure_failures] = testsuite_element.attributes['failures'].to_i
|
111
|
+
mhash[:measure_skipped] = testsuite_element.attributes['skipped'].to_i
|
112
|
+
|
113
|
+
mhash[:issues][:errors] = errors
|
114
|
+
mhash[:issues][:failures] = failures
|
115
|
+
mhash[:issues][:skipped] = skipped
|
116
|
+
end
|
117
|
+
else
|
118
|
+
# There are more than one XMLs or there are no XML
|
119
|
+
# No XMLs is typically because the measure was not applicable to then version of OpenStudio
|
120
|
+
end
|
81
121
|
|
82
|
-
@measure_results[
|
122
|
+
@measure_results[mhash[:tested_class]] = mhash
|
83
123
|
|
84
|
-
@total_tests += mhash[
|
85
|
-
@total_assertions += mhash[
|
86
|
-
@total_errors += mhash[
|
87
|
-
@total_failures += mhash[
|
88
|
-
@total_skipped += mhash[
|
124
|
+
@total_tests += mhash[:measure_tests]
|
125
|
+
@total_assertions += mhash[:measure_assertions]
|
126
|
+
@total_errors += mhash[:measure_errors]
|
127
|
+
@total_failures += mhash[:measure_failures]
|
128
|
+
@total_skipped += mhash[:measure_skipped]
|
129
|
+
@total_compatibility_errors += mhash[:measure_compatibility_errors]
|
130
|
+
@total_loaded = @total_loaded && mhash[:loaded]
|
131
|
+
@total_load_errors.concat(mhash[:load_errors])
|
89
132
|
end
|
90
133
|
|
91
134
|
@error_status = true if @total_errors > 0
|
@@ -94,14 +137,17 @@ module OpenStudioMeasureTester
|
|
94
137
|
def to_file
|
95
138
|
# save as a json and have something else parse it/plot it.
|
96
139
|
|
97
|
-
@summary[
|
98
|
-
@summary[
|
99
|
-
@summary[
|
100
|
-
@summary[
|
101
|
-
@summary[
|
102
|
-
@summary[
|
103
|
-
@summary[
|
104
|
-
|
140
|
+
@summary[:test_directory] = @path_to_results
|
141
|
+
@summary[:total_tests] = @total_tests
|
142
|
+
@summary[:total_assertions] = @total_assertions
|
143
|
+
@summary[:total_errors] = @total_errors
|
144
|
+
@summary[:total_failures] = @total_failures
|
145
|
+
@summary[:total_skipped] = @total_skipped
|
146
|
+
@summary[:total_compatibility_errors] = @total_compatibility_errors
|
147
|
+
@summary[:total_loaded] = @total_loaded
|
148
|
+
@summary[:total_load_errors] = @total_load_errors
|
149
|
+
@summary[:by_measure] = @measure_results
|
150
|
+
|
105
151
|
# pp @summary
|
106
152
|
|
107
153
|
FileUtils.mkdir "#{@path_to_results}/" unless Dir.exist? "#{@path_to_results}/"
|
@@ -115,16 +161,19 @@ module OpenStudioMeasureTester
|
|
115
161
|
def parse_measure(testsuite_element)
|
116
162
|
errors = []
|
117
163
|
failures = []
|
164
|
+
skipped = []
|
118
165
|
|
119
166
|
testsuite_element.elements.each('testcase') do |testcase|
|
120
167
|
if testcase.elements['error']
|
121
168
|
errors << testcase.elements['error']
|
122
169
|
elsif testcase.elements['failure']
|
123
170
|
failures << testcase.elements['failure']
|
171
|
+
elsif testcase.elements['skipped']
|
172
|
+
skipped << 'Skipped test: ' + testcase.elements['skipped'].attributes['type']
|
124
173
|
end
|
125
174
|
end
|
126
175
|
|
127
|
-
return errors, failures
|
176
|
+
return errors, failures, skipped
|
128
177
|
end
|
129
178
|
end
|
130
179
|
end
|
@@ -39,6 +39,20 @@ module OpenStudioMeasureTester
|
|
39
39
|
type: :deprecated,
|
40
40
|
severity: :error,
|
41
41
|
file_type: :measure
|
42
|
+
}, {
|
43
|
+
regex: /OpenStudio::Ruleset::WorkspaceUserScript/,
|
44
|
+
check_type: :if_exists,
|
45
|
+
message: 'OpenStudio::Ruleset::WorkspaceUserScript is deprecated, use OpenStudio::Measure::EnergyPlusMeasure instead.',
|
46
|
+
type: :deprecated,
|
47
|
+
severity: :error,
|
48
|
+
file_type: :measure
|
49
|
+
}, {
|
50
|
+
regex: /OpenStudio::Ruleset::ReportingUserScript/,
|
51
|
+
check_type: :if_exists,
|
52
|
+
message: 'OpenStudio::Ruleset::ReportingUserScript is deprecated, use OpenStudio::Measure::ReportingMeasure instead.',
|
53
|
+
type: :deprecated,
|
54
|
+
severity: :error,
|
55
|
+
file_type: :measure
|
42
56
|
}, {
|
43
57
|
regex: /OpenStudio::Ruleset::OSRunner/,
|
44
58
|
check_type: :if_exists,
|
@@ -154,7 +168,7 @@ module OpenStudioMeasureTester
|
|
154
168
|
measure_info = infoExtractor(measure, OpenStudio::Model::OptionalModel.new, OpenStudio::OptionalWorkspace.new)
|
155
169
|
rescue NameError => error
|
156
170
|
log_message("Unable to parse info from measure. Error: '#{error}'", :general, :error)
|
157
|
-
rescue => error
|
171
|
+
rescue StandardError => error
|
158
172
|
log_message("Unknown error extracting measure info. Error #{error}", :general, :error)
|
159
173
|
end
|
160
174
|
|
@@ -397,7 +411,6 @@ module OpenStudioMeasureTester
|
|
397
411
|
result[:version_modified] = nil
|
398
412
|
end
|
399
413
|
result[:xml_checksum] = measure.xmlChecksum
|
400
|
-
result[:name] = measure.name
|
401
414
|
result[:display_name] = measure.displayName
|
402
415
|
result[:class_name] = measure.className
|
403
416
|
result[:description] = measure.description
|
@@ -52,7 +52,7 @@ module OpenStudioMeasureTester
|
|
52
52
|
g = Git.open(Dir.pwd)
|
53
53
|
config = g.config
|
54
54
|
repo_name = config['remote.origin.url'] ? config['remote.origin.url'].split('/').last.chomp('.git') : nil
|
55
|
-
current_branch = g.branch.name
|
55
|
+
current_branch = g.branch.name || nil
|
56
56
|
logs = g.log
|
57
57
|
sha = nil
|
58
58
|
if !logs.empty?
|
@@ -79,7 +79,7 @@ module OpenStudioMeasureTester
|
|
79
79
|
# the @results hash
|
80
80
|
filename = "#{@test_results_dir}/openstudio_style/openstudio_style.json"
|
81
81
|
if File.exist? filename
|
82
|
-
puts
|
82
|
+
puts 'Found OpenStudio Style results, parsing'
|
83
83
|
@results['openstudio_style'] = JSON.parse(File.read(filename))
|
84
84
|
end
|
85
85
|
|
@@ -96,7 +96,7 @@ module OpenStudioMeasureTester
|
|
96
96
|
if @test_results_dir != @orig_results_dir
|
97
97
|
# coverage
|
98
98
|
if Dir.exist? "#{@orig_results_dir}/coverage"
|
99
|
-
puts
|
99
|
+
puts 'Found Coverage results, parsing'
|
100
100
|
FileUtils.rm_rf "#{@test_results_dir}/coverage" if Dir.exist? "#{@test_results_dir}/coverage"
|
101
101
|
FileUtils.cp_r "#{@orig_results_dir}/coverage/.", "#{@test_results_dir}/coverage"
|
102
102
|
FileUtils.rm_rf "#{@orig_results_dir}/coverage" if Dir.exist? "#{@orig_results_dir}/coverage"
|
@@ -108,18 +108,21 @@ module OpenStudioMeasureTester
|
|
108
108
|
|
109
109
|
# minitest
|
110
110
|
if Dir.exist?("#{@orig_results_dir}/test/html_reports") || Dir.exist?("#{@orig_results_dir}/test/reports")
|
111
|
-
puts
|
112
|
-
|
111
|
+
puts 'Found Minitest Results, parsing'
|
112
|
+
# Do not delete the compatibilty directory which is generated when the test is run
|
113
|
+
FileUtils.rm_rf "#{@test_results_dir}/minitest/html_reports" if Dir.exist? "#{@test_results_dir}/minitest/html_reports"
|
114
|
+
FileUtils.rm_rf "#{@test_results_dir}/minitest/reports" if Dir.exist? "#{@test_results_dir}/minitest/reports"
|
115
|
+
|
113
116
|
FileUtils.mkdir_p "#{@test_results_dir}/minitest"
|
114
117
|
|
115
118
|
# Copy the files over in case the folder is locked.
|
116
119
|
if Dir.exist?("#{@orig_results_dir}/test/html_reports")
|
117
|
-
puts
|
120
|
+
puts 'Moving Minitest HTML results to results directory'
|
118
121
|
FileUtils.cp_r "#{@orig_results_dir}/test/html_reports/.", "#{@test_results_dir}/minitest/html_reports"
|
119
122
|
end
|
120
123
|
|
121
124
|
if Dir.exist?("#{@orig_results_dir}/test/reports")
|
122
|
-
puts
|
125
|
+
puts 'Moving Minitest XML results to results directory'
|
123
126
|
FileUtils.cp_r "#{@orig_results_dir}/test/reports/.", "#{@test_results_dir}/minitest/reports"
|
124
127
|
end
|
125
128
|
|
@@ -178,7 +181,7 @@ module OpenStudioMeasureTester
|
|
178
181
|
end
|
179
182
|
|
180
183
|
if @results['minitest']
|
181
|
-
if @results['minitest'][
|
184
|
+
if @results['minitest'][:total_errors] > 0 || @results['minitest'][:total_failures] > 0
|
182
185
|
puts 'Unit Test (Minitest) errors/failures found.'
|
183
186
|
final_exit_code = 1
|
184
187
|
end
|
@@ -79,7 +79,7 @@ module OpenStudioMeasureTester
|
|
79
79
|
#
|
80
80
|
# @param original_results_directory [string] Location of the results from coverag and minitest
|
81
81
|
def post_process_results(original_results_directory = nil)
|
82
|
-
puts
|
82
|
+
puts ' ========================= Starting Results Post Process ================================'
|
83
83
|
puts "Current directory: #{@base_dir}"
|
84
84
|
puts "Test results will be stored in: #{test_results_dir}"
|
85
85
|
|
@@ -109,7 +109,7 @@ module OpenStudioMeasureTester
|
|
109
109
|
end
|
110
110
|
|
111
111
|
def run_style(skip_post_process)
|
112
|
-
puts
|
112
|
+
puts ' ========================= Starting Run for OpenStudio Style ================================'
|
113
113
|
pre_process_style
|
114
114
|
|
115
115
|
# Run the style tests
|
@@ -124,7 +124,7 @@ module OpenStudioMeasureTester
|
|
124
124
|
end
|
125
125
|
|
126
126
|
def run_rubocop(skip_post_process, auto_correct = false)
|
127
|
-
puts
|
127
|
+
puts ' ========================= Starting Run for Rubocop ================================'
|
128
128
|
pre_process_rubocop
|
129
129
|
|
130
130
|
rubocop_results_file = "#{test_results_dir}/rubocop/rubocop-results.xml"
|
@@ -159,7 +159,7 @@ module OpenStudioMeasureTester
|
|
159
159
|
|
160
160
|
# The results of the coverage and minitest are stored in the root of the directory structure (if Rake)
|
161
161
|
def run_test(skip_post_process, original_results_directory, run_coverage = true)
|
162
|
-
puts
|
162
|
+
puts ' ========================= Starting Run for Minitest (and coverage) ============================'
|
163
163
|
# not sure what @base_dir has to be right now
|
164
164
|
pre_process_minitest(original_results_directory)
|
165
165
|
|
@@ -194,10 +194,76 @@ module OpenStudioMeasureTester
|
|
194
194
|
end
|
195
195
|
|
196
196
|
num_tests = 0
|
197
|
+
openstudio_version = OpenStudio::VersionString.new(OpenStudio.openStudioVersion)
|
197
198
|
Dir["#{@base_dir}/**/*_Test.rb", "#{@base_dir}/**/*_test.rb"].uniq.each do |file|
|
198
|
-
|
199
|
-
|
200
|
-
|
199
|
+
|
200
|
+
begin
|
201
|
+
file = File.expand_path(file)
|
202
|
+
measure_dir = File.expand_path(File.join(File.dirname(file), '..'))
|
203
|
+
|
204
|
+
# check measure xml
|
205
|
+
compatible = {
|
206
|
+
compatible: true,
|
207
|
+
message: '',
|
208
|
+
openstudio_version: openstudio_version.str,
|
209
|
+
measure_min_version: 'None',
|
210
|
+
measure_max_version: 'None',
|
211
|
+
loaded: false,
|
212
|
+
load_errors: []
|
213
|
+
}
|
214
|
+
begin
|
215
|
+
measure = OpenStudio::BCLMeasure.new(measure_dir)
|
216
|
+
compatible[:measure_name] = measure.className
|
217
|
+
measure.files.each do |f|
|
218
|
+
if f.fileName == 'measure.rb'
|
219
|
+
if !f.minCompatibleVersion.empty?
|
220
|
+
min_version = f.minCompatibleVersion.get
|
221
|
+
compatible[:measure_min_version] = min_version.str
|
222
|
+
if openstudio_version < min_version
|
223
|
+
compatible[:compatible] = false
|
224
|
+
compatible[:message] = "OpenStudio Version #{openstudio_version.str} < Min Version #{min_version.str}"
|
225
|
+
end
|
226
|
+
end
|
227
|
+
if !f.maxCompatibleVersion.empty?
|
228
|
+
max_version = f.maxCompatibleVersion.get
|
229
|
+
compatible[:measure_max_version] = max_version.str
|
230
|
+
if openstudio_version > max_version
|
231
|
+
compatible[:compatible] = false
|
232
|
+
compatible[:message] = "OpenStudio Version #{openstudio_version.str} > Max Version #{max_version.str}"
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|
237
|
+
rescue StandardError => exception
|
238
|
+
compatible[:compatible] = false
|
239
|
+
compatible[:message] = exception.message
|
240
|
+
end
|
241
|
+
|
242
|
+
if !compatible[:compatible]
|
243
|
+
puts "Measure not compatible: #{measure_dir}, #{compatible[:message]}"
|
244
|
+
next
|
245
|
+
end
|
246
|
+
|
247
|
+
# load test
|
248
|
+
puts "Loading file for testing: #{file}"
|
249
|
+
begin
|
250
|
+
load file
|
251
|
+
compatible[:loaded] = true
|
252
|
+
num_tests += 1
|
253
|
+
rescue StandardError, LoadError => exception
|
254
|
+
compatible[:load_errors] << exception.message
|
255
|
+
end
|
256
|
+
|
257
|
+
ensure
|
258
|
+
# Write out the compatibility
|
259
|
+
# write out to a file that the measure is not applicable
|
260
|
+
os_compatible_file = "#{@base_dir}/test_results/minitest/compatibility/#{compatible[:measure_name]}.json"
|
261
|
+
puts os_compatible_file
|
262
|
+
FileUtils.mkdir_p File.dirname(os_compatible_file) unless Dir.exists? File.dirname(os_compatible_file)
|
263
|
+
File.open(os_compatible_file, 'w') do |f|
|
264
|
+
f << JSON.pretty_generate(compatible)
|
265
|
+
end
|
266
|
+
end
|
201
267
|
end
|
202
268
|
|
203
269
|
if num_tests < 1
|
@@ -39,7 +39,23 @@
|
|
39
39
|
<div class="card-block">
|
40
40
|
<div class="card-body">
|
41
41
|
<h5 class="card-title">Tests</h5>
|
42
|
-
|
42
|
+
<% if @hash['minitest'] && @hash['minitest']['total_load_errors'] %>
|
43
|
+
<div class="row pt-3">
|
44
|
+
<% total_load_errors = @hash['minitest']['total_load_errors'].count %>
|
45
|
+
<% if total_load_errors > 0 %>
|
46
|
+
<div class="col-sm-3 offset-sm-2 badge-med-height badge badge-danger"><span class='med-text'><%= total_load_errors %></span></div>
|
47
|
+
<% else %>
|
48
|
+
<div class="col-sm-3 offset-sm-2 badge-med-height badge badge-success"><span class='med-text'><%= total_load_errors %></span></div>
|
49
|
+
<% end %>
|
50
|
+
<div class="col-sm-3 badge-med-height badge-text">Load Errors</div>
|
51
|
+
</div>
|
52
|
+
<% else %>
|
53
|
+
<div class="row pt-3">
|
54
|
+
<div class="col-sm-6 offset-sm-3 badge-lg-height badge badge-warning badge-text"><i data-feather="alert-triangle" class="size48"></i><br><span class="pt-2">No Data</span> </div>
|
55
|
+
<div class="col-sm-3 badge-med-height badge-text">Load Errors</div>
|
56
|
+
</div>
|
57
|
+
<% end %>
|
58
|
+
|
43
59
|
<% if @hash['minitest'] && @hash['minitest']['total_failures'] %>
|
44
60
|
<div class="row pt-3">
|
45
61
|
<% passed = @hash['minitest']['total_tests'] - (@hash['minitest']['total_failures'] + @hash['minitest']['total_errors'] + @hash['minitest']['total_skipped']) %>
|
@@ -62,6 +78,22 @@
|
|
62
78
|
<% end %>
|
63
79
|
<div class="col-sm-5 badge-med-height badge-text">Errors</div>
|
64
80
|
</div>
|
81
|
+
<div class="row pt-2">
|
82
|
+
<% if @hash['minitest']['total_skipped'] > 0 %>
|
83
|
+
<div class="col-sm-3 offset-sm-2 badge-med-height badge badge-info"><span class='med-text'><%= @hash['minitest']['total_skipped'] %></span></div>
|
84
|
+
<% else %>
|
85
|
+
<div class="col-sm-3 offset-sm-2 badge-med-height badge badge-success"><span class='med-text'><%= @hash['minitest']['total_skipped'] %></span></div>
|
86
|
+
<% end %>
|
87
|
+
<div class="col-sm-5 badge-med-height badge-text">Skipped</div>
|
88
|
+
</div>
|
89
|
+
<div class="row pt-2">
|
90
|
+
<% if @hash['minitest']['total_compatibility_errors'] > 0 %>
|
91
|
+
<div class="col-sm-3 offset-sm-2 badge-med-height badge badge-info"><span class='med-text'><%= @hash['minitest']['total_compatibility_errors'] %></span></div>
|
92
|
+
<% else %>
|
93
|
+
<div class="col-sm-3 offset-sm-2 badge-med-height badge badge-success"><span class='med-text'><%= @hash['minitest']['total_compatibility_errors'] %></span></div>
|
94
|
+
<% end %>
|
95
|
+
<div class="col-sm-5 badge-med-height badge-text">Incompatible</div>
|
96
|
+
</div>
|
65
97
|
<% else %>
|
66
98
|
<div class="row pt-5">
|
67
99
|
<div class="col-sm-6 offset-sm-3 badge-lg-height badge badge-warning badge-text"><i data-feather="alert-triangle" class="size48"></i><br><span class="pt-2">No Data</span> </div>
|
@@ -135,19 +167,30 @@
|
|
135
167
|
<table class="table table-striped table-sm table-text">
|
136
168
|
<thead>
|
137
169
|
<tr>
|
138
|
-
<th>Measure Name</th>
|
139
|
-
<th
|
140
|
-
<th
|
141
|
-
<th
|
142
|
-
<th>
|
143
|
-
<th
|
170
|
+
<th rowspan="2">Measure Name</th>
|
171
|
+
<th rowspan="2">Loaded</th>
|
172
|
+
<th rowspan="2">Min OS Version</th>
|
173
|
+
<th rowspan="2">Max OS Version</th>
|
174
|
+
<th rowspan="2">Tested OS Version</th>
|
175
|
+
<th colspan="5">Tests</th>
|
176
|
+
<th rowspan="2">OS Style Errors<br/><span class="small-text">Errors - Warnings - Info</span></th>
|
177
|
+
<th rowspan="2">RuboCop<br/><span class="small-text">Errors - Warnings - Info</span></th>
|
178
|
+
<th rowspan="2">Coverage</th>
|
179
|
+
<th> </th>
|
180
|
+
</tr>
|
181
|
+
<tr>
|
182
|
+
<th>Pass</th>
|
183
|
+
<th>Fail</th>
|
184
|
+
<th>Error</th>
|
185
|
+
<th>Skip</th>
|
186
|
+
<th>Incom</th>
|
144
187
|
</tr>
|
145
188
|
</thead>
|
146
189
|
<tbody>
|
147
190
|
<!-- use the largest 'by_measure' array, in case the tests weren't all run (coverage & minitest run together) -->
|
148
191
|
<% max = 0 %>
|
149
192
|
<% test_type = ''%>
|
150
|
-
<% ['coverage', 'openstudio_style', 'rubocop'].each do |type| %>
|
193
|
+
<% ['coverage', 'openstudio_style', 'minitest','rubocop'].each do |type| %>
|
151
194
|
<% if @hash[type] && @hash[type]['by_measure'] %>
|
152
195
|
<% if @hash[type]['by_measure'].length > max %>
|
153
196
|
<% max = @hash[type]['by_measure'].length %>
|
@@ -159,8 +202,36 @@
|
|
159
202
|
<% @hash[test_type]['by_measure'].each do |name, measure| %>
|
160
203
|
<tr>
|
161
204
|
<td><%= name %></td>
|
205
|
+
<td>
|
206
|
+
<% if @hash['minitest'] && @hash['minitest']['by_measure'] && @hash['minitest']['by_measure'][name] && @hash['minitest']['by_measure'][name]['loaded'] %>
|
207
|
+
Yes
|
208
|
+
<% else %>
|
209
|
+
False
|
210
|
+
<% end %>
|
211
|
+
</td>
|
212
|
+
<td>
|
213
|
+
<% if @hash['minitest'] && @hash['minitest']['by_measure'] && @hash['minitest']['by_measure'][name] %>
|
214
|
+
<%= @hash['minitest']['by_measure'][name]['measure_min_version'] %>
|
215
|
+
<% else %>
|
216
|
+
Unknown
|
217
|
+
<% end %>
|
218
|
+
</td>
|
219
|
+
<td>
|
220
|
+
<% if @hash['minitest'] && @hash['minitest']['by_measure'] && @hash['minitest']['by_measure'][name] %>
|
221
|
+
<%= @hash['minitest']['by_measure'][name]['measure_max_version'] %>
|
222
|
+
<% else %>
|
223
|
+
Unknown
|
224
|
+
<% end %>
|
225
|
+
</td>
|
162
226
|
<td>
|
163
227
|
<% if @hash['minitest'] && @hash['minitest']['by_measure'] && @hash['minitest']['by_measure'][name] %>
|
228
|
+
<%= @hash['minitest']['by_measure'][name]['openstudio_version'] %>
|
229
|
+
<% else %>
|
230
|
+
Unknown
|
231
|
+
<% end %>
|
232
|
+
</td>
|
233
|
+
<% if @hash['minitest'] && @hash['minitest']['by_measure'] && @hash['minitest']['by_measure'][name] %>
|
234
|
+
<td>
|
164
235
|
<% passed = @hash['minitest']['by_measure'][name]['measure_tests'] - (@hash['minitest']['by_measure'][name]['measure_failures'] + @hash['minitest']['by_measure'][name]['measure_errors'] + @hash['minitest']['by_measure'][name]['measure_skipped']) %>
|
165
236
|
<span class="badge badge-success"><%= passed %></span>
|
166
237
|
<% if @hash['minitest']['by_measure'][name]['measure_failures'] > 0 %>
|
@@ -168,15 +239,21 @@
|
|
168
239
|
<% else %>
|
169
240
|
<% label = 'success' %>
|
170
241
|
<% end %>
|
242
|
+
</td>
|
243
|
+
<td>
|
171
244
|
<span class="badge badge-<%= label %>"><%= @hash['minitest']['by_measure'][name]['measure_failures'] %></span>
|
172
245
|
<% if @hash['minitest']['by_measure'][name]['measure_errors'] > 0 %>
|
173
|
-
|
246
|
+
<% label = 'danger' %>
|
174
247
|
<% else %>
|
175
|
-
|
248
|
+
<% label = 'success' %>
|
176
249
|
<% end %>
|
177
|
-
|
178
|
-
|
179
|
-
|
250
|
+
</td>
|
251
|
+
<td><span class="badge badge-<%= label %>"><%= @hash['minitest']['by_measure'][name]['measure_errors'] %></span></td>
|
252
|
+
<td><span class="badge badge-info"><%= @hash['minitest']['by_measure'][name]['measure_skipped'] %></span></td>
|
253
|
+
<td><span class="badge badge-info"><%= @hash['minitest']['by_measure'][name]['measure_compatibility_errors'] %></span></td>
|
254
|
+
<% else %>
|
255
|
+
<td></td><td></td><td></td><td></td><td></td>
|
256
|
+
<% end %>
|
180
257
|
<td>
|
181
258
|
<% if @hash['openstudio_style'] && @hash['openstudio_style']['by_measure'][name] %>
|
182
259
|
<% if @hash['openstudio_style']['by_measure'][name]['measure_errors'] > 0 %>
|
@@ -330,11 +407,44 @@
|
|
330
407
|
</div>
|
331
408
|
</div>
|
332
409
|
|
410
|
+
<div class="row pb-3">
|
411
|
+
<div class="col-sm-12">
|
412
|
+
<h4>Loaded</h4>
|
413
|
+
<% if @hash['minitest'] && @hash['minitest']['by_measure'] && @hash['minitest']['by_measure'][name] %>
|
414
|
+
<% if @hash['minitest']['by_measure'][name]['loaded'] %>
|
415
|
+
<div>True</div>
|
416
|
+
<% else %>
|
417
|
+
<div>False</div>
|
418
|
+
<% if @hash['minitest']['by_measure'][name]['load_errors'] %>
|
419
|
+
<table class="table table-striped">
|
420
|
+
<thead>
|
421
|
+
<tr>
|
422
|
+
<th>Error</th>
|
423
|
+
</tr>
|
424
|
+
</thead>
|
425
|
+
<tbody>
|
426
|
+
<% @hash['minitest']['by_measure'][name]['load_errors'].each do |load_error| %>
|
427
|
+
<tr>
|
428
|
+
<td><%= load_error %></td>
|
429
|
+
</tr>
|
430
|
+
<% end %>
|
431
|
+
</tbody>
|
432
|
+
</table>
|
433
|
+
<% end %>
|
434
|
+
<% end %>
|
435
|
+
<% else %>
|
436
|
+
<div>
|
437
|
+
<span class="badge badge-danger">NO DATA</span> Test was not run
|
438
|
+
</div>
|
439
|
+
<% end %>
|
440
|
+
</div>
|
441
|
+
</div>
|
442
|
+
|
333
443
|
<div class="row pb-3">
|
334
444
|
<div class="col-sm-12">
|
335
445
|
<h4>Tests</h4>
|
336
446
|
<% if @hash['minitest'] && @hash['minitest']['by_measure'] && @hash['minitest']['by_measure'][name] && @hash['minitest']['by_measure'][name]['issues'] %>
|
337
|
-
<% if @hash['minitest']['by_measure'][name]['issues']['failures'].length > 0 || @hash['minitest']['by_measure'][name]['issues']['errors'].length > 0 %>
|
447
|
+
<% if @hash['minitest']['by_measure'][name]['issues']['failures'].length > 0 || @hash['minitest']['by_measure'][name]['issues']['errors'].length > 0 || @hash['minitest']['by_measure'][name]['issues']['skipped'].length > 0 %>
|
338
448
|
<table class="table table-striped">
|
339
449
|
<thead>
|
340
450
|
<tr>
|
@@ -354,6 +464,12 @@
|
|
354
464
|
<td><span class="badge badge-dark">Error</span></td>
|
355
465
|
<td><%= err %></td>
|
356
466
|
</tr>
|
467
|
+
<% end %>
|
468
|
+
<% @hash['minitest']['by_measure'][name]['issues']['skipped'].each do |skip| %>
|
469
|
+
<tr>
|
470
|
+
<td><span class="badge badge-info">Skipped</span></td>
|
471
|
+
<td><%= skip %></td>
|
472
|
+
</tr>
|
357
473
|
<% end %>
|
358
474
|
</tbody>
|
359
475
|
</table>
|
@@ -567,7 +683,6 @@
|
|
567
683
|
size(true);
|
568
684
|
|
569
685
|
}());
|
570
|
-
|
571
686
|
</script>
|
572
687
|
</body>
|
573
688
|
</html>
|
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
lib = File.expand_path('lib', __dir__)
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
3
|
require 'openstudio_measure_tester/version'
|
@@ -23,11 +22,18 @@ Gem::Specification.new do |spec|
|
|
23
22
|
spec.add_development_dependency 'bundler', '~> 1.16'
|
24
23
|
spec.add_development_dependency 'rspec', '3.7.0'
|
25
24
|
|
25
|
+
if /^2\.2/.match(RUBY_VERSION)
|
26
|
+
spec.add_dependency 'rubocop', '0.54.0'
|
27
|
+
elsif /^2\.0/.match(RUBY_VERSION)
|
28
|
+
spec.add_dependency 'nokogiri', '1.6.8'
|
29
|
+
spec.add_dependency 'rainbow', '2.2.2'
|
30
|
+
spec.add_dependency 'rubocop', '0.50.0'
|
31
|
+
end
|
32
|
+
|
26
33
|
spec.add_dependency 'git', '1.3.0'
|
27
34
|
spec.add_dependency 'minitest', '5.4.3'
|
28
35
|
spec.add_dependency 'minitest-reporters', '1.2.0'
|
29
36
|
spec.add_dependency 'rake', '12.3.1'
|
30
|
-
spec.add_dependency 'rubocop', '0.54.0'
|
31
37
|
spec.add_dependency 'rubocop-checkstyle_formatter', '0.4'
|
32
38
|
spec.add_dependency 'simplecov', '0.16.1'
|
33
39
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
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.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nicholas Long
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: exe
|
13
13
|
cert_chain: []
|
14
|
-
date: 2018-
|
14
|
+
date: 2018-11-05 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: bundler
|
@@ -41,6 +41,20 @@ dependencies:
|
|
41
41
|
- - '='
|
42
42
|
- !ruby/object:Gem::Version
|
43
43
|
version: 3.7.0
|
44
|
+
- !ruby/object:Gem::Dependency
|
45
|
+
name: rubocop
|
46
|
+
requirement: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - '='
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 0.54.0
|
51
|
+
type: :runtime
|
52
|
+
prerelease: false
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - '='
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: 0.54.0
|
44
58
|
- !ruby/object:Gem::Dependency
|
45
59
|
name: git
|
46
60
|
requirement: !ruby/object:Gem::Requirement
|
@@ -97,20 +111,6 @@ dependencies:
|
|
97
111
|
- - '='
|
98
112
|
- !ruby/object:Gem::Version
|
99
113
|
version: 12.3.1
|
100
|
-
- !ruby/object:Gem::Dependency
|
101
|
-
name: rubocop
|
102
|
-
requirement: !ruby/object:Gem::Requirement
|
103
|
-
requirements:
|
104
|
-
- - '='
|
105
|
-
- !ruby/object:Gem::Version
|
106
|
-
version: 0.54.0
|
107
|
-
type: :runtime
|
108
|
-
prerelease: false
|
109
|
-
version_requirements: !ruby/object:Gem::Requirement
|
110
|
-
requirements:
|
111
|
-
- - '='
|
112
|
-
- !ruby/object:Gem::Version
|
113
|
-
version: 0.54.0
|
114
114
|
- !ruby/object:Gem::Dependency
|
115
115
|
name: rubocop-checkstyle_formatter
|
116
116
|
requirement: !ruby/object:Gem::Requirement
|