spectre-core 1.12.2 → 1.12.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/exe/spectre +40 -11
- data/lib/spectre/assertion.rb +2 -2
- data/lib/spectre/curl.rb +5 -2
- data/lib/spectre/logger/file.rb +1 -1
- data/lib/spectre/reporter/console.rb +2 -2
- data/lib/spectre/reporter/junit.rb +6 -4
- data/lib/spectre.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c90860f8fafa6a00e51d72bfe917ea12b6ccf5d040d0696ab2701d0222375930
|
4
|
+
data.tar.gz: 40b26f956b3b9f363b2e87eb913542f1c57ef6cf9981035fcd54b42b765f5d42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 93f9d8f9cd6266c53e6f91aab1d80faf3d1ae07550bf97a489e25e2597e57d8fea05b2c26637513bd80fd5824bad145f5121d25bd5a53c3c02302895a7cf9f33
|
7
|
+
data.tar.gz: 32f36474db3f486a6f36ea02ec0c2291e300be67f5f6eb13ce40e73ae0af19db56cd7a34b22ec3c18cae07f3de14f4f90ccbda03f61eed3a3a1a0ff51dfb789e
|
data/exe/spectre
CHANGED
@@ -72,9 +72,10 @@ DEFAULT_CONFIG = {
|
|
72
72
|
|
73
73
|
|
74
74
|
cmd_options = {}
|
75
|
+
property_overrides = {}
|
75
76
|
|
76
77
|
opt_parser = OptionParser.new do |opts|
|
77
|
-
|
78
|
+
opts.banner = %{Spectre #{Spectre::VERSION}
|
78
79
|
|
79
80
|
Usage: spectre [command] [options]
|
80
81
|
|
@@ -83,6 +84,7 @@ Commands:
|
|
83
84
|
run Run specs (default)
|
84
85
|
show Print current environment settings
|
85
86
|
dump Dumps the given environment in YAML format to console
|
87
|
+
cleanup Will remove all generated files (e.g. logs and reports)
|
86
88
|
init Initializes a new spectre project
|
87
89
|
|
88
90
|
Specific options:}
|
@@ -132,17 +134,24 @@ Specific options:}
|
|
132
134
|
end
|
133
135
|
|
134
136
|
opts.on('-p KEY=VAL', '--property KEY=VAL', "Override config option. Use `spectre show` to get list of available options") do |option|
|
135
|
-
key, val = option.split
|
136
|
-
val = val.split
|
137
|
-
val = ['true', '1'].include? val if [true, false].include?
|
137
|
+
key, val = option.split('=')
|
138
|
+
val = val.split(',') if DEFAULT_CONFIG[key].is_a? Array
|
139
|
+
val = ['true', '1'].include? val if [true, false].include?(DEFAULT_CONFIG[key])
|
138
140
|
val = val.to_i if DEFAULT_CONFIG[key].is_a? Integer
|
139
|
-
cmd_options[key] = val
|
140
141
|
|
141
|
-
|
142
|
-
|
143
|
-
|
142
|
+
opt_path = key.split('.')
|
143
|
+
|
144
|
+
curr_opt = property_overrides
|
145
|
+
|
146
|
+
opt_path.each_with_index do |part, i|
|
147
|
+
if i == opt_path.count-1
|
148
|
+
curr_opt[part] = val
|
149
|
+
break
|
150
|
+
end
|
151
|
+
|
152
|
+
curr_opt[part] = {} unless curr_opt.key?(part)
|
153
|
+
curr_opt = curr_opt[part]
|
144
154
|
end
|
145
|
-
curr_opt = val
|
146
155
|
end
|
147
156
|
|
148
157
|
opts.separator "\nCommon options:"
|
@@ -187,7 +196,6 @@ end
|
|
187
196
|
|
188
197
|
cfg.deep_merge! cmd_options
|
189
198
|
|
190
|
-
|
191
199
|
###########################################
|
192
200
|
# Load Environment
|
193
201
|
###########################################
|
@@ -224,7 +232,10 @@ cfg['env_partial_patterns'].each do |pattern|
|
|
224
232
|
end
|
225
233
|
|
226
234
|
env = envs[cfg['environment']]
|
227
|
-
cfg.
|
235
|
+
cfg.deep_merge! env if env
|
236
|
+
|
237
|
+
# Merge property overrides after environment load to give it higher priority
|
238
|
+
cfg.deep_merge! property_overrides
|
228
239
|
|
229
240
|
|
230
241
|
String.colored! if cfg['colored']
|
@@ -392,6 +403,24 @@ if 'dump' == action
|
|
392
403
|
end
|
393
404
|
|
394
405
|
|
406
|
+
###########################################
|
407
|
+
# Cleanup
|
408
|
+
###########################################
|
409
|
+
|
410
|
+
|
411
|
+
if 'cleanup' == action
|
412
|
+
log_file_pattern = cfg['log_file'].gsub('<date>', '*')
|
413
|
+
|
414
|
+
Dir.glob(log_file_pattern).each do |log_file|
|
415
|
+
File.delete(log_file)
|
416
|
+
end
|
417
|
+
|
418
|
+
Dir.glob(File.join cfg['out_path'], '/*').each do |out_file|
|
419
|
+
File.delete(out_file)
|
420
|
+
end
|
421
|
+
end
|
422
|
+
|
423
|
+
|
395
424
|
###########################################
|
396
425
|
# Init
|
397
426
|
###########################################
|
data/lib/spectre/assertion.rb
CHANGED
@@ -52,7 +52,7 @@ module Spectre
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def should_not_be_empty
|
55
|
-
raise AssertionFailure.new('The
|
55
|
+
raise AssertionFailure.new('The value does not exist', 'nil')
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
@@ -247,7 +247,7 @@ module Spectre
|
|
247
247
|
raise AssertionFailure.new(e.message, e.expected, e.actual, desc), cause: nil
|
248
248
|
rescue Exception => e
|
249
249
|
Logger.log_status(desc, Logger::Status::ERROR)
|
250
|
-
raise AssertionFailure.new("An unexpected error
|
250
|
+
raise AssertionFailure.new("An unexpected error occurred during expectation: #{e.message}", nil, nil, desc), cause: e
|
251
251
|
end
|
252
252
|
end
|
253
253
|
|
data/lib/spectre/curl.rb
CHANGED
@@ -301,7 +301,10 @@ module Spectre::Curl
|
|
301
301
|
|
302
302
|
req_log = "[>] #{req_id} #{req['method']} #{uri}\n"
|
303
303
|
req_log += header_to_s(req['headers'])
|
304
|
-
|
304
|
+
|
305
|
+
if req[:body] != nil and not req[:body].empty?
|
306
|
+
req_log += try_format_json(req['body'], pretty: true)
|
307
|
+
end
|
305
308
|
|
306
309
|
@@logger.info(req_log)
|
307
310
|
|
@@ -329,7 +332,7 @@ module Spectre::Curl
|
|
329
332
|
|
330
333
|
exit_code = wait_thr.value.exitstatus
|
331
334
|
|
332
|
-
raise Exception.new "An error
|
335
|
+
raise Exception.new "An error occurred while executing curl:\n#{debug_log.lines.map { |x| not x.empty? }}" unless exit_code == 0
|
333
336
|
|
334
337
|
# Parse protocol, version, status code and status message from response
|
335
338
|
match = /^(?<protocol>[A-Za-z0-9]+)\/(?<version>\d+\.?\d*) (?<code>\d+) (?<message>.*)/.match result
|
data/lib/spectre/logger/file.rb
CHANGED
@@ -79,7 +79,7 @@ module Spectre
|
|
79
79
|
|
80
80
|
def log_error spec, exception
|
81
81
|
file, line = exception.backtrace[0].match(/(.*\.rb):(\d+)/).captures
|
82
|
-
@file_log.error "An unexpected error
|
82
|
+
@file_log.error "An unexpected error occurred at '#{file}:#{line}' while running spec '#{spec.name}': [#{exception.class}] #{exception.message}\n#{exception.backtrace.join "\n"}"
|
83
83
|
end
|
84
84
|
|
85
85
|
def log_skipped spec
|
@@ -21,7 +21,6 @@ module Spectre::Reporter
|
|
21
21
|
if run_info.failure
|
22
22
|
report_str += " Expected #{run_info.failure.expectation}"
|
23
23
|
report_str += " with #{run_info.data}" if run_info.data
|
24
|
-
report_str += " during #{spec.context.__desc}" if spec.context.__desc
|
25
24
|
|
26
25
|
report_str += " but it failed"
|
27
26
|
|
@@ -40,7 +39,7 @@ module Spectre::Reporter
|
|
40
39
|
failures += 1
|
41
40
|
|
42
41
|
else
|
43
|
-
report_str += " but an unexpected error
|
42
|
+
report_str += " but an unexpected error occurred during run\n"
|
44
43
|
report_str += format_exception(run_info.error)
|
45
44
|
errors += 1
|
46
45
|
end
|
@@ -68,6 +67,7 @@ module Spectre::Reporter
|
|
68
67
|
|
69
68
|
def format_title run_info
|
70
69
|
title = run_info.spec.subject.desc
|
70
|
+
title += " #{run_info.spec.context.__desc}" if run_info.spec.context.__desc
|
71
71
|
title += ' ' + run_info.spec.desc
|
72
72
|
title += " (#{'%.3f' % run_info.duration}s)"
|
73
73
|
title += " [#{run_info.spec.name}]"
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'CGI'
|
2
|
+
|
1
3
|
# https://llg.cubic.org/docs/junit/
|
2
4
|
# Azure mappings: https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/test/publish-test-results?view=azure-devops&tabs=junit%2Cyaml
|
3
5
|
|
@@ -22,11 +24,11 @@ module Spectre::Reporter
|
|
22
24
|
errors = run_infos.select { |x| x.error != nil }
|
23
25
|
skipped = run_infos.select { |x| x.skipped? }
|
24
26
|
|
25
|
-
xml_str += '<testsuite package="' + subject.desc + '" id="' + suite_id.to_s + '" name="' + subject.desc + '" timestamp="' + datetime + '" tests="' + run_infos.count.to_s + '" failures="' + failures.count.to_s + '" errors="' + errors.count.to_s + '" skipped="' + skipped.count.to_s + '">'
|
27
|
+
xml_str += '<testsuite package="' + CGI::escapeHTML(subject.desc) + '" id="' + CGI::escapeHTML(suite_id.to_s) + '" name="' + CGI::escapeHTML(subject.desc) + '" timestamp="' + datetime + '" tests="' + run_infos.count.to_s + '" failures="' + failures.count.to_s + '" errors="' + errors.count.to_s + '" skipped="' + skipped.count.to_s + '">'
|
26
28
|
suite_id += 1
|
27
29
|
|
28
30
|
run_infos.each do |run_info|
|
29
|
-
xml_str += '<testcase classname="' + run_info.spec.file.to_s + '" name="' + run_info.spec.desc + '" timestamp="' + run_info.started.to_s + '" time="' + ('%.3f' % run_info.duration) + '">'
|
31
|
+
xml_str += '<testcase classname="' + CGI::escapeHTML(run_info.spec.file.to_s) + '" name="' + CGI::escapeHTML(run_info.spec.desc) + '" timestamp="' + run_info.started.to_s + '" time="' + ('%.3f' % run_info.duration) + '">'
|
30
32
|
|
31
33
|
if run_info.failure and !run_info.failure.cause
|
32
34
|
failure_message = "Expected #{run_info.failure.expectation}"
|
@@ -38,7 +40,7 @@ module Spectre::Reporter
|
|
38
40
|
failure_message += " but it failed"
|
39
41
|
end
|
40
42
|
|
41
|
-
xml_str += '<failure message="' + failure_message.gsub('"', '`') + '"></failure>'
|
43
|
+
xml_str += '<failure message="' + CGI::escapeHTML(failure_message.gsub('"', '`')) + '"></failure>'
|
42
44
|
end
|
43
45
|
|
44
46
|
|
@@ -49,7 +51,7 @@ module Spectre::Reporter
|
|
49
51
|
failure_message = error.message
|
50
52
|
text = error.backtrace.join "\n"
|
51
53
|
|
52
|
-
xml_str += '<error message="' + failure_message.gsub('"', '`') + '" type="' + type + '">'
|
54
|
+
xml_str += '<error message="' + CGI::escapeHTML(failure_message.gsub('"', '`')) + '" type="' + type + '">'
|
53
55
|
xml_str += '<![CDATA[' + text + ']]>'
|
54
56
|
xml_str += '</error>'
|
55
57
|
end
|
data/lib/spectre.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spectre-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.12.
|
4
|
+
version: 1.12.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Neubauer
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-03-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ectoplasm
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.2.
|
19
|
+
version: 1.2.1
|
20
20
|
type: :runtime
|
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.2.
|
26
|
+
version: 1.2.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: jsonpath
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|