-
-
Notifications
You must be signed in to change notification settings - Fork 396
/
match_array.rb
45 lines (39 loc) · 1.38 KB
/
match_array.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
module RSpec
module Matchers
module BuiltIn
class MatchArray < BaseMatcher
def match(expected, actual)
@extra_items = difference_between_arrays(actual, expected)
@missing_items = difference_between_arrays(expected, actual)
@extra_items.empty? & @missing_items.empty?
end
def failure_message_for_should
message = "expected collection contained: #{safe_sort(expected).inspect}\n"
message += "actual collection contained: #{safe_sort(actual).inspect}\n"
message += "the missing elements were: #{safe_sort(@missing_items).inspect}\n" unless @missing_items.empty?
message += "the extra elements were: #{safe_sort(@extra_items).inspect}\n" unless @extra_items.empty?
message
end
def failure_message_for_should_not
"Matcher does not support should_not"
end
def description
"contain exactly #{_pretty_print(expected)}"
end
private
def safe_sort(array)
array.sort rescue array
end
def difference_between_arrays(array_1, array_2)
difference = array_1.dup
array_2.each do |element|
if index = difference.index(element)
difference.delete_at(index)
end
end
difference
end
end
end
end
end