-
-
Notifications
You must be signed in to change notification settings - Fork 756
/
world.rb
124 lines (101 loc) · 3.5 KB
/
world.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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
module RSpec
module Core
class World
include RSpec::Core::Hooks
attr_reader :example_groups, :filtered_examples, :wants_to_quit
attr_writer :wants_to_quit
def initialize(configuration=RSpec.configuration)
@configuration = configuration
@example_groups = [].extend(Extensions::Ordered)
@filtered_examples = Hash.new { |hash,group|
hash[group] = begin
examples = group.examples.dup
examples = filter.filter(examples)
examples.uniq
examples.extend(Extensions::Ordered)
end
}
end
def reset
example_groups.clear
end
# TODO - fix me
def filter
@configuration.instance_variable_get("@filter")
end
def register(example_group)
example_groups << example_group
example_group
end
def inclusion_filter
@configuration.inclusion_filter
end
def exclusion_filter
@configuration.exclusion_filter
end
def configure_group(group)
@configuration.configure_group(group)
end
def shared_example_groups
@shared_example_groups ||= {}
end
def example_count
example_groups.collect {|g| g.descendants}.flatten.inject(0) { |sum, g| sum += g.filtered_examples.size }
end
def preceding_declaration_line(filter_line)
declaration_line_numbers.sort.inject(nil) do |highest_prior_declaration_line, line|
line <= filter_line ? line : highest_prior_declaration_line
end
end
def reporter
@configuration.reporter
end
def announce_filters
filter_announcements = []
if @configuration.run_all_when_everything_filtered? && example_count.zero?
reporter.message( "No examples matched #{inclusion_filter.description}. Running all.")
filtered_examples.clear
inclusion_filter.clear
end
announce_inclusion_filter filter_announcements
announce_exclusion_filter filter_announcements
if example_count.zero?
example_groups.clear
if filter_announcements.empty?
reporter.message("No examples found.")
elsif !inclusion_filter.empty?
message = "No examples matched #{inclusion_filter.description}."
if @configuration.run_all_when_everything_filtered?
message << " Running all."
end
reporter.message(message)
elsif !exclusion_filter.empty?
reporter.message(
"No examples were matched. Perhaps #{exclusion_filter.description} is excluding everything?")
end
elsif !filter_announcements.empty?
reporter.message("Run filtered #{filter_announcements.join(', ')}")
end
end
def announce_inclusion_filter(announcements)
unless inclusion_filter.empty?
announcements << "including #{inclusion_filter.description}"
end
end
def announce_exclusion_filter(announcements)
unless exclusion_filter.empty_without_conditional_filters?
announcements << "excluding #{exclusion_filter.description}"
end
end
def find_hook(hook, scope, group, example = nil)
@configuration.find_hook(hook, scope, group, example)
end
private
def declaration_line_numbers
@line_numbers ||= example_groups.inject([]) do |lines, g|
lines + g.declaration_line_numbers
end
end
end
end
end