# frozen_string_literal: true
# rubocop:disable Layout/LineLength
require File.expand_path('spec_helper', __dir__)
module Danger
describe Danger::DangerXcodeSummary do
it 'should be a plugin' do
expect(Danger::DangerXcodeSummary.new(nil)).to be_a Danger::Plugin
end
# describe 'with Dangerfile' do
# before do
# @dangerfile = testing_dangerfile
# @xcode_summary = @dangerfile.xcode_summary
# @xcode_summary.env.request_source.pr_json = JSON.parse(File.read('spec/fixtures/pr_json.json'))
# @xcode_summary.project_root = '/Users/marcelofabri/SwiftLint/'
# end
# it 'fail if file does not exist' do
# @xcode_summary.report('spec/fixtures/inexistent_file.xcresult')
# expect(@dangerfile.status_report[:errors]).to eq ['summary file not found']
# end
# context 'reporting' do
# it 'formats compile warnings' do
# @xcode_summary.report('spec/fixtures/swiftlint.xcresult')
# expect(@dangerfile.status_report[:warnings]).to eq [
# "**Carthage/Checkouts/Yams/Sources/Yams/Tag.swift#L88**: Legacy Hashing Violation: Prefer using the `hash(into:)` function instead of overriding `hashValue` (legacy_hashing)",
# "**Carthage/Checkouts/Yams/Sources/Yams/Tag.swift#L109**: Legacy Hashing Violation: Prefer using the `hash(into:)` function instead of overriding `hashValue` (legacy_hashing)",
# "**Carthage/Checkouts/Yams/Sources/Yams/Decoder.swift#L102**: Colon Violation: Colons should be next to the identifier when specifying a type and next to the key in dictionary literals. (colon)",
# "**Carthage/Checkouts/Yams/Sources/Yams/Node.swift#L191**: Legacy Hashing Violation: Prefer using the `hash(into:)` function instead of overriding `hashValue` (legacy_hashing)",
# "**Carthage/Checkouts/Yams/Sources/Yams/Representer.swift#L187**: Todo Violation: TODOs should be resolved (Support `Float80`). (todo)",
# "**Carthage/Checkouts/Yams/Sources/Yams/Encoder.swift#L139**: Colon Violation: Colons should be next to the identifier when specifying a type and next to the key in dictionary literals. (colon)",
# "**Carthage/Checkouts/Yams/Sources/Yams/Parser.swift#L441**: File Line Length Violation: File should contain 400 lines or less: currently contains 441 (file_length)",
# "**Carthage/Checkouts/Yams/Sources/Yams/Constructor.swift#L405**: Todo Violation: TODOs should be resolved (YAML supports keys other than ...). (todo)",
# "**Carthage/Checkouts/Yams/Sources/Yams/Constructor.swift#L430**: Todo Violation: TODOs should be resolved (Should raise error on other th...). (todo)",
# "**Carthage/Checkouts/Yams/Sources/Yams/Constructor.swift#L450**: Todo Violation: TODOs should be resolved (YAML supports Hashable element...). (todo)",
# "**Carthage/Checkouts/Yams/Sources/Yams/Constructor.swift#L478**: Todo Violation: TODOs should be resolved (Should raise error if subnode ...). (todo)",
# "**Carthage/Checkouts/Yams/Sources/Yams/Constructor.swift#L492**: Todo Violation: TODOs should be resolved (Should raise error if subnode ...). (todo)",
# "**Carthage/Checkouts/Yams/Sources/Yams/Emitter.swift#L340**: Todo Violation: TODOs should be resolved (Support tags). (todo)",
# "**Carthage/Checkouts/Yams/Tests/YamsTests/SpecTests.swift#L379**: Todo Violation: TODOs should be resolved (YAML supports keys other than ...). (todo)",
# "**Carthage/Checkouts/Yams/Tests/YamsTests/SpecTests.swift#L714**: Todo Violation: TODOs should be resolved (local tag parsing). (todo)",
# "**Carthage/Checkouts/Yams/Tests/YamsTests/EncoderTests.swift#L924**: Colon Violation: Colons should be next to the identifier when specifying a type and next to the key in dictionary literals. (colon)",
# "**Carthage/Checkouts/Yams/Tests/YamsTests/EncoderTests.swift#L937**: Colon Violation: Colons should be next to the identifier when specifying a type and next to the key in dictionary literals. (colon)",
# "**Carthage/Checkouts/Yams/Tests/YamsTests/EncoderTests.swift#L253**: Superfluous Disable Command Violation: 'unused_private_declaration' is not a valid SwiftLint rule. Please remove it from the disable command. (superfluous_disable_command)",
# "**Carthage/Checkouts/SWXMLHash/Source/XMLIndexer+XMLIndexerDeserializable.swift#L538**: 'public' modifier is redundant for instance method declared in a public extension",
# "**Carthage/Checkouts/SWXMLHash/Source/XMLIndexer+XMLIndexerDeserializable.swift#L552**: 'public' modifier is redundant for instance method declared in a public extension",
# "**Carthage/Checkouts/Result/Result/NoError.swift#L8**: Will never be executed"
# ]
# end
# it 'ignores file when ignored_files matches' do
# @xcode_summary.ignored_files = 'Carthage/**/Yams/**'
# @xcode_summary.report('spec/fixtures/swiftlint.xcresult')
# expect(@dangerfile.status_report[:warnings]).to eq [
# "**Carthage/Checkouts/SWXMLHash/Source/XMLIndexer+XMLIndexerDeserializable.swift#L538**: 'public' modifier is redundant for instance method declared in a public extension",
# "**Carthage/Checkouts/SWXMLHash/Source/XMLIndexer+XMLIndexerDeserializable.swift#L552**: 'public' modifier is redundant for instance method declared in a public extension",
# "**Carthage/Checkouts/Result/Result/NoError.swift#L8**: Will never be executed"
# ]
# end
# it 'ignores file when ignored_files is an array and matches' do
# @xcode_summary.ignored_files = ['Carthage/**/Yams/**', 'Carthage/**/SWXMLHash/**']
# @xcode_summary.report('spec/fixtures/swiftlint.xcresult')
# expect(@dangerfile.status_report[:warnings]).to eq [
# "**Carthage/Checkouts/Result/Result/NoError.swift#L8**: Will never be executed"
# ]
# end
# it 'formats test errors' do
# @xcode_summary.report('spec/fixtures/swiftlint.xcresult')
# expect(@dangerfile.status_report[:errors]).to eq [
# "**SwiftLintFrameworkTests.ColonRuleTests.testColonWithoutApplyToDictionaries()**: XCTAssertEqual failed: (\"0\") is not equal to (\"1\")
Tests/SwiftLintFrameworkTests/TestHelpers.swift#L169"
# ]
# end
# it 'formats errors' do
# @xcode_summary.report('spec/fixtures/build_error.xcresult')
# expect(@dangerfile.status_report[:errors]).to eq [
# 'Testing cancelled because the build failed.',
# "**Source/SwiftLintFramework/Extensions/QueuedPrint.swift#L13**: Use of unresolved identifier 'queue'",
# "**Source/SwiftLintFramework/Extensions/QueuedPrint.swift#L17**: Use of unresolved identifier 'queue'"
# ]
# end
# it 'report warning and error counts' do
# result = @xcode_summary.warning_error_count('spec/fixtures/build_error.xcresult')
# expect(result).to eq '{"warnings":21,"errors":3}'
# end
# context 'with inline_mode' do
# before do
# @xcode_summary.inline_mode = true
# end
# it 'asserts errors on the line' do
# allow(@xcode_summary).to receive(:fail)
# @xcode_summary.report('spec/fixtures/build_error.xcresult')
# expect(@xcode_summary).to have_received(:fail).with(
# instance_of(String),
# sticky: false,
# file: 'Source/SwiftLintFramework/Extensions/QueuedPrint.swift',
# line: 13
# )
# expect(@xcode_summary).to have_received(:fail).with(
# instance_of(String),
# sticky: false,
# file: 'Source/SwiftLintFramework/Extensions/QueuedPrint.swift',
# line: 17
# )
# expect(@xcode_summary).to have_received(:fail).with(
# 'Testing cancelled because the build failed.',
# sticky: false
# )
# end
# it 'asserts warning on the line' do
# allow(@xcode_summary).to receive(:warn)
# @xcode_summary.report('spec/fixtures/swiftlint.xcresult')
# expect(@xcode_summary).to have_received(:warn).with(
# instance_of(String),
# sticky: false,
# file: 'Carthage/Checkouts/SWXMLHash/Source/XMLIndexer+XMLIndexerDeserializable.swift',
# line: 538
# )
# end
# end
# context 'with ignores_warnings' do
# before do
# @xcode_summary.ignores_warnings = true
# end
# it 'shows no warnings' do
# @xcode_summary.report('spec/fixtures/swiftlint.xcresult')
# expect(@dangerfile.status_report[:warnings]).to eq []
# end
# it 'shows errors' do
# @xcode_summary.report('spec/fixtures/build_error.xcresult')
# expect(@dangerfile.status_report[:warnings]).to eq []
# expect(@dangerfile.status_report[:errors].count).to_not eq 0
# end
# it 'reports warning and error counts with no warnings' do
# result = @xcode_summary.warning_error_count('spec/fixtures/build_error.xcresult')
# expect(result).to eq '{"warnings":0,"errors":3}'
# end
# end
# context 'with ignored_results' do
# before do
# @xcode_summary.ignored_results do |result|
# result.message.include?('public extension') || result.message.include?('unresolved')
# end
# end
# it 'asserts no errors' do
# @xcode_summary.report('spec/fixtures/build_error.xcresult')
# expect(@dangerfile.status_report[:errors].count).to eq 1
# end
# it 'asserts no warnings' do
# @xcode_summary.report('spec/fixtures/swiftlint.xcresult')
# expect(@dangerfile.status_report[:warnings].count).to eq 19
# end
# it 'report warning and error counts' do
# result = @xcode_summary.warning_error_count('spec/fixtures/build_error.xcresult')
# expect(result).to eq '{"warnings":19,"errors":1}'
# end
# end
# context 'without strict' do
# before do
# @xcode_summary.strict = false
# end
# it 'shows errors as warnings' do
# @xcode_summary.report('spec/fixtures/build_error.xcresult')
# expect(@dangerfile.status_report[:warnings].count).to_not eq 0
# expect(@dangerfile.status_report[:errors]).to eq []
# end
# it 'report warning and error counts' do
# result = @xcode_summary.warning_error_count('spec/fixtures/build_error.xcresult')
# expect(result).to eq '{"warnings":21,"errors":3}'
# end
# end
# end
# end
# Second environment with different request_source
describe 'with bitbucket request_source' do
before do
@dangerfile = testing_bitbucket_dangerfile
@xcode_summary = @dangerfile.xcode_summary
@xcode_summary.env.request_source.pr_json = JSON.parse(File.read('spec/fixtures/bitbucket_pr.json'), symbolize_names: true)
@xcode_summary.project_root = '/Users/diogo/src/danger-xcode_summary'
end
describe 'where request source' do
it 'should be bitbucket' do
path = @xcode_summary.send(:format_path, 'lib/xcode_summary/plugin.rb', 3)
expect(path).to eq 'lib/xcode_summary/plugin.rb'
end
end
end
end
end
# rubocop:enable Layout/LineLength