fastlane-plugin-test_center 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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