xctest_list 0.0.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/xctest_list.rb +37 -8
  3. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e430608a8b8ac110a40357cc0b68493a32bfeb2b
4
- data.tar.gz: b9580c7b4b7e214d0995fe117939555cf7fc44ad
3
+ metadata.gz: aeb06d21421204888562b72281a9fb7efd691324
4
+ data.tar.gz: 17212dbff04fe9604bfd1dd901109165f01ca79c
5
5
  SHA512:
6
- metadata.gz: b3cede873225df876d2453624f1ff948ed3cd3dbee8fd2943ef2130022cbff99b0edb2489fe4a60d4895e82ce63019932f707a9dddfbd46e02b17852eba4a3aa
7
- data.tar.gz: 88447d663de2e64d9f7b38ffe3eca766d1c4b2753f6851667af7e1afa271114dc0a8021166c1f6d979a21b2f24ef7ea454ce92e99382aef3dcc276ae53567d4f
6
+ metadata.gz: f3845223a72733c488073e4a441f6bf74a1aa916b60f22aa4b74d3941021605589e2f0c8211ce6e7454ccdd3b4a5a4e08e9fb207526f1403ca0e68f3e361e64f
7
+ data.tar.gz: 706b3f8803ab8898221cf5ccefc8b4cd5c5219d486096df1d0e4c7846f0dcfb2a8012943dc62ee67eb81c7baf6396df8d31e87c2756135831b9f3a33f2711a5d
data/lib/xctest_list.rb CHANGED
@@ -1,15 +1,21 @@
1
- # NSString *swiftNmCmdline = @"nm -gU '%@' | cut -d' ' -f3 | xargs xcrun swift-demangle | cut -d' ' -f3 | grep -e '[\\.|_]'test";
2
-
3
- require 'pathname'
4
1
 
2
+ # A class to parse xctest bundles and return a list of tests that
3
+ # are in the bundle's binary.
5
4
  class XCTestList
5
+ # refactored into its own method to allow mocking in the spec
6
+ def self.system(command)
7
+ `#{command}`
8
+ end
9
+
10
+ # validate that the basic bundle parts exist
6
11
  def self.validate_bundle(xctest_bundle_path)
7
- raise "Cannot find xctest bundle at path '#{xctest_bundle_path}'" unless Dir.exist?(xctest_bundle_path)
12
+ raise "Cannot find xctest bundle at path: '#{xctest_bundle_path}'" unless Dir.exist?(xctest_bundle_path)
8
13
 
9
14
  is_xctest_bundle = File.extname(xctest_bundle_path) == '.xctest'
10
15
  raise "Invalid xctest bundle given: '#{xctest_bundle_path}'" unless is_xctest_bundle
11
16
  end
12
17
 
18
+ # add the expected binary to the bundle path and validate that it exists
13
19
  def self.binary_path(xctest_bundle_path)
14
20
  validate_bundle(xctest_bundle_path)
15
21
 
@@ -21,16 +27,39 @@ class XCTestList
21
27
  xctest_binary_path
22
28
  end
23
29
 
24
- def self.tests(xctest_bundle_path)
25
- objc_symbols = 'nm -U '
26
- objc_symbols << "'#{binary_path(xctest_bundle_path)}'"
30
+ # find the Objective-C symbols in the bundle's binary
31
+ def self.objc_tests(xctest_bundle_path)
32
+ objc_symbols_cmd = 'nm -U '
33
+ objc_symbols_cmd << "'#{binary_path(xctest_bundle_path)}'"
27
34
 
28
35
  tests = []
29
- `#{objc_symbols}`.each_line do |line|
36
+ system(objc_symbols_cmd).each_line do |line|
30
37
  if / t -\[(?<testclass>\w+) (?<testmethod>test\w+)\]/ =~ line
31
38
  tests << "#{testclass}/#{testmethod}"
32
39
  end
33
40
  end
34
41
  tests
35
42
  end
43
+
44
+ # cleanup the Swift nm output to only provide the swift symbols
45
+ def self.swift_symbols(swift_symbols_cmd_output)
46
+ swift_symbols_cmd_output.gsub(/^.* .* (.*)$/, '\1')
47
+ end
48
+
49
+ # find the Swift symbols in the bundle's binary
50
+ def self.swift_tests(xctest_bundle_path)
51
+ swift_symbols_cmd_output = system("nm -gU '#{binary_path(xctest_bundle_path)}'")
52
+ tests = []
53
+ swift_symbols(swift_symbols_cmd_output).each_line do |symbol|
54
+ if /\w+\.(?<testclass>[^\.]+)\.(?<testmethod>test[^\(]+)/ =~ system("xcrun swift-demangle #{symbol}")
55
+ tests << "#{testclass}/#{testmethod}"
56
+ end
57
+ end
58
+ tests
59
+ end
60
+
61
+ # find the Objective-C and Swift tests in the binary's bundle
62
+ def self.tests(xctest_bundle_path)
63
+ objc_tests(xctest_bundle_path) | swift_tests(xctest_bundle_path)
64
+ end
36
65
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xctest_list
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.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-09-22 00:00:00.000000000 Z
11
+ date: 2017-09-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A gem to retrieve the tests in an iOS xctest bundle
14
- email: lyndsey.ferguson@gmail.com
14
+ email: ldf.public+github@outlook.com
15
15
  executables: []
16
16
  extensions: []
17
17
  extra_rdoc_files: []