Class: Assert::Test

Inherits:
Object
  • Object
show all
Defined in:
lib/assert/test.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(build_data = nil) ⇒ Test

Returns a new instance of Test.



41
42
43
# File 'lib/assert/test.rb', line 41

def initialize(build_data = nil)
  @build_data, @results = build_data || {}, []
end

Instance Attribute Details

#resultsObject (readonly)

Returns the value of attribute results.



38
39
40
# File 'lib/assert/test.rb', line 38

def results
  @results
end

#total_result_countObject



50
51
52
# File 'lib/assert/test.rb', line 50

def total_result_count
  @total_result_count ||= (@build_data[:total_result_count] || 0)
end

Class Method Details

.for_block(name, context_info, config, &block) ⇒ Object



22
23
24
25
26
27
28
# File 'lib/assert/test.rb', line 22

def self.for_block(name, context_info, config, &block)
  self.new(self.name_file_line_context_data(context_info, name).merge({
    :context_info => context_info,
    :config       => config,
    :code         => block
  }))
end

.for_method(method_name, context_info, config) ⇒ Object



30
31
32
33
34
35
36
# File 'lib/assert/test.rb', line 30

def self.for_method(method_name, context_info, config)
  self.new(self.name_file_line_context_data(context_info, method_name).merge({
    :context_info => context_info,
    :config       => config,
    :code         => proc{ self.send(method_name) }
  }))
end

.name_file_line_context_data(ci, name) ⇒ Object



16
17
18
19
20
# File 'lib/assert/test.rb', line 16

def self.name_file_line_context_data(ci, name)
  { :name      => ci.test_name(name),
    :file_line => ci.called_from
  }
end

.result_count_meth(type) ⇒ Object

a Test is some code/method to run in the scope of a Context that may produce results



12
13
14
# File 'lib/assert/test.rb', line 12

def self.result_count_meth(type)
  "#{type}_result_count".to_sym
end

Instance Method Details

#<=>(other_test) ⇒ Object



116
117
118
# File 'lib/assert/test.rb', line 116

def <=>(other_test)
  self.name <=> other_test.name
end

#capture_result(result, callback) ⇒ Object



89
90
91
92
93
94
95
# File 'lib/assert/test.rb', line 89

def capture_result(result, callback)
  self.results << result
  self.total_result_count += 1
  n = result_count_meth(result.to_sym)
  instance_variable_set("@#{n}", (instance_variable_get("@#{n}") || 0) + 1)
  callback.call(result)
end

#codeObject



63
# File 'lib/assert/test.rb', line 63

def code;         @code         ||= @build_data[:code];         end

#configObject



62
# File 'lib/assert/test.rb', line 62

def config;       @config       ||= @build_data[:config];       end

#context_classObject



73
# File 'lib/assert/test.rb', line 73

def context_class; self.context_info.klass; end

#context_infoObject



61
# File 'lib/assert/test.rb', line 61

def context_info; @context_info ||= @build_data[:context_info]; end

#dataObject



65
66
67
68
69
70
71
# File 'lib/assert/test.rb', line 65

def data
  { :file_line => self.file_line.to_s,
    :name      => self.name.to_s,
    :output    => self.output.to_s,
    :run_time  => self.run_time
  }.merge(result_count_data(:total_result_count => self.total_result_count))
end

#fileObject



74
# File 'lib/assert/test.rb', line 74

def file;          self.file_line.file;     end

#file_lineObject



45
# File 'lib/assert/test.rb', line 45

def file_line; @file_line ||= FileLine.parse((@build_data[:file_line] || '').to_s); end

#inspectObject



120
121
122
123
124
125
# File 'lib/assert/test.rb', line 120

def inspect
  attributes_string = ([ :name, :context_info, :results ].collect do |attr|
    "@#{attr}=#{self.send(attr).inspect}"
  end).join(" ")
  "#<#{self.class}:#{'0x0%x' % (object_id << 1)} #{attributes_string}>"
end

#line_numberObject



75
# File 'lib/assert/test.rb', line 75

def line_number;   self.file_line.line;     end

#nameObject



46
# File 'lib/assert/test.rb', line 46

def name;      @name      ||= (@build_data[:name]                     || '');       end

#outputObject



47
# File 'lib/assert/test.rb', line 47

def output;    @output    ||= (@build_data[:output]                   || '');       end

#result_count(type = nil) ⇒ Object



81
82
83
84
85
86
87
# File 'lib/assert/test.rb', line 81

def result_count(type = nil)
  if Assert::Result.types.keys.include?(type)
    self.send(result_count_meth(type))
  else
    self.total_result_count
  end
end

#result_rateObject



77
78
79
# File 'lib/assert/test.rb', line 77

def result_rate
  get_rate(self.result_count, self.run_time)
end

#run(&result_callback) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/assert/test.rb', line 97

def run(&result_callback)
  result_callback ||= proc{ |result| } # do nothing by default
  scope = self.context_class.new(self, self.config, result_callback)
  start_time = Time.now
  capture_output do
    self.context_class.run_arounds(scope) do
      run_test(scope, result_callback)
    end
  end
  @run_time = Time.now - start_time
  @results
end

#run_timeObject



48
# File 'lib/assert/test.rb', line 48

def run_time;  @run_time  ||= (@build_data[:run_time]                 || 0);        end