blob: a448e860d54706012efea18889471b0527930cdc [file] [log] [blame]
#
# Copyright 2016 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
require 'yaml'
require 'digest/sha1'
# Define a custom project diff to avoid path names from showing up in the report.
# The tests use a temporary directory and the path to that will always be different
# from the path to the fixtures dir.
class ProjectDiff
class << self
def tree(path)
raise "Path doesn't exist: #{path}" unless File.exist? path
Xcodeproj::Project.open(path).to_tree_hash.dup
end
def sha1(file_name)
file_path = File.expand_path(File.join(file_name))
Digest::SHA1.hexdigest(File.read(file_path))
end
def validate_swift_version(version)
raise 'Invalid version. Expected 2.3 or 3.0' unless %w[2.3 3.0].include?(version)
end
def earlgrey_path(version)
validate_swift_version version
File.expand_path(File.join(__dir__, '..', 'lib', 'earlgrey', 'files',
"Swift-#{version}", 'EarlGrey.swift'))
end
def swift_mismatch_error(version)
validate_swift_version(version)
<<-FF
The wrong Swift #{version} file was downloaded. Please File a Bug against the EarlGrey
gem at https://github.com/google/EarlGrey/issues.
FF
end
def expected_hash(version)
case version
when '2.3'
@swift_2_3_sha1 ||= sha1(earlgrey_path('2.3'))
when '3.0'
@swift_3_0_sha1 ||= sha1(earlgrey_path('3.0'))
else
raise 'Invalid version'
end
end
# Based on code from:
# https://github.com/CocoaPods/Xcodeproj/blob/480e2f99e5e9315b8032854a9530aa500761e138/lib/xcodeproj/command/project_diff.rb
def run(path_1, path_2, has_swift_2)
actual_swift_file = File.join(path_1, '..', 'ExampleTests/EarlGrey.swift')
swift_version = has_swift_2 ? '2.3' : '3.0'
hash_match = expected_hash(swift_version) == sha1(actual_swift_file)
raise swift_mismatch_error(swift_version) unless hash_match
Xcodeproj::Differ.project_diff(tree(path_1), tree(path_2)).to_yaml
end
end
end