fastlane-plugin-test_center 0.2.1 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a7b838a1da029f0673e68c625bd6910338027d26
4
- data.tar.gz: 0a6ad56256d46981bdc0bb065de6979d44411cfa
3
+ metadata.gz: f408456a45d4decc0519f804501acdb10da66e91
4
+ data.tar.gz: 771d1e7586c2a514aa1e0e4b7ee4b2230ad92bea
5
5
  SHA512:
6
- metadata.gz: c07a55187f358a467997940dabcc534bdec80e4cca0f21a9ef2c6141db67514b6ce53dc2bf6e134ac98f90e18e3c9ec9e50b8697478895287bef1411bc8281fc
7
- data.tar.gz: 5ce4c651801b2fa8821f3905b064cf3a12e23f884117e5d7158f98ff64ccfed1fd79ffc8cbcac40a6ba011ff98ef3f36dc3c4edab4dea01843c0a46ca946f93b
6
+ metadata.gz: 624872099352f31744380b7020c1de125306173cd9f0744401db5cee69689abc232ed24fd5b5aa914befde120624459dc22cfeb5a24af166df97374ac6a54ebb
7
+ data.tar.gz: f1bea4edbc9ddc37bb9b98224a56f030cdab43e5f43fc0f61f7939ef8ea3a589761695ca71e305b4d4f005c9f734435001251bd4f228f5f896a6ded6d375e9b0
@@ -6,7 +6,7 @@ module Fastlane
6
6
 
7
7
  class SuppressTestsAction < Action
8
8
  require 'xcodeproj'
9
-
9
+
10
10
  def self.run(params)
11
11
  project_path = params[:xcodeproj]
12
12
  tests_to_skip = params[:tests]
@@ -0,0 +1,150 @@
1
+ module Fastlane
2
+ module Actions
3
+ module SharedValues
4
+ SUPPRESS_TESTS_FROM_JUNIT_CUSTOM_VALUE = :SUPPRESS_TESTS_FROM_JUNIT_CUSTOM_VALUE
5
+ end
6
+
7
+ class SuppressTestsFromJunitAction < Action
8
+ def self.run(params)
9
+ project_path = params[:xcodeproj]
10
+ scheme = params[:scheme]
11
+
12
+ scheme_filepaths = Dir.glob("#{project_path}/{xcshareddata,xcuserdata}/**/xcschemes/#{scheme || '*'}.xcscheme")
13
+ if scheme_filepaths.length.zero?
14
+ UI.user_error!("Error: cannot find any scheme named #{scheme}") unless scheme.nil?
15
+ UI.user_error!("Error: cannot find any schemes in the Xcode project")
16
+ end
17
+
18
+ report_file = File.open(params[:junit]) { |f| REXML::Document.new(f) }
19
+ UI.user_error!("Malformed XML test report file given") if report_file.root.nil?
20
+ UI.user_error!("Valid XML file is not an Xcode test report") if report_file.get_elements('testsuites').empty?
21
+
22
+ if params[:suppress_type] == :failed
23
+ tests_per_target_to_suppress = failing_tests(report_file)
24
+ else
25
+ tests_per_target_to_suppress = passing_tests(report_file)
26
+ end
27
+
28
+ scheme_filepaths.each do |scheme_filepath|
29
+ is_dirty = false
30
+ xcscheme = Xcodeproj::XCScheme.new(scheme_filepath)
31
+
32
+ xcscheme.test_action.testables.each do |testable|
33
+ buildable_name = testable.buildable_references[0].buildable_name
34
+
35
+ tests_per_target_to_suppress[buildable_name].each do |test_to_skip|
36
+ skipped_test = Xcodeproj::XCScheme::TestAction::TestableReference::SkippedTest.new
37
+ skipped_test.identifier = test_to_skip
38
+ testable.add_skipped_test(skipped_test)
39
+ is_dirty = true
40
+ end
41
+ end
42
+ xcscheme.save! if is_dirty
43
+ end
44
+ end
45
+
46
+ def self.failing_tests(report_file)
47
+ tests = Hash.new { |hash, key| hash[key] = [] }
48
+
49
+ report_file.elements.each('*/testsuite/testcase/failure') do |failure_element|
50
+ testcase = failure_element.parent
51
+ testsuite_element = testcase.parent
52
+ buildable_name = buildable_name_from_testcase(testcase)
53
+
54
+ tests[buildable_name] << xctest_identifier(testcase)
55
+ # Remove all the failures from this in-memory xml file to make
56
+ # it easier to find the passing tests below
57
+ testsuite_element.delete_element testcase
58
+ end
59
+ tests
60
+ end
61
+
62
+ def self.passing_tests(report_file)
63
+ tests = Hash.new { |hash, key| hash[key] = [] }
64
+
65
+ report_file.elements.each('*/testsuite/testcase') do |testcase|
66
+ buildable_name = buildable_name_from_testcase(testcase)
67
+
68
+ tests[buildable_name] << xctest_identifier(testcase)
69
+ end
70
+ tests
71
+ end
72
+
73
+ def self.buildable_name_from_testcase(testcase)
74
+ testsuite_element = testcase.parent
75
+ buildable_element = testsuite_element.parent
76
+ buildable_element.attributes['name']
77
+ end
78
+
79
+ def self.xctest_identifier(testcase)
80
+ testcase_class = testcase.attributes['classname']
81
+ testcase_testmethod = testcase.attributes['name']
82
+
83
+ is_swift = testcase_class.include?('.')
84
+ testcase_class.gsub!(/.*\./, '')
85
+ testcase_testmethod << '()' if is_swift
86
+ "#{testcase_class}/#{testcase_testmethod}"
87
+ end
88
+
89
+ #####################################################
90
+ # @!group Documentation
91
+ #####################################################
92
+
93
+ def self.description
94
+ "Uses a junit xml report file to suppress either passing or failing tests in an Xcode Scheme"
95
+ end
96
+
97
+ def self.details
98
+ "To be added"
99
+ end
100
+
101
+ def self.available_options
102
+ [
103
+ FastlaneCore::ConfigItem.new(
104
+ key: :xcodeproj,
105
+ env_name: "FL_SUPPRESS_TESTS_FROM_JUNIT_XCODE_PROJECT", # The name of the environment variable
106
+ description: "The file path to the Xcode project file to modify", # a short description of this parameter
107
+ verify_block: proc do |path|
108
+ UI.user_error!("Error: Xcode project file path not given!") unless path and !path.empty?
109
+ UI.user_error!("Error: Xcode project '#{path}' not found!") unless Dir.exist?(path)
110
+ end
111
+ ),
112
+ FastlaneCore::ConfigItem.new(
113
+ key: :junit,
114
+ env_name: "FL_SUPPRESS_TESTS_FROM_JUNIT_JUNIT_REPORT", # The name of the environment variable
115
+ description: "The junit xml report file from which to collect the tests to suppress",
116
+ verify_block: proc do |path|
117
+ UI.user_error!("Error: cannot find the junit xml report file '#{path}'") unless File.exist?(path)
118
+ end
119
+ ),
120
+ FastlaneCore::ConfigItem.new(
121
+ key: :scheme,
122
+ optional: true,
123
+ env_name: "FL_SUPPRESS_TESTS_FROM_JUNIT_SCHEME_TO_UPDATE", # The name of the environment variable
124
+ description: "The Xcode scheme where the tests should be suppressed", # a short description of this parameter
125
+ verify_block: proc do |scheme_name|
126
+ UI.user_error!("Error: Xcode Scheme '#{scheme_name}' is not valid!") if scheme_name and scheme_name.empty?
127
+ end
128
+ ),
129
+ FastlaneCore::ConfigItem.new(
130
+ key: :suppress_type,
131
+ type: Symbol,
132
+ env_name: "FL_SUPPRESS_TESTS_FROM_JUNIT_SUPPRESS_TYPE", # The name of the environment variable
133
+ description: "Tests to suppress are either :failed or :passing", # a short description of this parameter
134
+ verify_block: proc do |type|
135
+ UI.user_error!("Error: suppress type ':#{type}' is invalid! Only :failed or :passing are valid types") unless %i[failed passing].include?(type)
136
+ end
137
+ )
138
+ ]
139
+ end
140
+
141
+ def self.authors
142
+ ["lyndsey-ferguson/@ldferguson"]
143
+ end
144
+
145
+ def self.is_supported?(platform)
146
+ platform == :ios
147
+ end
148
+ end
149
+ end
150
+ end
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module TestCenter
3
- VERSION = "0.2.1"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
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: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lyndsey Ferguson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-30 00:00:00.000000000 Z
11
+ date: 2017-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -132,6 +132,7 @@ files:
132
132
  - README.md
133
133
  - lib/fastlane/plugin/test_center.rb
134
134
  - lib/fastlane/plugin/test_center/actions/suppress_tests.rb
135
+ - lib/fastlane/plugin/test_center/actions/suppress_tests_from_junit.rb
135
136
  - lib/fastlane/plugin/test_center/actions/suppressed_tests.rb
136
137
  - lib/fastlane/plugin/test_center/actions/test_center_action.rb
137
138
  - lib/fastlane/plugin/test_center/helper/test_center_helper.rb