fastlane-plugin-test_center 3.8.6 → 3.8.7
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/lib/fastlane/plugin/test_center/actions/collate_test_result_bundles.rb +60 -0
- data/lib/fastlane/plugin/test_center/helper/html_test_report.rb +10 -8
- data/lib/fastlane/plugin/test_center/helper/multi_scan_manager/report_collator.rb +4 -1
- data/lib/fastlane/plugin/test_center/helper/multi_scan_manager/retrying_scan_helper.rb +3 -0
- data/lib/fastlane/plugin/test_center/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e79e02f37cfc5ea26854f135fad277dc194d225927b3a6f03ce8a43ea603ae20
|
|
4
|
+
data.tar.gz: 598759f0e60635a798a08d1c238f699a068e0fd6ab34ef286990a4bfe8565711
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ef2ea4f6585fa7b363a9c5b3c7d543052ecb5dcfde31e7dd9676de84e1d23d2f11541acebdaf26ca1cc01effadcdc0489cc20935dc0a3f16e769a059ea0f1717
|
|
7
|
+
data.tar.gz: c8ceb6f97190d96588dc995a201aa1ff87a334968cbfb0a7237a28ba5fe32ccebb789348d2f5f3bf26bef6a7246ea7fea10d7b8bd38dfcdb47fba137b9ac48a7
|
|
@@ -6,6 +6,9 @@ module Fastlane
|
|
|
6
6
|
def self.run(params)
|
|
7
7
|
test_result_bundlepaths = params[:bundles]
|
|
8
8
|
base_bundle_path = test_result_bundlepaths[0]
|
|
9
|
+
|
|
10
|
+
return if collate_version3_formatted_bundles(params)
|
|
11
|
+
|
|
9
12
|
if test_result_bundlepaths.size > 1
|
|
10
13
|
base_bundle_path = Dir.mktmpdir(['base', '.test_result'])
|
|
11
14
|
FileUtils.cp_r(File.join(test_result_bundlepaths[0], '.'), base_bundle_path)
|
|
@@ -19,6 +22,63 @@ module Fastlane
|
|
|
19
22
|
UI.message("Finished collating test_result bundle to '#{params[:collated_bundle]}'")
|
|
20
23
|
end
|
|
21
24
|
|
|
25
|
+
def self.collate_version3_formatted_bundles(params)
|
|
26
|
+
test_result_bundlepaths = params[:bundles]
|
|
27
|
+
found_version3_format_bundle = test_result_bundlepaths.any? do |test_result_bundlepath|
|
|
28
|
+
is_bundle_format_3?(test_result_bundlepath)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
if found_version3_format_bundle
|
|
32
|
+
FastlaneCore::UI.verbose("result bundles are of format version 3")
|
|
33
|
+
`xcrun xcresulttool version 2> /dev/null`
|
|
34
|
+
unless $?.exitstatus.zero?
|
|
35
|
+
UI.user_error!("""
|
|
36
|
+
Unable to collate version 3 format test_result bundle without the xcrun xcresulttool.
|
|
37
|
+
Please install and select Xcode 11, and then run the command again.""")
|
|
38
|
+
end
|
|
39
|
+
xcresulttool_merge(params)
|
|
40
|
+
end
|
|
41
|
+
FastlaneCore::UI.verbose("result bundles are NOT of format version 3")
|
|
42
|
+
return false
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def self.xcresulttool_merge(params)
|
|
46
|
+
collated_bundlepath = File.expand_path(params[:collated_bundle])
|
|
47
|
+
Dir.mktmpdir do |dir|
|
|
48
|
+
tmp_xcresult_bundlepaths = []
|
|
49
|
+
test_result_bundlepaths.each do |test_result_bundlepath|
|
|
50
|
+
bundlename = File.basename(test_result_bundlepath)
|
|
51
|
+
# Note: the `xcresulttool` requires that the bundle names end in `.xcresult`.
|
|
52
|
+
tmp_xcresult_bundlepath = Dir.mktmpdir([bundlename, '.xcresult'])
|
|
53
|
+
FileUtils.rmdir([tmp_xcresult_bundlepath])
|
|
54
|
+
FileUtils.symlink(test_result_bundlepath, "#{tmp_xcresult_bundlepath}", force: true)
|
|
55
|
+
tmp_xcresult_bundlepaths << tmp_xcresult_bundlepath
|
|
56
|
+
end
|
|
57
|
+
tmp_collated_bundlepath = File.join(dir, File.basename(collated_bundlepath))
|
|
58
|
+
xcresulttool_cmd = 'xcrun xcresulttool merge '
|
|
59
|
+
xcresulttool_cmd += tmp_xcresult_bundlepaths.map(&:shellescape).join(' ')
|
|
60
|
+
xcresulttool_cmd += " --output-path #{tmp_collated_bundlepath}"
|
|
61
|
+
UI.message(xcresulttool_cmd)
|
|
62
|
+
sh(xcresulttool_cmd)
|
|
63
|
+
FileUtils.safe_unlink(tmp_xcresult_bundlepaths)
|
|
64
|
+
FileUtils.rm_rf(collated_bundlepath)
|
|
65
|
+
FileUtils.cp_r(tmp_collated_bundlepath, collated_bundlepath)
|
|
66
|
+
UI.message("Finished collating test_result bundle to '#{collated_bundlepath}'")
|
|
67
|
+
return true
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def self.is_bundle_format_3?(bundle_path)
|
|
72
|
+
infoplist_filepath = File.join(bundle_path, 'Info.plist')
|
|
73
|
+
if File.exist?(infoplist_filepath)
|
|
74
|
+
base_infoplist = Plist.parse_xml(infoplist_filepath)
|
|
75
|
+
if base_infoplist.key?('version')
|
|
76
|
+
return true if base_infoplist.dig('version', 'major') > 2
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
false
|
|
80
|
+
end
|
|
81
|
+
|
|
22
82
|
def self.collate_bundles(base_bundle_path, other_bundle_path)
|
|
23
83
|
Dir.foreach(other_bundle_path) do |child_item|
|
|
24
84
|
if child_item == 'Info.plist'
|
|
@@ -48,14 +48,14 @@ module TestCenter
|
|
|
48
48
|
def test_count
|
|
49
49
|
REXML::XPath.first(@root, ".//*[@id = 'counters']//*[@id='test-count']/*[@class = 'number']/text()").to_s.to_i
|
|
50
50
|
end
|
|
51
|
-
|
|
51
|
+
|
|
52
52
|
def set_test_count(test_count)
|
|
53
53
|
test_count_element = REXML::XPath.first(@root, ".//*[@id = 'counters']//*[@id='test-count']/*[@class = 'number']/text()")
|
|
54
54
|
test_count_element.value = test_count.to_s
|
|
55
55
|
end
|
|
56
|
-
|
|
56
|
+
|
|
57
57
|
def update_test_count
|
|
58
|
-
testcase_elements = REXML::XPath.match(@root, "
|
|
58
|
+
testcase_elements = REXML::XPath.match(@root, "//*[contains(@class, 'tests')]//*[contains(concat(' ', @class, ' '), ' test ')]").uniq
|
|
59
59
|
set_test_count(testcase_elements.size)
|
|
60
60
|
end
|
|
61
61
|
|
|
@@ -89,7 +89,7 @@ module TestCenter
|
|
|
89
89
|
"contains(concat(' ', @class, ' '), ' failing ')"
|
|
90
90
|
].join(' and ')
|
|
91
91
|
|
|
92
|
-
failing_testcase_elements = REXML::XPath.match(@root, "
|
|
92
|
+
failing_testcase_elements = REXML::XPath.match(@root, ".//*[#{xpath_class_attributes}]")
|
|
93
93
|
set_fail_count(failing_testcase_elements.size)
|
|
94
94
|
end
|
|
95
95
|
|
|
@@ -143,8 +143,11 @@ module TestCenter
|
|
|
143
143
|
end
|
|
144
144
|
|
|
145
145
|
def testcase_with_title(title)
|
|
146
|
-
|
|
147
|
-
|
|
146
|
+
found_title_element = REXML::XPath.match(@root, ".//*[contains(@class, 'tests')]//*[contains(concat(' ', @class, ' '), ' test ')]//*[@class='title']").find { |n| n.text.to_s.strip == title }
|
|
147
|
+
if found_title_element
|
|
148
|
+
testcase_element = found_title_element.parent.parent
|
|
149
|
+
TestCase.new(testcase_element) unless testcase_element.nil?
|
|
150
|
+
end
|
|
148
151
|
end
|
|
149
152
|
|
|
150
153
|
def passing?
|
|
@@ -243,8 +246,7 @@ module TestCenter
|
|
|
243
246
|
"contains(concat(' ', @class, ' '), ' failing ')",
|
|
244
247
|
"contains(concat(' ', @class, ' '), ' #{title} ')"
|
|
245
248
|
].join(' and ')
|
|
246
|
-
|
|
247
|
-
REXML::XPath.first(@root.parent, ".//[#{xpath_class_attributes}]")
|
|
249
|
+
REXML::XPath.first(@root.parent, ".//*[#{xpath_class_attributes}]")
|
|
248
250
|
end
|
|
249
251
|
|
|
250
252
|
def remove_failure_details
|
|
@@ -114,7 +114,10 @@ module TestCenter
|
|
|
114
114
|
return unless @result_bundle
|
|
115
115
|
|
|
116
116
|
test_result_bundlepaths = sort_globbed_files("#{@source_reports_directory_glob}/#{@scheme}*.test_result")
|
|
117
|
-
|
|
117
|
+
result_bundlename_suffix = ''
|
|
118
|
+
result_bundlename_suffix = "-#{@reportnamer.report_count + 1}" if @reportnamer.report_count > 0
|
|
119
|
+
|
|
120
|
+
collated_test_result_bundlepath = File.absolute_path("#{File.join(@output_directory, @scheme)}#{result_bundlename_suffix}.test_result")
|
|
118
121
|
if test_result_bundlepaths.size > 1
|
|
119
122
|
FastlaneCore::UI.verbose("Collating test_result bundles #{test_result_bundlepaths}")
|
|
120
123
|
config = create_config(
|
|
@@ -40,6 +40,9 @@ module TestCenter
|
|
|
40
40
|
def delete_xcresults
|
|
41
41
|
derived_data_path = File.expand_path(@options[:derived_data_path] || Scan.config[:derived_data_path])
|
|
42
42
|
xcresults = Dir.glob("#{derived_data_path}/Logs/Test/*.xcresult")
|
|
43
|
+
if FastlaneCore::Helper.xcode_at_least?('11.0.0')
|
|
44
|
+
xcresults += Dir.glob("#{output_directory}/*.xcresult")
|
|
45
|
+
end
|
|
43
46
|
FastlaneCore::UI.verbose("Deleting xcresults:")
|
|
44
47
|
xcresults.each do |xcresult|
|
|
45
48
|
FastlaneCore::UI.verbose(" #{xcresult}")
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fastlane-plugin-test_center
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.8.
|
|
4
|
+
version: 3.8.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Lyndsey Ferguson
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-10-
|
|
11
|
+
date: 2019-10-17 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: json
|