Class: Cucumber::Query

Inherits:
Object
  • Object
show all
Includes:
Messages::Helpers::TestStepResultComparator, Messages::Helpers::TimeConversion
Defined in:
lib/cucumber/query.rb

Overview

Provides lookup methods for related Cucumber messages stored in the Repository class.

Instance Method Summary collapse

Constructor Details

#initialize(repository) ⇒ Query

Returns a new instance of Query.



21
22
23
# File 'lib/cucumber/query.rb', line 21

def initialize(repository)
  @repository = repository
end

Instance Method Details

#count_test_cases_startedInteger

Returns:

  • (Integer)


26
27
28
# File 'lib/cucumber/query.rb', line 26

def count_test_cases_started
  find_all_test_case_started.length
end

#find_all_pickle_stepsArray<PickleStep>

Returns:

  • (Array<PickleStep>)


36
37
38
# File 'lib/cucumber/query.rb', line 36

def find_all_pickle_steps
  repository.pickle_step_by_id.values
end

#find_all_picklesArray<Pickle>

Returns:

  • (Array<Pickle>)


31
32
33
# File 'lib/cucumber/query.rb', line 31

def find_all_pickles
  repository.pickle_by_id.values
end

#find_all_step_definitionsArray<StepDefinition>

Returns:

  • (Array<StepDefinition>)


41
42
43
# File 'lib/cucumber/query.rb', line 41

def find_all_step_definitions
  repository.step_definition_by_id.values
end

#find_all_test_case_finishedArray<TestCaseFinished>

This finds all test cases that have finished AND will not be retried

Returns:

  • (Array<TestCaseFinished>)


58
59
60
# File 'lib/cucumber/query.rb', line 58

def find_all_test_case_finished
  repository.test_case_finished_by_test_case_started_id.values.reject(&:will_be_retried)
end

#find_all_test_case_startedArray<TestCaseStarted>

This finds all test cases from the following conditions (UNION) -> Test cases that have started, but not yet finished -> Test cases that have started, finished, but that will NOT be retried

Returns:

  • (Array<TestCaseStarted>)


49
50
51
52
53
54
# File 'lib/cucumber/query.rb', line 49

def find_all_test_case_started
  repository.test_case_started_by_id.values.select do |test_case_started|
    test_case_finished = find_test_case_finished_by(test_case_started)
    test_case_finished.nil? || !test_case_finished.will_be_retried
  end
end

#find_all_test_casesArray<TestCase>

Returns:

  • (Array<TestCase>)


63
64
65
# File 'lib/cucumber/query.rb', line 63

def find_all_test_cases
  repository.test_case_by_id.values
end

#find_all_test_run_hook_finishedArray<TestRunHookFinished>

Returns:

  • (Array<TestRunHookFinished>)


73
74
75
# File 'lib/cucumber/query.rb', line 73

def find_all_test_run_hook_finished
  repository.test_run_hook_finished_by_test_run_hook_started_id.values
end

#find_all_test_run_hook_startedArray<TestRunHookStarted>

Returns:

  • (Array<TestRunHookStarted>)


68
69
70
# File 'lib/cucumber/query.rb', line 68

def find_all_test_run_hook_started
  repository.test_run_hook_started_by_id.values
end

#find_all_test_step_finishedArray<TestStepFinished>

Returns:

  • (Array<TestStepFinished>)


83
84
85
# File 'lib/cucumber/query.rb', line 83

def find_all_test_step_finished
  repository.test_steps_finished_by_test_case_started_id.values.flatten
end

#find_all_test_step_startedArray<TestStepStarted>

Returns:

  • (Array<TestStepStarted>)


78
79
80
# File 'lib/cucumber/query.rb', line 78

def find_all_test_step_started
  repository.test_steps_started_by_test_case_started_id.values.flatten
end

#find_all_test_stepsArray<TestStep>

Returns:

  • (Array<TestStep>)


88
89
90
# File 'lib/cucumber/query.rb', line 88

def find_all_test_steps
  repository.test_step_by_id.values
end

#find_all_undefined_parameter_typesArray<UndefinedParameterType>

Returns:

  • (Array<UndefinedParameterType>)


93
94
95
# File 'lib/cucumber/query.rb', line 93

def find_all_undefined_parameter_types
  repository.undefined_parameter_types
end

#find_hook_by(message) ⇒ Array<Hook>?

Parameters:

  • message (TestStep, TestRunHookStarted, TestRunHookFinished)

Returns:

  • (Array<Hook>, nil)


99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/cucumber/query.rb', line 99

def find_hook_by(message)
  ensure_only_message_types!(
    message,
    [Cucumber::Messages::TestStep, Cucumber::Messages::TestRunHookStarted, Cucumber::Messages::TestRunHookFinished],
    '#find_hook_by'
  )

  if message.is_a?(Cucumber::Messages::TestRunHookFinished)
    test_run_hook_started_message = find_test_run_hook_started_by(message)
    test_run_hook_started_message && find_hook_by(test_run_hook_started_message)
  else
    repository.hook_by_id[message.hook_id]
  end
end

#find_metaMeta

Returns:

  • (Meta)


115
116
117
# File 'lib/cucumber/query.rb', line 115

def find_meta
  repository.meta
end

#find_most_severe_test_step_result_by(message) ⇒ TestStepResult?

Parameters:

  • message (TestCaseStarted, TestCaseFinished)

Returns:

  • (TestStepResult, nil)


121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/cucumber/query.rb', line 121

def find_most_severe_test_step_result_by(message)
  ensure_only_message_types!(
    message,
    [Cucumber::Messages::TestCaseStarted, Cucumber::Messages::TestCaseFinished],
    '#find_most_severe_test_step_result_by'
  )

  if message.is_a?(Cucumber::Messages::TestCaseStarted)
    find_test_steps_finished_by(message)
      .map(&:test_step_result)
      .max_by { |test_step_result| test_step_result_rankings[test_step_result.status] }
  else
    test_case_started_message = find_test_case_started_by(message)
    test_case_started_message && find_most_severe_test_step_result_by(test_case_started_message)
  end
end

#find_pickle_by(message) ⇒ Pickle

Parameters:

  • message (TestCase, TestCaseStarted, TestCaseFinished, TestStepStarted, TestStepFinished)

Returns:

  • (Pickle)


140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'lib/cucumber/query.rb', line 140

def find_pickle_by(message)
  ensure_only_message_types!(
    message,
    [
      Cucumber::Messages::TestCase,
      Cucumber::Messages::TestCaseStarted,
      Cucumber::Messages::TestCaseFinished,
      Cucumber::Messages::TestStepStarted,
      Cucumber::Messages::TestStepFinished
    ],
    '#find_pickle_by'
  )

  test_case_message = message.is_a?(Cucumber::Messages::TestCase) ? message : find_test_case_by(message)
  repository.pickle_by_id[test_case_message.pickle_id]
end

#find_pickle_step_by(message) ⇒ PickleStep

Parameters:

  • message (TestStep)

Returns:

  • (PickleStep)


159
160
161
162
163
164
165
166
167
# File 'lib/cucumber/query.rb', line 159

def find_pickle_step_by(message)
  ensure_only_message_types!(
    message,
    [Cucumber::Messages::TestStep],
    '#find_pickle_step_by'
  )

  repository.pickle_step_by_id[message.pickle_step_id]
end

#find_step_by(message) ⇒ Step

Parameters:

  • message (PickleStep)

Returns:

  • (Step)


171
172
173
174
175
176
177
178
179
# File 'lib/cucumber/query.rb', line 171

def find_step_by(message)
  ensure_only_message_types!(
    message,
    [Cucumber::Messages::PickleStep],
    '#find_step_by'
  )

  repository.step_by_id[message.ast_node_ids.first]
end

#find_step_definitions_by(message) ⇒ Array<StepDefinition>

Parameters:

  • message (TestStep)

Returns:

  • (Array<StepDefinition>)


183
184
185
186
187
188
189
190
191
192
# File 'lib/cucumber/query.rb', line 183

def find_step_definitions_by(message)
  ensure_only_message_types!(
    message,
    [Cucumber::Messages::TestStep],
    '#find_step_definitions_by'
  )

  ids = message.step_definition_ids.nil? ? [] : message.step_definition_ids
  ids.filter_map { |id| repository.step_definition_by_id[id] }
end

#find_suggestions_by(message) ⇒ Array<Suggestion>

Parameters:

  • message (Pickle, PickleStep)

Returns:

  • (Array<Suggestion>)


196
197
198
199
200
201
202
203
204
205
206
207
208
# File 'lib/cucumber/query.rb', line 196

def find_suggestions_by(message)
  ensure_only_message_types!(
    message,
    [Cucumber::Messages::Pickle, Cucumber::Messages::PickleStep],
    '#find_suggestions_by'
  )

  if message.is_a?(Cucumber::Messages::PickleStep)
    repository.suggestions_by_pickle_step_id[message.id]
  else
    message.steps.flat_map { |pickle_step| find_suggestions_by(pickle_step) }
  end
end

#find_test_case_by(message) ⇒ TestCase

Parameters:

  • message (TestCaseStarted, TestCaseFinished, TestStepStarted, TestStepFinished)

Returns:

  • (TestCase)


212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
# File 'lib/cucumber/query.rb', line 212

def find_test_case_by(message)
  ensure_only_message_types!(
    message,
    [
      Cucumber::Messages::TestCaseStarted,
      Cucumber::Messages::TestCaseFinished,
      Cucumber::Messages::TestStepStarted,
      Cucumber::Messages::TestStepFinished
    ],
    '#find_test_case_by'
  )

  test_case_started_message = message.is_a?(Cucumber::Messages::TestCaseStarted) ? message : find_test_case_started_by(message)
  repository.test_case_by_id[test_case_started_message.test_case_id]
end

#find_test_case_finished_by(message) ⇒ TestCaseFinished

Parameters:

  • message (TestCaseStarted)

Returns:

  • (TestCaseFinished)


242
243
244
245
246
247
248
249
250
# File 'lib/cucumber/query.rb', line 242

def find_test_case_finished_by(message)
  ensure_only_message_types!(
    message,
    [Cucumber::Messages::TestCaseStarted],
    '#find_test_case_finished_by'
  )

  repository.test_case_finished_by_test_case_started_id[message.id]
end

#find_test_case_started_by(message) ⇒ TestCaseStarted

Parameters:

  • message (TestCaseFinished, TestStepStarted, TestStepFinished)

Returns:

  • (TestCaseStarted)


230
231
232
233
234
235
236
237
238
# File 'lib/cucumber/query.rb', line 230

def find_test_case_started_by(message)
  ensure_only_message_types!(
    message,
    [Cucumber::Messages::TestCaseFinished, Cucumber::Messages::TestStepStarted, Cucumber::Messages::TestStepFinished],
    '#find_test_case_started_by'
  )

  repository.test_case_started_by_id[message.test_case_started_id]
end

#find_test_run_durationHash<String, Integer>?

Returns:

  • (Hash<String, Integer>, nil)


253
254
255
256
257
258
259
260
# File 'lib/cucumber/query.rb', line 253

def find_test_run_duration
  if repository.test_run_started.nil? || repository.test_run_finished.nil?
    nil
  else
    float_time = timestamp_to_time(repository.test_run_finished.timestamp) - timestamp_to_time(repository.test_run_started.timestamp)
    seconds_to_duration(float_time)
  end
end

#find_test_run_finishedTestRunFinished

Returns:

  • (TestRunFinished)


292
293
294
# File 'lib/cucumber/query.rb', line 292

def find_test_run_finished
  repository.test_run_finished
end

#find_test_run_hook_finished_by(message) ⇒ TestRunHookFinished

Parameters:

  • message (TestRunHookStarted)

Returns:

  • (TestRunHookFinished)


276
277
278
279
280
281
282
283
284
# File 'lib/cucumber/query.rb', line 276

def find_test_run_hook_finished_by(message)
  ensure_only_message_types!(
    message,
    [Cucumber::Messages::TestRunHookStarted],
    '#find_test_run_hook_finished_by'
  )

  repository.test_run_hook_finished_by_test_run_hook_started_id[message.id]
end

#find_test_run_hook_started_by(message) ⇒ TestRunHookStarted

Parameters:

  • message (TestRunHookFinished)

Returns:

  • (TestRunHookStarted)


264
265
266
267
268
269
270
271
272
# File 'lib/cucumber/query.rb', line 264

def find_test_run_hook_started_by(message)
  ensure_only_message_types!(
    message,
    [Cucumber::Messages::TestRunHookFinished],
    '#find_test_run_hook_started_by'
  )

  repository.test_run_hook_started_by_id[message.test_run_hook_started_id]
end

#find_test_run_startedTestRunStarted

Returns:

  • (TestRunStarted)


287
288
289
# File 'lib/cucumber/query.rb', line 287

def find_test_run_started
  repository.test_run_started
end

#find_test_step_by(message) ⇒ TestStep

Parameters:

  • message (TestStepStarted, TestStepFinished)

Returns:

  • (TestStep)


298
299
300
301
302
303
304
305
306
# File 'lib/cucumber/query.rb', line 298

def find_test_step_by(message)
  ensure_only_message_types!(
    message,
    [Cucumber::Messages::TestStepStarted, Cucumber::Messages::TestStepFinished],
    '#find_test_step_by'
  )

  repository.test_step_by_id[message.test_step_id]
end

#find_test_steps_finished_by(message) ⇒ Array<TestStep>

Parameters:

  • message (TestCaseStarted, TestCaseFinished)

Returns:

  • (Array<TestStep>)


323
324
325
326
327
328
329
330
331
332
333
334
335
336
# File 'lib/cucumber/query.rb', line 323

def find_test_steps_finished_by(message)
  ensure_only_message_types!(
    message,
    [Cucumber::Messages::TestCaseStarted, Cucumber::Messages::TestCaseFinished],
    '#find_test_steps_finished_by'
  )

  if message.is_a?(Cucumber::Messages::TestCaseStarted)
    repository.test_steps_finished_by_test_case_started_id.fetch(message.id, [])
  else
    test_case_started_message = find_test_case_started_by(message)
    test_case_started_message.nil? ? [] : find_test_steps_finished_by(test_case_started_message)
  end
end

#find_test_steps_started_by(message) ⇒ Array<TestStep>

Parameters:

  • message (TestCaseStarted, TestCaseFinished)

Returns:

  • (Array<TestStep>)


310
311
312
313
314
315
316
317
318
319
# File 'lib/cucumber/query.rb', line 310

def find_test_steps_started_by(message)
  ensure_only_message_types!(
    message,
    [Cucumber::Messages::TestCaseStarted, Cucumber::Messages::TestCaseFinished],
    '#find_test_steps_started_by'
  )

  key = message.is_a?(Cucumber::Messages::TestCaseStarted) ? message.id : message.test_case_started_id
  repository.test_steps_started_by_test_case_started_id.fetch(key, [])
end