xcpretty 0.0.7 → 0.0.8

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: 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