xcknife 0.6.3 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,29 @@
1
+ require 'rexml/document'
2
+
3
+ module XCKnife
4
+ module XcschemeAnalyzer
5
+ extend self
6
+
7
+ def extract_environment_variables(xscheme_data)
8
+ ret = {}
9
+ xml_root = REXML::Document.new(xscheme_data).root
10
+
11
+
12
+ action = xml_root.elements["//TestAction"]
13
+ return ret if action.nil?
14
+ if action.attributes['shouldUseLaunchSchemeArgsEnv'] == "YES"
15
+ action = xml_root.elements["//LaunchAction"]
16
+ end
17
+ return ret if action.nil?
18
+ env_elements = action.elements[".//EnvironmentVariables"]
19
+ return ret if env_elements.nil?
20
+ env_elements.elements.each do |e|
21
+ attrs = e.attributes
22
+ if attrs["isEnabled"] == "YES"
23
+ ret[attrs["key"]] = attrs["value"]
24
+ end
25
+ end
26
+ ret
27
+ end
28
+ end
29
+ end
@@ -1,4 +1,5 @@
1
- require 'pp'
1
+ require 'set'
2
+
2
3
  module XCKnife
3
4
  module XCToolCmdHelper
4
5
  def only_arguments_for_a_partition_set(output_type, partition_set)
@@ -24,17 +25,41 @@ module XCKnife
24
25
  end
25
26
 
26
27
  # only-testing is available since Xcode 8
27
- def xcodebuild_only_arguments(single_partition)
28
- single_partition.flat_map do |test_target, classes|
28
+ def xcodebuild_only_arguments(single_partition, meta_partition = nil)
29
+ only_targets = if meta_partition
30
+ single_partition.keys.to_set & meta_partition.flat_map(&:keys).group_by(&:to_s).select{|_,v| v.size == 1 }.map(&:first).to_set
31
+ else
32
+ Set.new
33
+ end
34
+
35
+ only_target_arguments = only_targets.sort.map { |test_target| "-only-testing:#{test_target}" }
36
+
37
+ only_class_arguments = single_partition.flat_map do |test_target, classes|
38
+ next [] if only_targets.include?(test_target)
39
+
29
40
  classes.sort.map do |clazz|
30
41
  "-only-testing:#{test_target}/#{clazz}"
31
42
  end
43
+ end.sort
44
+
45
+ only_target_arguments + only_class_arguments
46
+ end
32
47
 
48
+ # skip-testing is available since Xcode 8
49
+ def xcodebuild_skip_arguments(single_partition, test_time_for_partitions)
50
+ excluded_targets = test_time_for_partitions.keys.to_set - single_partition.keys.to_set
51
+ skipped_target_arguments = excluded_targets.sort.map { |test_target| "-skip-testing:#{test_target}" }
52
+
53
+ skipped_classes_arguments = single_partition.flat_map do |test_target, classes|
54
+ all_classes = test_time_for_partitions[test_target].keys.to_set
55
+ (all_classes - classes.to_set).sort.map { |test_class| "-skip-testing:#{test_target}/#{test_class}" }
33
56
  end
57
+
58
+ skipped_target_arguments + skipped_classes_arguments
34
59
  end
35
60
 
36
61
  def xcodebuild_only_arguments_for_a_partition_set(partition_set)
37
62
  partition_set.map { |partition| xctool_only_arguments(partition) }
38
63
  end
39
64
  end
40
- end
65
+ end
@@ -17,9 +17,6 @@ Gem::Specification.new do |s|
17
17
  Works by leveraging xctool's json-streams timing and test data.
18
18
  DESCRIPTION
19
19
 
20
- # Only allow gem to be pushed to https://rubygems.org
21
- s.metadata["allowed_push_host"] = 'https://rubygems.org'
22
-
23
20
  s.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR).reject { |f| f =~ /^spec/} + ["TestDumper/TestDumper.dylib"]
24
21
  s.bindir = 'bin'
25
22
  s.executables = ['xcknife', 'xcknife-min', 'xcknife-test-dumper']
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xcknife
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.3
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Ribeiro
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-13 00:00:00.000000000 Z
11
+ date: 2020-06-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,18 +38,20 @@ extensions: []
38
38
  extra_rdoc_files: []
39
39
  files:
40
40
  - ".gitignore"
41
- - ".gitmodules"
42
41
  - ".rspec"
43
42
  - ".ruby-version"
44
43
  - ".travis.yml"
45
44
  - CONTRIBUTING.md
46
45
  - Gemfile
46
+ - Gemfile.lock
47
47
  - LICENSE
48
+ - OWNERS.yml
48
49
  - README.md
49
50
  - Rakefile
50
51
  - TestDumper/README.md
51
52
  - TestDumper/TestDumper.dylib
52
53
  - TestDumper/TestDumper.xcodeproj/project.pbxproj
54
+ - TestDumper/TestDumper.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
53
55
  - TestDumper/TestDumper.xcodeproj/xcshareddata/xcschemes/TestDumper.xcscheme
54
56
  - TestDumper/TestDumper/Info.plist
55
57
  - TestDumper/TestDumper/Initialize.m
@@ -69,13 +71,13 @@ files:
69
71
  - lib/xcknife/runner.rb
70
72
  - lib/xcknife/stream_parser.rb
71
73
  - lib/xcknife/test_dumper.rb
74
+ - lib/xcknife/xcscheme_analyzer.rb
72
75
  - lib/xcknife/xctool_cmd_helper.rb
73
76
  - xcknife.gemspec
74
77
  homepage: https://github.com/square/xcknife
75
78
  licenses:
76
79
  - Apache-2.0
77
- metadata:
78
- allowed_push_host: https://rubygems.org
80
+ metadata: {}
79
81
  post_install_message:
80
82
  rdoc_options: []
81
83
  require_paths:
@@ -91,8 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
93
  - !ruby/object:Gem::Version
92
94
  version: '0'
93
95
  requirements: []
94
- rubyforge_project:
95
- rubygems_version: 2.4.5.1
96
+ rubygems_version: 3.0.8
96
97
  signing_key:
97
98
  specification_version: 4
98
99
  summary: Simple tool for optimizing XCTest runs across machines
@@ -1,3 +0,0 @@
1
- [submodule "spec/xcknife-exemplar"]
2
- path = spec/xcknife-exemplar
3
- url = https://github.com/danielribeiro/xcknife-exemplar.git