openstudio_measure_tester 0.3.3 → 0.4.0
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/CHANGELOG.md +5 -0
- data/LICENSE.md +1 -1
- data/lib/openstudio_measure_tester/dashboard.rb +1 -1
- data/lib/openstudio_measure_tester/github_actions_report.rb +110 -0
- data/lib/openstudio_measure_tester/rake_task.rb +1 -1
- data/lib/openstudio_measure_tester/rubocop_result.rb +2 -1
- data/lib/openstudio_measure_tester/runner.rb +14 -1
- data/lib/openstudio_measure_tester/version.rb +1 -1
- data/lib/openstudio_measure_tester.rb +2 -0
- data/openstudio_measure_tester.gemspec +6 -6
- metadata +26 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b2154c98870a730a34aec0ea97ae64385c72963384da1486bb4097fd8bcf049e
|
4
|
+
data.tar.gz: 2e4addb622ad23fc056aa3f6e41e654f901b971175c5b1e987e036fd444f93c4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d559a442f9a549592ee70666227e2e8c89f8ac14ab0c74a421c2f0d40838f2f98518394f00bfab8a1646a091b07aa29ab72d8e563f98e9c91fd5bd0bac8ac6d
|
7
|
+
data.tar.gz: 97a14956b4088ff07b45716864148d78dcdbded3dbe5d27109fbaf490d451efafeeafd8448db278b450093aeafd19a3c14ea65fcc76e4fedb42011fd7ed4955b
|
data/CHANGELOG.md
CHANGED
data/LICENSE.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
OpenStudio(R), Copyright (c) 2008,
|
1
|
+
OpenStudio(R), Copyright (c) 2008, 2024 Alliance for Sustainable Energy, LLC.
|
2
2
|
|
3
3
|
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
4
4
|
|
@@ -22,7 +22,7 @@ module OpenStudioMeasureTester
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def render
|
25
|
-
rendered = ERB.new(@template,
|
25
|
+
rendered = ERB.new(@template, trim_mode: nil, eoutvar: '@html').result(binding)
|
26
26
|
save_dir = "#{@test_results_directory}/dashboard"
|
27
27
|
|
28
28
|
# Render the dashboard
|
@@ -0,0 +1,110 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# *******************************************************************************
|
4
|
+
# OpenStudio(R), Copyright (c) Alliance for Sustainable Energy, LLC.
|
5
|
+
# See also https://openstudio.net/license
|
6
|
+
# *******************************************************************************
|
7
|
+
|
8
|
+
module OpenStudioMeasureTester
|
9
|
+
class GithubActionsReport
|
10
|
+
attr_reader :minitest_summary_table, :all_annotations
|
11
|
+
|
12
|
+
# @param test_results_directory [String]: The directory
|
13
|
+
def initialize(test_results_directory)
|
14
|
+
@test_results_directory = test_results_directory
|
15
|
+
file = File.read("#{@test_results_directory}/combined_results.json")
|
16
|
+
@hash = JSON.parse(file)
|
17
|
+
@minitest_summary_table = nil
|
18
|
+
@all_annotations = []
|
19
|
+
end
|
20
|
+
|
21
|
+
def write_step_summary(msg)
|
22
|
+
puts msg
|
23
|
+
if !ENV['GITHUB_STEP_SUMMARY'].nil?
|
24
|
+
File.write(ENV['GITHUB_STEP_SUMMARY'], "#{msg}\n", mode: 'a+')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def hash_to_markdown(h, header0, header1)
|
29
|
+
n0 = [h.keys.map(&:to_s).map(&:size).max, header0.size].max
|
30
|
+
n1 = [h.values.map(&:to_s).map(&:size).max, header1.size].max
|
31
|
+
|
32
|
+
content = [
|
33
|
+
"| #{header0.ljust(n0)} | #{header1.ljust(n1)} |",
|
34
|
+
"| " + "-" * n0 + " | " + "-" * n1 + " |",
|
35
|
+
] + h.map{|k, v| "| #{k.ljust(n0)} | #{v.to_s.ljust(n1)} |"}
|
36
|
+
return content.join("\n")
|
37
|
+
end
|
38
|
+
|
39
|
+
def make_minitest_step_summary_table
|
40
|
+
|
41
|
+
write_step_summary("## Minitest")
|
42
|
+
write_step_summary("")
|
43
|
+
|
44
|
+
total_tests = @hash['minitest']['total_tests']
|
45
|
+
total_assertions = @hash['minitest']['total_assertions']
|
46
|
+
total_errors = @hash['minitest']['total_errors']
|
47
|
+
total_failures = @hash['minitest']['total_failures']
|
48
|
+
total_skipped = @hash['minitest']['total_skipped']
|
49
|
+
total_compatibility_errors = @hash['minitest']['total_compatibility_errors']
|
50
|
+
total_load_errors = @hash['minitest'].fetch('total_load_errors', []).count
|
51
|
+
|
52
|
+
passed = total_tests - (total_failures + total_errors + total_skipped)
|
53
|
+
pct = passed.to_f / (total_tests - total_skipped).to_f
|
54
|
+
|
55
|
+
h = {
|
56
|
+
'Total Tests' => total_tests,
|
57
|
+
'Load Error' => total_load_errors,
|
58
|
+
'Passed' => passed,
|
59
|
+
'Success Rate' => '%.2f%%' % (pct * 100.0),
|
60
|
+
'Failures' => total_failures,
|
61
|
+
'Errors' => total_errors,
|
62
|
+
'Skipped' => total_skipped,
|
63
|
+
'Incompatible' => total_compatibility_errors,
|
64
|
+
'Total Assertions' => total_assertions,
|
65
|
+
}
|
66
|
+
|
67
|
+
@minitest_summary_table = hash_to_markdown(h, "Metric", "Value")
|
68
|
+
|
69
|
+
write_step_summary(@minitest_summary_table)
|
70
|
+
write_step_summary("")
|
71
|
+
end
|
72
|
+
|
73
|
+
def make_minitest_annotations
|
74
|
+
@all_annotations = []
|
75
|
+
|
76
|
+
report_xmls = Dir["#{@test_results_directory}/minitest/reports/TEST-*.xml"]
|
77
|
+
report_xmls.each do |report_xml|
|
78
|
+
doc = REXML::Document.new(File.open(report_xml)).root
|
79
|
+
testsuite_element = doc.elements['testsuite']
|
80
|
+
filepath = testsuite_element.attributes['filepath']
|
81
|
+
testsuite_element.elements.each('testcase') do |testcase|
|
82
|
+
test_name = testcase.attributes['name']
|
83
|
+
line = testcase.attributes['lineno'].to_i
|
84
|
+
tested_class = testcase.attributes['classname']
|
85
|
+
|
86
|
+
testcase.elements.each('failure') do |x|
|
87
|
+
title = x.attributes['type']
|
88
|
+
message = x.attributes['message']
|
89
|
+
annot = "::error file=#{filepath},line=#{line},endLine=#{line + 1},title=#{title}::#{tested_class}.#{test_name}: #{message}"
|
90
|
+
@all_annotations << annot
|
91
|
+
end
|
92
|
+
testcase.elements.each('error') do |x|
|
93
|
+
title = x.attributes['type']
|
94
|
+
message = x.attributes['message']
|
95
|
+
annot = "::error file=#{filepath},line=#{line},endLine=#{line + 1},title=#{title}::#{message}"
|
96
|
+
@all_annotations << annot
|
97
|
+
end
|
98
|
+
testcase.elements.each('skipped') do |x|
|
99
|
+
title = x.attributes['type']
|
100
|
+
message = x.attributes['message']
|
101
|
+
annot = "::warning file=#{filepath},line=#{line},endLine=#{line + 1},title=#{title}::#{message}"
|
102
|
+
@all_annotations << annot
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
@all_annotations.each { |a| puts a}
|
107
|
+
nil
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -27,7 +27,7 @@ module OpenStudioMeasureTester
|
|
27
27
|
def setup_subtasks(name)
|
28
28
|
namespace name do
|
29
29
|
####################################### Minitest and Coverage #######################################
|
30
|
-
desc '
|
30
|
+
desc 'Run Minitest and Coverage on Measures'
|
31
31
|
task :test do
|
32
32
|
runner = OpenStudioMeasureTester::Runner.new(Rake.application.original_dir)
|
33
33
|
# Need to pass in the current directory because the results of minitest and coverage end up going into
|
@@ -90,7 +90,8 @@ module OpenStudioMeasureTester
|
|
90
90
|
doc.elements.each('//checkstyle/file') do |rc_file|
|
91
91
|
# Allow processing when the file is just the measure.rb
|
92
92
|
if rc_file.attributes['name'] != 'measure.rb'
|
93
|
-
|
93
|
+
parts = rc_file.attributes['name'].split(File::SEPARATOR)
|
94
|
+
if !parts.include? measure_name
|
94
95
|
next
|
95
96
|
end
|
96
97
|
end
|
@@ -32,6 +32,12 @@ module OpenStudioMeasureTester
|
|
32
32
|
template.render
|
33
33
|
end
|
34
34
|
|
35
|
+
def github_actions_report
|
36
|
+
gha_reporter = OpenStudioMeasureTester::GithubActionsReport.new(test_results_dir)
|
37
|
+
gha_reporter.make_minitest_step_summary_table
|
38
|
+
gha_reporter.make_minitest_annotations
|
39
|
+
end
|
40
|
+
|
35
41
|
# Prepare the current directory and the root directory to remove old test results before running
|
36
42
|
# the new tests
|
37
43
|
#
|
@@ -67,8 +73,10 @@ module OpenStudioMeasureTester
|
|
67
73
|
# copy over the .rubocop.yml file into the root directory of where this is running.
|
68
74
|
shared_rubocop_file = File.expand_path('../../.rubocop.yml', File.dirname(__FILE__))
|
69
75
|
dest_file = "#{File.expand_path(@base_dir)}/.rubocop.yml"
|
70
|
-
if
|
76
|
+
if !File.exist?(dest_file)
|
71
77
|
FileUtils.copy(shared_rubocop_file, dest_file)
|
78
|
+
elsif File.read(shared_rubocop_file) != File.read(dest_file)
|
79
|
+
puts "Using specific custom .rubocop.yml rather than the OpenStudio-measure-tester-gem's one"
|
72
80
|
end
|
73
81
|
|
74
82
|
puts "Current directory is #{@base_dir}"
|
@@ -96,6 +104,8 @@ module OpenStudioMeasureTester
|
|
96
104
|
# call the create dashboard command now that we have results
|
97
105
|
dashboard
|
98
106
|
|
107
|
+
github_actions_report if ENV["GITHUB_ACTIONS"]
|
108
|
+
|
99
109
|
# return the results exit code
|
100
110
|
return results.exit_code
|
101
111
|
end
|
@@ -146,6 +156,9 @@ module OpenStudioMeasureTester
|
|
146
156
|
# output_path: 'junk.xml',
|
147
157
|
auto_correct: auto_correct,
|
148
158
|
color: false,
|
159
|
+
# cf #76 - Because we pass a glob to the Runner.run, we must pass
|
160
|
+
# force_exclusion to respect the files excluded in the .rubocop.yml
|
161
|
+
force_exclusion: true,
|
149
162
|
formatters: ['simple', ['RuboCop::Formatter::CheckstyleFormatter', rubocop_results_file]]
|
150
163
|
}
|
151
164
|
|
@@ -11,6 +11,7 @@ require 'pp'
|
|
11
11
|
require 'rexml/document'
|
12
12
|
require 'minitest'
|
13
13
|
require 'simplecov'
|
14
|
+
require 'json'
|
14
15
|
|
15
16
|
begin
|
16
17
|
require 'git'
|
@@ -36,6 +37,7 @@ require_relative 'openstudio_measure_tester/coverage'
|
|
36
37
|
require_relative 'openstudio_measure_tester/rubocop_result'
|
37
38
|
require_relative 'openstudio_measure_tester/openstudio_testing_result'
|
38
39
|
require_relative 'openstudio_measure_tester/dashboard'
|
40
|
+
require_relative 'openstudio_measure_tester/github_actions_report'
|
39
41
|
require_relative 'openstudio_measure_tester/runner'
|
40
42
|
|
41
43
|
require_relative 'openstudio_measure_tester/rake_task'
|
@@ -27,18 +27,18 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
28
|
spec.require_paths = ['lib']
|
29
29
|
|
30
|
-
spec.required_ruby_version = '~> 2.
|
30
|
+
spec.required_ruby_version = '~> 3.2.2'
|
31
31
|
|
32
32
|
spec.add_dependency 'git', '~> 1.12.0'
|
33
33
|
spec.add_dependency 'minitest', '~> 5.14.0'
|
34
34
|
spec.add_dependency 'minitest-reporters', '~> 1.4.2'
|
35
35
|
spec.add_dependency 'rake', '~> 13.0'
|
36
36
|
spec.add_dependency 'parser', '3.2.2.2'
|
37
|
-
spec.add_dependency 'rubocop', '
|
38
|
-
spec.add_dependency 'rubocop-performance', '
|
39
|
-
spec.add_dependency 'rubocop-checkstyle_formatter', '
|
40
|
-
spec.add_dependency 'simplecov', '
|
37
|
+
spec.add_dependency 'rubocop', '1.50'
|
38
|
+
spec.add_dependency 'rubocop-performance', '1.20.0'
|
39
|
+
spec.add_dependency 'rubocop-checkstyle_formatter', '0.6.0'
|
40
|
+
spec.add_dependency 'simplecov', '0.22.0'
|
41
41
|
|
42
|
-
spec.add_development_dependency 'bundler', '
|
42
|
+
spec.add_development_dependency 'bundler', '2.4.10'
|
43
43
|
spec.add_development_dependency 'rspec', '~> 3.9'
|
44
44
|
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.
|
4
|
+
version: 0.4.0
|
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: 2024-
|
14
|
+
date: 2024-05-03 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: git
|
@@ -87,72 +87,72 @@ dependencies:
|
|
87
87
|
name: rubocop
|
88
88
|
requirement: !ruby/object:Gem::Requirement
|
89
89
|
requirements:
|
90
|
-
- -
|
90
|
+
- - '='
|
91
91
|
- !ruby/object:Gem::Version
|
92
|
-
version: 1.
|
92
|
+
version: '1.50'
|
93
93
|
type: :runtime
|
94
94
|
prerelease: false
|
95
95
|
version_requirements: !ruby/object:Gem::Requirement
|
96
96
|
requirements:
|
97
|
-
- -
|
97
|
+
- - '='
|
98
98
|
- !ruby/object:Gem::Version
|
99
|
-
version: 1.
|
99
|
+
version: '1.50'
|
100
100
|
- !ruby/object:Gem::Dependency
|
101
101
|
name: rubocop-performance
|
102
102
|
requirement: !ruby/object:Gem::Requirement
|
103
103
|
requirements:
|
104
|
-
- -
|
104
|
+
- - '='
|
105
105
|
- !ruby/object:Gem::Version
|
106
|
-
version: 1.
|
106
|
+
version: 1.20.0
|
107
107
|
type: :runtime
|
108
108
|
prerelease: false
|
109
109
|
version_requirements: !ruby/object:Gem::Requirement
|
110
110
|
requirements:
|
111
|
-
- -
|
111
|
+
- - '='
|
112
112
|
- !ruby/object:Gem::Version
|
113
|
-
version: 1.
|
113
|
+
version: 1.20.0
|
114
114
|
- !ruby/object:Gem::Dependency
|
115
115
|
name: rubocop-checkstyle_formatter
|
116
116
|
requirement: !ruby/object:Gem::Requirement
|
117
117
|
requirements:
|
118
|
-
- -
|
118
|
+
- - '='
|
119
119
|
- !ruby/object:Gem::Version
|
120
|
-
version: 0.
|
120
|
+
version: 0.6.0
|
121
121
|
type: :runtime
|
122
122
|
prerelease: false
|
123
123
|
version_requirements: !ruby/object:Gem::Requirement
|
124
124
|
requirements:
|
125
|
-
- -
|
125
|
+
- - '='
|
126
126
|
- !ruby/object:Gem::Version
|
127
|
-
version: 0.
|
127
|
+
version: 0.6.0
|
128
128
|
- !ruby/object:Gem::Dependency
|
129
129
|
name: simplecov
|
130
130
|
requirement: !ruby/object:Gem::Requirement
|
131
131
|
requirements:
|
132
|
-
- -
|
132
|
+
- - '='
|
133
133
|
- !ruby/object:Gem::Version
|
134
|
-
version: 0.
|
134
|
+
version: 0.22.0
|
135
135
|
type: :runtime
|
136
136
|
prerelease: false
|
137
137
|
version_requirements: !ruby/object:Gem::Requirement
|
138
138
|
requirements:
|
139
|
-
- -
|
139
|
+
- - '='
|
140
140
|
- !ruby/object:Gem::Version
|
141
|
-
version: 0.
|
141
|
+
version: 0.22.0
|
142
142
|
- !ruby/object:Gem::Dependency
|
143
143
|
name: bundler
|
144
144
|
requirement: !ruby/object:Gem::Requirement
|
145
145
|
requirements:
|
146
|
-
- -
|
146
|
+
- - '='
|
147
147
|
- !ruby/object:Gem::Version
|
148
|
-
version: 2.
|
148
|
+
version: 2.4.10
|
149
149
|
type: :development
|
150
150
|
prerelease: false
|
151
151
|
version_requirements: !ruby/object:Gem::Requirement
|
152
152
|
requirements:
|
153
|
-
- -
|
153
|
+
- - '='
|
154
154
|
- !ruby/object:Gem::Version
|
155
|
-
version: 2.
|
155
|
+
version: 2.4.10
|
156
156
|
- !ruby/object:Gem::Dependency
|
157
157
|
name: rspec
|
158
158
|
requirement: !ruby/object:Gem::Requirement
|
@@ -200,6 +200,7 @@ files:
|
|
200
200
|
- lib/openstudio_measure_tester/core_ext.rb
|
201
201
|
- lib/openstudio_measure_tester/coverage.rb
|
202
202
|
- lib/openstudio_measure_tester/dashboard.rb
|
203
|
+
- lib/openstudio_measure_tester/github_actions_report.rb
|
203
204
|
- lib/openstudio_measure_tester/minitest_result.rb
|
204
205
|
- lib/openstudio_measure_tester/openstudio_style.rb
|
205
206
|
- lib/openstudio_measure_tester/openstudio_testing_result.rb
|
@@ -214,7 +215,7 @@ licenses: []
|
|
214
215
|
metadata:
|
215
216
|
bug_tracker_uri: https://github.com/NREL/OpenStudio-measure-tester-gem/issues
|
216
217
|
changelog_uri: https://github.com/NREL/OpenStudio-measure-tester-gem/blob/develop/CHANGELOG.md
|
217
|
-
source_code_uri: https://github.com/NREL/OpenStudio-measure-tester-gem/tree/v0.
|
218
|
+
source_code_uri: https://github.com/NREL/OpenStudio-measure-tester-gem/tree/v0.4.0
|
218
219
|
post_install_message:
|
219
220
|
rdoc_options: []
|
220
221
|
require_paths:
|
@@ -223,14 +224,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
223
224
|
requirements:
|
224
225
|
- - "~>"
|
225
226
|
- !ruby/object:Gem::Version
|
226
|
-
version: 2.
|
227
|
+
version: 3.2.2
|
227
228
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
228
229
|
requirements:
|
229
230
|
- - ">="
|
230
231
|
- !ruby/object:Gem::Version
|
231
232
|
version: '0'
|
232
233
|
requirements: []
|
233
|
-
rubygems_version: 3.
|
234
|
+
rubygems_version: 3.4.10
|
234
235
|
signing_key:
|
235
236
|
specification_version: 4
|
236
237
|
summary: Testing framework for OpenStudio measures
|