lib/xcpretty/parser.rb in xcpretty-0.2.3 vs lib/xcpretty/parser.rb in xcpretty-0.2.4

- old
+ new

@@ -96,16 +96,16 @@ # @regex Captured groups # $1 = file # $2 = test_suite # $3 = test_case # $4 = reason - TEST_FAILURE_MATCHER = /^\s*(.+:\d+):\serror:\s[\+\-]\[(.*)\s(.*)\]\s:(?:\s'.*'\s\[FAILED\],)?\s(.*)/ + FAILING_TEST_MATCHER = /^\s*(.+:\d+):\serror:\s[\+\-]\[(.*)\s(.*)\]\s:(?:\s'.*'\s\[FAILED\],)?\s(.*)/ # @regex Captured groups # $1 = file # $2 = reason - TEST_UI_FAILURE_MATCHER = /Assertion\sFailure:\s(.+:\d+):\s(.*)/ + UI_FAILING_TEST_MATCHER = /^\s{4}t = \s+\d+\.\d+s\s+Assertion Failure: (.*:\d+): (.*)$/ # @regex Captured groups # $1 = dsym GENERATE_DSYM_MATCHER = /^GenerateDSYMFile \/.*\/(.*\.dSYM)/ @@ -121,28 +121,28 @@ # @regex Captured groups # $1 = suite # $2 = test_case # $3 = time - FAILING_TEST_MATCHER = /^\s*Test Case\s'-\[(.*)\s(.*)\]'\sfailed\s\((\d*\.\d{3})\sseconds\)/ + TEST_CASE_PASSED_MATCHER = /^\s*Test Case\s'-\[(.*)\s(.*)\]'\spassed\s\((\d*\.\d{3})\sseconds\)/ + # @regex Captured groups # $1 = suite # $2 = test_case - # $3 = time - PASSING_TEST_MATCHER = /^\s*Test Case\s'-\[(.*)\s(.*)\]'\spassed\s\((\d*\.\d{3})\sseconds\)/ + TEST_CASE_STARTED_MATCHER = /^Test Case '-\[(.*) (.*)\]' started.$/ # @regex Captured groups # $1 = suite # $2 = test_case - PENDING_TEST_MATCHER = /^Test Case\s'-\[(.*)\s(.*)PENDING\]'\spassed/ + TEST_CASE_PENDING_MATCHER = /^Test Case\s'-\[(.*)\s(.*)PENDING\]'\spassed/ # @regex Captured groups # $1 = suite # $2 = test_case # $3 = time - MEASURING_TEST_MATCHER = /^[^:]*:[^:]*:\sTest Case\s'-\[(.*)\s(.*)\]'\smeasured\s\[Time,\sseconds\]\saverage:\s(\d*\.\d{3}),/ + TEST_CASE_MEASURED_MATCHER = /^[^:]*:[^:]*:\sTest Case\s'-\[(.*)\s(.*)\]'\smeasured\s\[Time,\sseconds\]\saverage:\s(\d*\.\d{3}),/ PHASE_SUCCESS_MATCHER = /^\*\*\s(.*)\sSUCCEEDED\s\*\*/ # @regex Captured groups # $1 = script_name @@ -174,11 +174,11 @@ TESTS_RUN_COMPLETION_MATCHER = /^\s*Test Suite '(?:.*\/)?(.*[ox]ctest.*)' (finished|passed|failed) at (.*)/ # @regex Captured groups # $1 = suite # $2 = time - TESTS_RUN_START_MATCHER = /^\s*Test Suite '(?:.*\/)?(.*[ox]ctest.*)' started at(.*)/ + TEST_SUITE_STARTED_MATCHER = /^\s*Test Suite '(?:.*\/)?(.*[ox]ctest.*)' started at(.*)/ # @regex Captured groups # $1 test suite name TEST_SUITE_START_MATCHER = /^\s*Test Suite '(.*)' started at/ @@ -209,10 +209,14 @@ LD_WARNING_MATCHER = /^(ld: )warning: (.*)/ # @regex Captured groups # $1 = whole warning GENERIC_WARNING_MATCHER = /^warning:\s(.*)$/ + + # @regex Captured groups + # $1 = whole warning + WILL_NOT_BE_CODE_SIGNED_MATCHER = /^(.* will not be code signed because .*)$/ end module Errors # @regex Captured groups # $1 = whole error @@ -221,20 +225,28 @@ # @regex Captured groups # $1 = whole error CODESIGN_ERROR_MATCHER = /^(Code\s?Sign error:.*)$/ # @regex Captured groups + # $1 = whole error + CODE_SIGNING_REQUIRED_MATCHER = /^(Code signing is required for product type .* in SDK .*)$/ + + # @regex Captured groups # $1 = file_path # $2 = file_name # $3 = reason COMPILE_ERROR_MATCHER = /^(\/.+\/(.*):.*:.*):\s(?:fatal\s)?error:\s(.*)$/ # @regex Captured groups # $1 cursor (with whitespaces and tildes) CURSOR_MATCHER = /^([\s~]*\^[\s~]*)$/ # @regex Captured groups + # $1 = whole message + PROFILE_DOESNT_SUPPORT_OR_INCLUDE = /^(Provisioning profile .* doesn't .*)$/ + + # @regex Captured groups # $1 = whole error. # it varies a lot, not sure if it makes sense to catch everything separately FATAL_ERROR_MATCHER = /^(fatal error:.*)$/ # @regex Captured groups @@ -316,10 +328,12 @@ formatter.format_codesign($1) when CODESIGN_MATCHER formatter.format_codesign($1) when CODESIGN_ERROR_MATCHER formatter.format_error($1) + when CODE_SIGNING_REQUIRED_MATCHER + formatter.format_error($1) when COMPILE_MATCHER formatter.format_compile($2, $1) when COMPILE_COMMAND_MATCHER formatter.format_compile_command($1, $2) when COMPILE_XIB_MATCHER @@ -330,13 +344,17 @@ formatter.format_copy_header_file($1, $2) when COPY_PLIST_MATCHER formatter.format_copy_plist_file($1, $2) when CPRESOURCE_MATCHER formatter.format_cpresource($1) + when PROFILE_DOESNT_SUPPORT_OR_INCLUDE + formatter.format_error($1) when EXECUTED_MATCHER format_summary_if_needed(text) - when TEST_FAILURE_MATCHER + when UI_FAILING_TEST_MATCHER + formatter.format_failing_test(@test_suite, @test_case, $2, $1) + when FAILING_TEST_MATCHER formatter.format_failing_test($2, $3, $4, $1) when FATAL_ERROR_MATCHER formatter.format_error($1) when FILE_MISSING_ERROR_MATCHER formatter.format_file_missing_error($1, $2) @@ -348,21 +366,15 @@ formatter.format_error($1) when LIBTOOL_MATCHER formatter.format_libtool($1) when LINKING_MATCHER formatter.format_linking($1, $2, $3) - when MEASURING_TEST_MATCHER + when TEST_CASE_MEASURED_MATCHER formatter.format_measuring_test($1, $2, $3) - when PENDING_TEST_MATCHER + when TEST_CASE_PENDING_MATCHER formatter.format_pending_test($1, $2) - when FAILING_TEST_MATCHER - if @current_assertion_failure - formatter.format_failing_test($1, $2, @current_assertion_failure[:reason], @current_assertion_failure[:file]) - else - formatter.format_failing_test($1, $2, '', '') - end - when PASSING_TEST_MATCHER + when TEST_CASE_PASSED_MATCHER formatter.format_passing_test($1, $2, $3) when PODS_ERROR_MATCHER formatter.format_error($1) when PROCESS_INFO_PLIST_MATCHER formatter.format_process_info_plist(*unescaped($2, $1)) @@ -378,11 +390,11 @@ formatter.format_preprocess($1) when PBXCP_MATCHER formatter.format_pbxcp($1) when TESTS_RUN_COMPLETION_MATCHER formatter.format_test_run_finished($1, $3) - when TESTS_RUN_START_MATCHER + when TEST_SUITE_STARTED_MATCHER formatter.format_test_run_started($1) when TEST_SUITE_START_MATCHER formatter.format_test_suite_started($1) when TIFFUTIL_MATCHER formatter.format_tiffutil($1) @@ -394,40 +406,34 @@ formatter.format_write_auxiliary_files when SHELL_COMMAND_MATCHER formatter.format_shell_command($1, $2) when GENERIC_WARNING_MATCHER formatter.format_warning($1) + when WILL_NOT_BE_CODE_SIGNED_MATCHER + formatter.format_will_not_be_code_signed($1) else "" end end private def update_test_state(text) case text - when TESTS_RUN_START_MATCHER + when TEST_SUITE_STARTED_MATCHER @tests_done = false @formatted_summary = false @failures = {} - @assertion_failure = [] - @current_assertion_failure = {} + when TEST_CASE_STARTED_MATCHER + @test_suite = $1 + @test_case = $2 when TESTS_RUN_COMPLETION_MATCHER @tests_done = true - when TEST_UI_FAILURE_MATCHER - @current_assertion_failure = { - file: $1, - reason: $2 - } when FAILING_TEST_MATCHER - if @current_assertion_failure - store_failure(@current_assertion_failure[:file], $1, $2, @current_assertion_failure[:reason]) - else - store_failure(nil, $1, $2, '') - end - when TEST_FAILURE_MATCHER - store_failure($1, $2, $3, $4) + store_failure(file: $1, test_suite: $2, test_case: $3, reason: $4) + when UI_FAILING_TEST_MATCHER + store_failure(file: $1, test_suite: @test_suite, test_case: @test_case, reason: $2) end end # @ return Hash { :file_name, :file_path, :reason, :line } def update_error_state(text) @@ -541,11 +547,11 @@ def reset_linker_format_state @linker_failure = nil @formatting_linker_failure = false end - def store_failure(file, test_suite, test_case, reason) + def store_failure(file: nil, test_suite: nil, test_case: nil, reason: nil) failures_per_suite[test_suite] ||= [] failures_per_suite[test_suite] << { file_path: file, reason: reason, test_case: test_case @@ -571,5 +577,6 @@ escaped_values.map { |v| v.delete('\\') } end end end +