Module: Assert::View::Helpers::Common

Included in:
Base
Defined in:
lib/assert/view/helpers/common.rb

Defined Under Namespace

Modules: ClassMethods Classes: ResultDetails

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(receiver) ⇒ Object



5
6
7
# File 'lib/assert/view/helpers/common.rb', line 5

def self.included(receiver)
  receiver.class_eval{ extend ClassMethods }
end

Instance Method Details

#all_pass?Boolean

Returns:

  • (Boolean)


26
27
28
# File 'lib/assert/view/helpers/common.rb', line 26

def all_pass?
  self.count(:pass) == self.count(:results)
end

#all_pass_result_summary_msgObject

generate an appropriate result summary msg for all tests passing



113
114
115
116
117
118
119
120
121
# File 'lib/assert/view/helpers/common.rb', line 113

def all_pass_result_summary_msg
  if self.count(:results) < 1
    "uhh..."
  elsif self.count(:results) == 1
    "pass"
  else
    "all pass"
  end
end

#captured_output(output) ⇒ Object

show any captured output



90
91
92
93
94
# File 'lib/assert/view/helpers/common.rb', line 90

def captured_output(output)
  "--- stdout ---\n"\
  "#{output}"\
  "--------------"
end

#count(type) ⇒ Object



18
19
20
# File 'lib/assert/view/helpers/common.rb', line 18

def count(type)
  self.suite.count(type)
end

#matched_result_details_for(match, tests, result_order = :normal) ⇒ Object

get all the result details for a set of tests matching a file or context



67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/assert/view/helpers/common.rb', line 67

def matched_result_details_for(match, tests, result_order=:normal)
  context_match = match.kind_of?(Class) && match.ancestors.include?(Assert::Context)
  file_match = match.kind_of?(String)

  matching_tests = if context_match
    tests.select {|test| test.context_info.klass == match}
  elsif file_match
    tests.select {|test| test.context_info.file == match}
  else
    tests
  end

  result_details_for(matching_tests, result_order)
end

#ocurring_result_typesObject

return a list of result symbols that have actually occurred



97
98
99
100
101
# File 'lib/assert/view/helpers/common.rb', line 97

def ocurring_result_types
  @result_types ||= [
    :pass, :fail, :ignore, :skip, :error
  ].select { |result_sym| self.count(result_sym) > 0 }
end

#ordered_suite_contextsObject



37
38
39
# File 'lib/assert/view/helpers/common.rb', line 37

def ordered_suite_contexts
  self.suite_contexts.sort{|a,b| a.to_s <=> b.to_s}
end

#ordered_suite_filesObject



48
49
50
# File 'lib/assert/view/helpers/common.rb', line 48

def ordered_suite_files
  self.suite_files.sort{|a,b| a.to_s <=> b.to_s}
end

#result_count_statementObject



137
138
139
# File 'lib/assert/view/helpers/common.rb', line 137

def result_count_statement
  "#{self.count(:results)} result#{'s' if self.count(:results) != 1}"
end

#result_details_for(tests, result_order = :normal) ⇒ Object

get all the result details for a set of tests



53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/assert/view/helpers/common.rb', line 53

def result_details_for(tests, result_order=:normal)
  test_index = 0
  tests.collect do |test|
    test_index += 1

    details = test.results.collect do |result|
      ResultDetails.new(result, test, test_index)
    end
    details.reverse! if result_order == :reversed
    details
  end.compact.flatten
end

#result_summary_msg(result_type) ⇒ Object

print a result summary message for a given result type



104
105
106
107
108
109
110
# File 'lib/assert/view/helpers/common.rb', line 104

def result_summary_msg(result_type)
  if result_type == :pass && self.all_pass?
    self.all_pass_result_summary_msg
  else
    "#{self.count(result_type)} #{result_type.to_s}"
  end
end

#results_summary_sentenceObject

generate a sentence fragment describing the breakdown of test results if a block is given, yield each msg in the breakdown for custom formatting



125
126
127
128
129
130
131
# File 'lib/assert/view/helpers/common.rb', line 125

def results_summary_sentence
  summaries = self.ocurring_result_types.collect do |result_sym|
    summary_msg = self.result_summary_msg(result_sym)
    block_given? ? yield(summary_msg, result_sym) : summary_msg
  end
  self.to_sentence(summaries)
end

#run_time(format = '%.6f') ⇒ Object

get the formatted suite run time



10
11
12
# File 'lib/assert/view/helpers/common.rb', line 10

def run_time(format='%.6f')
  format % self.suite.run_time
end

#runner_seedObject



14
15
16
# File 'lib/assert/view/helpers/common.rb', line 14

def runner_seed
  Assert.config.runner_seed
end

#show_result_details?(result) ⇒ Boolean

only show result details for failed or errored results show result details if a skip or passed result was issues w/ a message

Returns:

  • (Boolean)


84
85
86
87
# File 'lib/assert/view/helpers/common.rb', line 84

def show_result_details?(result)
  ([:fail, :error].include?(result.to_sym)) ||
  ([:skip, :ignore].include?(result.to_sym) && result.message)
end

#suite_contextsObject

get a uniq list of contexts for the test suite



31
32
33
34
35
# File 'lib/assert/view/helpers/common.rb', line 31

def suite_contexts
  @suite_contexts ||= self.suite.tests.inject([]) do |contexts, test|
    contexts << test.context_info.klass
  end.uniq
end

#suite_filesObject

get a uniq list of files containing contexts for the test suite



42
43
44
45
46
# File 'lib/assert/view/helpers/common.rb', line 42

def suite_files
  @suite_files ||= self.suite.tests.inject([]) do |files, test|
    files << test.context_info.file
  end.uniq
end

#test_count_statementObject



133
134
135
# File 'lib/assert/view/helpers/common.rb', line 133

def test_count_statement
  "#{self.count(:tests)} test#{'s' if self.count(:tests) != 1}"
end

#tests?Boolean

Returns:

  • (Boolean)


22
23
24
# File 'lib/assert/view/helpers/common.rb', line 22

def tests?
  self.count(:tests) > 0
end

#to_sentence(things) ⇒ Object

generate a comma-seperated sentence fragment given a list of things



142
143
144
145
146
147
148
# File 'lib/assert/view/helpers/common.rb', line 142

def to_sentence(things)
  if things.size <= 2
    things.join(things.size == 2 ? ' and ' : '')
  else
    [things[0..-2].join(", "), things.last].join(", and ")
  end
end