xcpretty 0.0.7 → 0.0.8

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: 06619c3a83d263be409e3bee7dc0a009109cf64b
4
- data.tar.gz: 8db1bce60835effe0b001a1830ee5ed0ba329674
3
+ metadata.gz: 5f16b8cdb8adbca7bab18e22d17e2cabe5206690
4
+ data.tar.gz: cb2aae6650997789d1ecdc78e90f8677447f95e0
5
5
  SHA512:
6
- metadata.gz: 35cb3372bbb59ce200426ac5004600fc9baa075d5521828b1251d5da537eece20e8f3ba56743b50ff23295d7a33ce8e3c15311ca2e0e8ccc387bf30c87e56f16
7
- data.tar.gz: ba72fb7e9c12f1c7570a20c38b1e08a3d93968af21ceb1adf41c2c676ec282e6fce5748e53617c4de9915cae63dfc544fb06d4b664a3a61fcd438a56f1fdbf4c
6
+ metadata.gz: 2868e89fa5c2df41b362696dd3aac87b66ebf3826f5d356a5d5a5722c75837cb29097f41cc941854103b59001b615eec9b29955bfedf4b8e4603089b36d5e5e1
7
+ data.tar.gz: c886ff1f3ddec6d5cf4313212ff49780ebeeb5e9365f02203dac0d6521788849cc90f678b29c8bf80dd86c15d76c18393dbbcab7274f3748b8d84d536463c292
data/.travis.yml CHANGED
@@ -1,6 +1,12 @@
1
1
  language: ruby
2
2
 
3
+ #travis workaround for bundler failing on 1.8.7
4
+ before_install:
5
+ - gem update --system 2.1.11
6
+ - gem --version
7
+
3
8
  rvm:
9
+ - 2.1.0
4
10
  - 2.0.0
5
11
  - 1.9.3
6
12
  - 1.8.7
data/CHANGELOG.md CHANGED
@@ -1,22 +1,31 @@
1
1
  # Changelog
2
2
 
3
- ## master
3
+ ## 0.0.8
4
+
5
+ ###### Bug Fixes
6
+
7
+ * show version if not piped [#39](https://github.com/mneorr/XCPretty/issues/39)
4
8
 
5
9
  ###### Enhancements
6
10
 
7
- * exit(1) if xcodebuild failure detected
11
+ * format linker failures (Undefined symbols for arch...)
12
+
8
13
 
14
+ ## 0.0.7
15
+
16
+ ###### Enhancements
17
+
18
+ * exit(1) if xcodebuild failure detected
9
19
  * Print compile errors nicely. Currently we support compiler erorrs,
10
20
  and Pods-not-installed errors. Missing mach-o-linker failures
11
-
12
21
  * Added support for loading arbitrary custom printers (experimental) |
13
22
  [Eloy Durán](https://github.com/alloy) |
14
23
  [#29](https://github.com/mneorr/xcpretty/pulls/29)
15
-
16
24
  * Show help banner in case no data is piped in |
17
25
  [Eloy Durán](https://github.com/alloy) |
18
26
  [#29](https://github.com/mneorr/xcpretty/pulls/29)
19
27
 
28
+
20
29
  ## 0.0.6
21
30
 
22
31
  ###### Enhancements
@@ -24,6 +33,7 @@
24
33
  * Added support for reporters
25
34
  * Added JUnit reporter
26
35
 
36
+
27
37
  ## 0.0.5
28
38
 
29
39
  ###### Bug Fixes
@@ -37,13 +47,9 @@
37
47
 
38
48
  * Prettier `--simple` output
39
49
  [Preview](https://travis-ci.org/allending/Kiwi/builds/15190533)
40
-
41
50
  * Removed Paint dependency
42
-
43
51
  * Better test failure formatting (added indentation, grouped by suite)
44
-
45
52
  * Added example of running tests continuously
46
-
47
53
  * Support for not using Unicode (`--no-utf`)
48
54
 
49
55
  ###### Bug Fixes
@@ -53,12 +59,13 @@
53
59
 
54
60
  ## 0.0.3
55
61
 
56
- - add Ruby 1.8 support
62
+ * add Ruby 1.8 support
57
63
 
58
64
  ## 0.0.2
59
65
 
60
- - add Ruby 1.9 support
66
+ * add Ruby 1.9 support
61
67
 
62
68
  ## 0.0.1
63
69
 
64
- - initial version
70
+ * initial version
71
+
data/bin/xcpretty CHANGED
@@ -62,12 +62,11 @@ OptionParser.new do |opts|
62
62
  end
63
63
  opts.on_tail('-h', '--help', 'Show this message') { puts opts; exit }
64
64
  opts.on_tail("-v", "--version", "Show version") { puts XCPretty::VERSION; exit }
65
+ opts.parse!
65
66
 
66
67
  if STDIN.tty?
67
68
  $stderr.puts opts.help
68
69
  exit 1
69
- else
70
- opts.parse!
71
70
  end
72
71
  end
73
72
 
@@ -122,10 +122,16 @@ Feature: Showing build output in simple format
122
122
  When I pipe to xcpretty with "--simple --color"
123
123
  Then I should see a red error message
124
124
 
125
- Scenario: Compilation fails because of syntax errors
126
- Given there was a syntax error
127
- When I pipe to xcpretty with "--simple --color"
128
- Then I should see a red compilation error
129
- And I should see a failed line
130
- And I should see a cyan cursor
125
+ Scenario: Compilation fails because of syntax errors
126
+ Given there was a syntax error
127
+ When I pipe to xcpretty with "--simple --color"
128
+ Then I should see a red compilation error
129
+ And I should see a failed line
130
+ And I should see a cyan cursor
131
+
132
+ Scenario: Linker fails with undefined symbols
133
+ Given the linker has failed with undefined symbols
134
+ When I pipe to xcpretty with "--simple --color"
135
+ Then I should see the undefined symbold message
136
+ And I should see the symbol and reference that caused failure
131
137
 
@@ -65,9 +65,11 @@ Given(/^podfile.lock wasn't in sync$/) do
65
65
  end
66
66
 
67
67
  Given(/^there was a syntax error$/) do
68
- SAMPLE_COMPILE_ERROR.split("\n").each do |line|
69
- add_run_input(line)
70
- end
68
+ add_run_input SAMPLE_COMPILE_ERROR
69
+ end
70
+
71
+ Given(/^the linker has failed with undefined symbols$/) do
72
+ add_run_input SAMPLE_UNDEFINED_SYMBOLS
71
73
  end
72
74
 
73
75
  When(/^I pipe to xcpretty with "(.*?)"$/) do |flags|
@@ -181,7 +183,7 @@ Then(/^I should not see the name of the test group$/) do
181
183
  end
182
184
 
183
185
  Then(/^I should see a red error message$/) do
184
- run_output.should include(red("⌦ ") + " " + red(SAMPLE_PODS_ERROR.gsub('error: ', '')))
186
+ run_output.should include(red("⌦ " + SAMPLE_PODS_ERROR.gsub('error: ', '')))
185
187
  end
186
188
 
187
189
  Then(/^I should see a red compilation error$/) do
@@ -196,3 +198,12 @@ Then(/^I should see a cyan cursor$/) do
196
198
  run_output.should include(cyan(" ^"))
197
199
  end
198
200
 
201
+ Then(/^I should see the undefined symbold message$/) do
202
+ run_output.should include(red("⌦ Undefined symbols for architecture x86_64"))
203
+ end
204
+
205
+ Then(/^I should see the symbol and reference that caused failure$/) do
206
+ run_output.should include("_OBJC_CLASS_$_CABasicAnimation")
207
+ run_output.should include("objc-class-ref in ATZRadialProgressControl.o")
208
+ end
209
+
@@ -2,6 +2,23 @@ Given(/^the build has failed$/) do
2
2
  add_run_input "/Users/musalj/code/OSS/ObjectiveSugar/Example/ObjectiveSugarTests/NSArrayCategoriesTests.m:53:13: error: use of undeclared identifier 'something'"
3
3
  end
4
4
 
5
+ When(/^I run xcpretty$/) do
6
+ @output = `bin/xcpretty 2>&1`
7
+ end
8
+
9
+ When(/^I run xcpretty with (.*)$/) do |flags|
10
+ @output = `bin/xcpretty #{flags}`
11
+ end
12
+
13
+ Then(/^I should see the help banner$/) do
14
+ run_output.should include("Usage: xcodebuild [options] | xcpretty")
15
+ end
16
+
17
+ Then(/^I should see the xcpretty version$/) do
18
+ run_output.should include(XCPretty::VERSION)
19
+ end
20
+
5
21
  Then(/^the exit status code should be (\d)$/) do |numbah|
6
22
  $?.exitstatus.should == numbah.to_i
7
23
  end
24
+
@@ -4,6 +4,7 @@ require 'tempfile'
4
4
  require 'spec/fixtures/constants'
5
5
  require 'spec/support/matchers/colors'
6
6
  require 'lib/xcpretty/ansi'
7
+ require 'lib/xcpretty/version'
7
8
  require 'lib/xcpretty/syntax'
8
9
  require 'rexml/document'
9
10
  require 'lib/xcpretty/formatters/formatter'
@@ -1,4 +1,4 @@
1
- Feature: Status codes
1
+ Feature: CLI behavior
2
2
 
3
3
  Scenario: Xcode tests have failed
4
4
  Given I have a failing test in my suite
@@ -10,3 +10,11 @@ Feature: Status codes
10
10
  When I pipe to xcpretty
11
11
  Then the exit status code should be 1
12
12
 
13
+ Scenario: Starting xcpretty without any flags
14
+ When I run xcpretty
15
+ Then I should see the help banner
16
+
17
+ Scenario: Starting xcpretty with version
18
+ When I run xcpretty with -v
19
+ Then I should see the xcpretty version
20
+
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  require 'xcpretty/ansi'
2
3
  require 'xcpretty/parser'
3
4
 
@@ -6,34 +7,39 @@ module XCPretty
6
7
  # Making a new formatter is easy.
7
8
  # Just make a subclass of Formatter, and override any of these methods.
8
9
  module FormatMethods
9
- EMPTY_STRING = ''
10
- def format_analyze(file_name, file_path); EMPTY_STRING; end
11
- def format_build_target(target, project, configuration); EMPTY_STRING; end
12
- def format_check_dependencies; EMPTY_STRING; end
13
- def format_clean(project, target, configuration); EMPTY_STRING; end
14
- def format_clean_target(target, project, configuration); EMPTY_STRING; end
15
- def format_clean_remove; EMPTY_STRING; end
16
- def format_compile(file_name, file_path); EMPTY_STRING; end
17
- def format_compile_error(file_name, file_path, reason, line, cursor); EMPTY_STRING; end
18
- def format_compile_xib(file_name, file_path); EMPTY_STRING; end
19
- def format_copy_strings_file(file_name); EMPTY_STRING; end
20
- def format_cpresource(file); EMPTY_STRING; end
21
- def format_error(message); EMPTY_STRING; end
22
- def format_generate_dsym(dsym); EMPTY_STRING; end
23
- def format_linking(file, build_variant, arch); EMPTY_STRING; end
24
- def format_libtool(library); EMPTY_STRING; end
25
- def format_passing_test(suite, test, time); EMPTY_STRING; end
26
- def format_failing_test(suite, test, time, file_path); EMPTY_STRING; end
27
- def format_process_pch(file); EMPTY_STRING; end
28
- def format_phase_script_execution(script_name); EMPTY_STRING; end
29
- def format_process_info_plist(file_name, file_path); EMPTY_STRING; end
30
- def format_codesign(file); EMPTY_STRING; end
31
- def format_preprocess(file); EMPTY_STRING; end
32
- def format_pbxcp(file); EMPTY_STRING; end
33
- def format_test_run_started(name); EMPTY_STRING; end
34
- def format_test_run_finished(name, time); EMPTY_STRING; end
35
- def format_test_suite_started(name); EMPTY_STRING; end
36
- def format_test_summary(message, failures_per_suite); EMPTY_STRING; end
10
+ EMPTY = ''.freeze
11
+
12
+ def format_analyze(file_name, file_path); EMPTY; end
13
+ def format_build_target(target, project, configuration); EMPTY; end
14
+ def format_check_dependencies; EMPTY; end
15
+ def format_clean(project, target, configuration); EMPTY; end
16
+ def format_clean_target(target, project, configuration); EMPTY; end
17
+ def format_clean_remove; EMPTY; end
18
+ def format_compile(file_name, file_path); EMPTY; end
19
+ def format_compile_xib(file_name, file_path); EMPTY; end
20
+ def format_copy_strings_file(file_name); EMPTY; end
21
+ def format_cpresource(file); EMPTY; end
22
+ def format_generate_dsym(dsym); EMPTY; end
23
+ def format_linking(file, build_variant, arch); EMPTY; end
24
+ def format_libtool(library); EMPTY; end
25
+ def format_passing_test(suite, test, time); EMPTY; end
26
+ def format_failing_test(suite, test, time, file_path); EMPTY; end
27
+ def format_process_pch(file); EMPTY; end
28
+ def format_phase_script_execution(script_name); EMPTY; end
29
+ def format_process_info_plist(file_name, file_path); EMPTY; end
30
+ def format_codesign(file); EMPTY; end
31
+ def format_preprocess(file); EMPTY; end
32
+ def format_pbxcp(file); EMPTY; end
33
+ def format_test_run_started(name); EMPTY; end
34
+ def format_test_run_finished(name, time); EMPTY; end
35
+ def format_test_suite_started(name); EMPTY; end
36
+ def format_test_summary(message, failures_per_suite); EMPTY; end
37
+
38
+ # COMPILER / LINKER ERRORS
39
+ def format_compile_error(file_name, file_path, reason,
40
+ line, cursor); EMPTY; end
41
+ def format_error(message); EMPTY; end
42
+ def format_linker_failure(message, symbol, reference); EMPTY; end
37
43
  end
38
44
 
39
45
  class Formatter
@@ -72,6 +78,21 @@ module XCPretty
72
78
  "\n\n#{text}"
73
79
  end
74
80
 
81
+ ERROR = "⌦"
82
+ ASCII_ERROR = "[!]"
83
+
84
+ def format_error(message)
85
+ red((use_unicode? ? ERROR : ASCII_ERROR) + " " + message)
86
+ end
87
+
88
+ def format_compile_error(file, file_path, reason, line, cursor)
89
+ "\n#{file_path}: #{red(reason)}\n\n#{line}\n#{cyan(cursor)}\n\n"
90
+ end
91
+
92
+ def format_linker_failure(message, symbol, reference)
93
+ "\n#{red("⌦ " + message)}\n> Symbol: #{symbol}\n> Referenced from: #{reference}\n\n"
94
+ end
95
+
75
96
 
76
97
  private
77
98
 
@@ -7,11 +7,9 @@ module XCPretty
7
7
 
8
8
  PASS = "✓"
9
9
  FAIL = "✗"
10
- ERROR = "⌦ "
11
10
 
12
11
  ASCII_PASS = "."
13
12
  ASCII_FAIL = "x"
14
- ASCII_ERROR = "[!]"
15
13
  COMPLETION = "▸"
16
14
  ASCII_COMPLETION = ">"
17
15
 
@@ -43,14 +41,6 @@ module XCPretty
43
41
  format("Copying", resource)
44
42
  end
45
43
 
46
- def format_error(message)
47
- status_symbol(:error) + " " + red(message)
48
- end
49
-
50
- def format_compile_error(file, file_path, reason, line, cursor)
51
- "\n#{file_path}: #{red(reason)}\n\n#{line}\n#{cyan(cursor)}\n\n"
52
- end
53
-
54
44
  def format_generate_dsym(dsym)
55
45
  format("Generating '#{dsym}'")
56
46
  end
@@ -42,7 +42,7 @@ module XCPretty
42
42
  # $1 = file_path
43
43
  # $2 = file_name
44
44
  # $3 = reason
45
- COMPILE_ERROR_MATCHER = /^(.+\/(.*\.[h,m,c]).*):\serror:\s(.*)$/
45
+ COMPILE_ERROR_MATCHER = /^(.+\/(.*\.[h,m,c]).*):(?:\sfatal)?\serror:\s(.*)$/
46
46
 
47
47
  # @regex Captured groups
48
48
  # $1 file_path
@@ -80,6 +80,10 @@ module XCPretty
80
80
  # $1 = library
81
81
  LIBTOOL_MATCHER = /^Libtool.*\/(.*\.a)/
82
82
 
83
+ # @regex Captured groups
84
+ # $1 reason
85
+ LINKER_FAILURE_MATCHER = /^(Undefined symbols for architecture .*):$/
86
+
83
87
  # @regex Captured groups
84
88
  # $1 = target
85
89
  # $2 = build_variants (normal, profile, debug)
@@ -114,6 +118,11 @@ module XCPretty
114
118
  # @regex Captured groups
115
119
  # $1 = file
116
120
  PROCESS_INFO_PLIST_MATCHER = /^ProcessInfoPlistFile\s.*\.plist\s(.*\/+(.*\.plist))/
121
+
122
+ # @regex Captured groups
123
+ # $1 = reference
124
+ SYMBOL_REFERENCED_FROM_MATCHER = /\s*"(.*)", referenced from:$/
125
+
117
126
  # @regex Captured groups
118
127
  # $1 = suite
119
128
  # $2 = time
@@ -141,8 +150,10 @@ module XCPretty
141
150
  def parse(text)
142
151
  update_test_state(text)
143
152
  update_error_state(text)
153
+ update_linker_failure_state(text)
144
154
 
145
155
  return format_error if should_format_error?
156
+ return format_linker_failure if should_format_linker_failure?
146
157
 
147
158
  case text
148
159
  when ANALYZE_MATCHER
@@ -227,8 +238,20 @@ module XCPretty
227
238
  elsif text =~ CURSOR_MATCHER
228
239
  @formatting_error = false
229
240
  current_error[:cursor] = $1.chomp
230
- else
231
- current_error[:line] = text.chomp if @formatting_error
241
+ elsif @formatting_error
242
+ current_error[:line] = text.chomp
243
+ end
244
+ end
245
+
246
+ def update_linker_failure_state(text)
247
+ if text =~ LINKER_FAILURE_MATCHER
248
+ @formatting_linker_error = true
249
+ current_linker_failure[:message] = $1
250
+ elsif text =~ SYMBOL_REFERENCED_FROM_MATCHER
251
+ current_linker_failure[:symbol] = $1
252
+ elsif @formatting_linker_error
253
+ current_linker_failure[:reference] = text.strip
254
+ @formatting_linker_error = false
232
255
  end
233
256
  end
234
257
 
@@ -237,10 +260,20 @@ module XCPretty
237
260
  current_error[:reason] && current_error[:cursor] && current_error[:line]
238
261
  end
239
262
 
263
+ def should_format_linker_failure?
264
+ current_linker_failure[:message] &&
265
+ current_linker_failure[:symbol] &&
266
+ current_linker_failure[:reference]
267
+ end
268
+
240
269
  def current_error
241
270
  @current_error ||= {}
242
271
  end
243
272
 
273
+ def current_linker_failure
274
+ @linker_failure ||= {}
275
+ end
276
+
244
277
  def format_error
245
278
  error = current_error.dup
246
279
  @current_error = {}
@@ -251,6 +284,14 @@ module XCPretty
251
284
  error[:cursor])
252
285
  end
253
286
 
287
+ def format_linker_failure
288
+ failure = current_linker_failure.dup
289
+ @linker_failure = {}
290
+ formatter.format_linker_failure(failure[:message],
291
+ failure[:symbol],
292
+ failure[:reference])
293
+ end
294
+
254
295
  def store_failure(file, test_suite, test_case, reason)
255
296
  failures_per_suite[test_suite] ||= []
256
297
  failures_per_suite[test_suite] << {
@@ -1,3 +1,3 @@
1
1
  module XCPretty
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
@@ -466,9 +466,25 @@ SAMPLE_COMPILE_ERROR = %Q(
466
466
  [[thread.lastMessage should] equal:thread.];
467
467
  ^
468
468
  )
469
+
470
+ SAMPLE_FATAL_COMPILE_ERROR = %Q(
471
+ In file included from /Users/musalj/code/OSS/SampleApp/Pods/SuperCoolPod/SuperAwesomeClass.m:12:
472
+ In file included from /Users/musalj/code/OSS/SampleApp/Pods/../LessCoolPod/LessCoolClass.h:9:
473
+ In file included from /Users/musalj/code/OSS/SampleApp/Pods/../LessCoolPod/EvenLessCoolClass.h:10:
474
+ /Users/musalj/code/OSS/SampleApp/Pods/Headers/LessCoolPod/SomeRandomClass.h:31:9: fatal error: 'SomeRandomHeader.h' file not found
475
+ #import "SomeRandomHeader.h"
476
+ ^
477
+ )
469
478
  SAMPLE_COMPILE_ERROR_WITH_TILDES = %Q(
470
479
  /Users/musalj/code/OSS/ObjectiveSugar/Example/ObjectiveSugarTests/NSSetTests.m:93:16: error: no visible @interface for 'NSArray' declares the selector 'shoulds'
471
480
  }] shoulds] equal:@[ @"F458 Italia", @"Testarossa" ]];
472
481
  ~~ ^~~~~~~
473
482
  )
483
+ SAMPLE_UNDEFINED_SYMBOLS = %Q(
484
+ Undefined symbols for architecture x86_64:
485
+ "_OBJC_CLASS_$_CABasicAnimation", referenced from:
486
+ objc-class-ref in ATZRadialProgressControl.o
487
+ ld: symbol(s) not found for architecture x86_64
488
+ clang: error: linker command failed with exit code 1 (use -v to see invocation)
489
+ )
474
490
 
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'xcpretty'
2
4
 
3
5
  module XCPretty
@@ -20,6 +22,36 @@ module XCPretty
20
22
  @formatter.optional_newline.should == "\n"
21
23
  end
22
24
 
25
+ it "formats cocoapods errors" do
26
+ @formatter.format_error("The sandbox is not in sync...").should ==
27
+ "#{@formatter.red("⌦ The sandbox is not in sync...")}"
28
+ end
29
+
30
+ it "formats compiling errors" do
31
+ @formatter.format_compile_error("file", "path/to/file", "expected valid syntax",
32
+ "[a should",
33
+ " ^").should ==
34
+ %Q(
35
+ path/to/file: #{@formatter.red("expected valid syntax")}
36
+
37
+ [a should
38
+ #{@formatter.cyan(" ^")}
39
+
40
+ )
41
+ end
42
+
43
+
44
+ it "formats linker failures by default" do
45
+ @formatter.format_linker_failure("Undefined symbols for architecture x86_64",
46
+ '_OBJC_CLASS_$_CABasicAnimation',
47
+ 'objc-class-ref in ATZRadialProgressControl.o').should == %Q(
48
+ #{@formatter.red("⌦ Undefined symbols for architecture x86_64")}
49
+ > Symbol: _OBJC_CLASS_$_CABasicAnimation
50
+ > Referenced from: objc-class-ref in ATZRadialProgressControl.o
51
+
52
+ )
53
+ end
54
+
23
55
  if RUBY_VERSION > '1.8.7'
24
56
  it "formats failures per suite" do
25
57
  failures = {
@@ -25,24 +25,6 @@ module XCPretty
25
25
  "> Cleaning Pods/Pods-ObjectiveSugar [Debug]"
26
26
  end
27
27
 
28
- it "formats cocoapods errors" do
29
- @formatter.format_error("The sandbox is not in sync...").should ==
30
- "[!] The sandbox is not in sync..."
31
- end
32
-
33
- it "formats compiling errors" do
34
- @formatter.format_compile_error("file", "path/to/file", "expected valid syntax",
35
- "[a should",
36
- " ^").should ==
37
- %Q(
38
- path/to/file: expected valid syntax
39
-
40
- [a should
41
- ^
42
-
43
- )
44
- end
45
-
46
28
  it "formats compiling output" do
47
29
  @formatter.format_compile("NSMutableArray+ObjectiveSugar.m", 'path/to/file').should ==
48
30
  "> Compiling NSMutableArray+ObjectiveSugar.m"
@@ -46,6 +46,16 @@ module XCPretty
46
46
  @parser.parse("Check dependencies")
47
47
  end
48
48
 
49
+ it "parses code signing" do
50
+ @formatter.should receive(:format_codesign).with("build/Release/CocoaChip.app")
51
+ @parser.parse(SAMPLE_CODESIGN)
52
+ end
53
+
54
+ it "parses code signing a framework" do
55
+ @formatter.should receive(:format_codesign).with("build/Release/CocoaChipCore.framework")
56
+ @parser.parse(SAMPLE_CODESIGN_FRAMEWORK)
57
+ end
58
+
49
59
  it "parses compiling categories" do
50
60
  @formatter.should receive(:format_compile).with("NSMutableArray+ObjectiveSugar.m", "/Users/musalj/code/OSS/ObjectiveSugar/Classes/NSMutableArray+ObjectiveSugar.m")
51
61
  @parser.parse(SAMPLE_COMPILE)
@@ -117,16 +127,6 @@ module XCPretty
117
127
  @parser.parse(SAMPLE_PRECOMPILE)
118
128
  end
119
129
 
120
- it "parses code signing" do
121
- @formatter.should receive(:format_codesign).with("build/Release/CocoaChip.app")
122
- @parser.parse(SAMPLE_CODESIGN)
123
- end
124
-
125
- it "parses code signing a framework" do
126
- @formatter.should receive(:format_codesign).with("build/Release/CocoaChipCore.framework")
127
- @parser.parse(SAMPLE_CODESIGN_FRAMEWORK)
128
- end
129
-
130
130
  it "parses preprocessing" do
131
131
  @formatter.should receive(:format_preprocess).with("CocoaChip/CocoaChip-Info.plist")
132
132
  @parser.parse(SAMPLE_PREPROCESS)
@@ -137,6 +137,16 @@ module XCPretty
137
137
  @parser.parse(SAMPLE_PBXCP)
138
138
  end
139
139
 
140
+ it "parses undefined symbols" do
141
+ @formatter.should receive(:format_linker_failure).with("Undefined symbols for architecture x86_64",
142
+ '_OBJC_CLASS_$_CABasicAnimation',
143
+ 'objc-class-ref in ATZRadialProgressControl.o')
144
+
145
+ SAMPLE_UNDEFINED_SYMBOLS.each_line do |line|
146
+ @parser.parse(line)
147
+ end
148
+ end
149
+
140
150
  it "parses test run finished" do
141
151
  @formatter.should receive(:format_test_run_finished).with('ReactiveCocoaTests.octest(Tests)', '2013-12-10 07:03:03 +0000.')
142
152
  @parser.parse(SAMPLE_OCUNIT_TEST_RUN_COMPLETION)
@@ -171,6 +181,23 @@ module XCPretty
171
181
  end
172
182
  end
173
183
 
184
+ it 'parses fatal compiling errors' do
185
+ @formatter.should receive(:format_compile_error).with(
186
+ 'SomeRandomClass.h',
187
+ '/Users/musalj/code/OSS/SampleApp/Pods/Headers/LessCoolPod/SomeRandomClass.h:31:9',
188
+ "'SomeRandomHeader.h' file not found",
189
+ '#import "SomeRandomHeader.h"',
190
+ ' ^'
191
+ # For now, it's probably not worth to provide the import stack
192
+ # It'd require more state, and not sure if it'd be any useful
193
+ #%Q(In file included from /Users/musalj/code/OSS/SampleApp/Pods/SuperCoolPod/SuperAwesomeClass.m:12:
194
+ #In file included from /Users/musalj/code/OSS/SampleApp/Pods/../LessCoolPod/LessCoolClass.h:9:
195
+ #In file included from /Users/musalj/code/OSS/SampleApp/Pods/../LessCoolPod/EvenLessCoolClass.h:10:)
196
+ )
197
+ SAMPLE_FATAL_COMPILE_ERROR.each_line do |line|
198
+ @parser.parse(line)
199
+ end
200
+ end
174
201
 
175
202
  it "parses compiling errors with tildes" do
176
203
  @formatter.should receive(:format_compile_error).with(
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xcpretty
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marin Usalj
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-12-28 00:00:00.000000000 Z
12
+ date: 2013-12-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler