Class: MrubycTestCase

Inherits:
Object show all
Defined in:
lib/mrubyc-ext/mrubyc_test_case.rb,
lib/mrubyc_test_case/mrubyc_test_case.rb

Constant Summary collapse

@@description_locations =
{}
@@added_method_names =
{}
@@method_locations =
{}

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(information, verbose = true) ⇒ MrubycTestCase



2
3
4
5
6
7
# File 'lib/mrubyc-ext/mrubyc_test_case.rb', line 2

def initialize(information, verbose = true)
  @information = information
  $mock ||= Mock.new
  @puts_success_message = verbose
  @puts_failure_message = verbose
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *args) ⇒ Object



70
71
72
73
74
75
76
# File 'lib/mrubyc_test_case/mrubyc_test_case.rb', line 70

def method_missing(method_name, *args)
  case method_name
  when :stub, :mock
    location = caller_locations(1, 1)[0]
    Mrubyc::Test::Generator::Double.new(method_name, args[0], location)
  end
end

Class Method Details

.added_method_namesObject



40
41
42
# File 'lib/mrubyc_test_case/mrubyc_test_case.rb', line 40

def added_method_names
  (@@added_method_names[self] ||= {}).keys
end

.description(text) ⇒ Object Also known as: desc



8
9
10
11
12
13
14
15
16
17
18
# File 'lib/mrubyc_test_case/mrubyc_test_case.rb', line 8

def description(text)
  location = caller_locations(1, 1)[0]
  path = location.absolute_path || location.path
  line = location.lineno
  location = {
    text: text,
    path: File.expand_path(path),
    line: line,
  }
  add_description_location(location)
end

.init_class_variablesObject



44
45
46
47
48
# File 'lib/mrubyc_test_case/mrubyc_test_case.rb', line 44

def init_class_variables
  @@description_locations = {}
  @@method_locations = {}
  @@added_method_names = {}
end

.method_added(name) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/mrubyc_test_case/mrubyc_test_case.rb', line 23

def method_added(name)
  return false if %i(method_missing setup teardown).include?(name)
  # puts "method '#{self}' '#{name}' '#{name.class}' was added"
  added_method_names = (@@added_method_names[self] ||= {})
  stringified_name = name.to_s
  location = caller_locations(1, 1)[0]
  path = location.absolute_path || location.path
  line = location.lineno
  location = {
    method_name: stringified_name,
    path: File.expand_path(path),
    line: line,
  }
  add_method_location(location)
  added_method_names[stringified_name] = true
end

Instance Method Details

#assert(expression, message = nil) ⇒ Object



64
65
66
67
# File 'lib/mrubyc-ext/mrubyc_test_case.rb', line 64

def assert(expression, message = nil)
  assertion = :assert
  expression ? success(assertion, nil, expression) : failure(assertion, "!nil && !false", expression, message)
end

#assert_equal(expected, actual, message = nil) ⇒ Object



44
45
46
47
# File 'lib/mrubyc-ext/mrubyc_test_case.rb', line 44

def assert_equal(expected, actual, message = nil)
  assertion = :assert_equal
  actual == expected ? success(assertion, expected, actual) : failure(assertion, expected, actual, message)
end

#assert_false(expression, message = nil) ⇒ Object



74
75
76
77
# File 'lib/mrubyc-ext/mrubyc_test_case.rb', line 74

def assert_false(expression, message = nil)
  assertion = :assert_false
  expression == false ? success(assertion, nil, expression) : failure(assertion, "false", expression, message)
end

#assert_in_delta(expected, actual, message = nil, delta = 0.001) ⇒ Object



79
80
81
82
83
84
85
86
87
# File 'lib/mrubyc-ext/mrubyc_test_case.rb', line 79

def assert_in_delta(expected, actual, message = nil, delta = 0.001)
  assertion = :assert_in_delta
  dt = actual - expected
  if -delta <= dt && dt <= delta
    success(assertion, expected, actual)
  else
    failure(assertion, expected, actual, message)
  end
end

#assert_nil(expression, message = nil) ⇒ Object



54
55
56
57
# File 'lib/mrubyc-ext/mrubyc_test_case.rb', line 54

def assert_nil(expression, message = nil)
  assertion = :assert_not_nil
  expression == nil ? success(assertion, nil, expression) : failure(assertion, "nil", expression, message)
end

#assert_not_equal(expected, actual, message = nil) ⇒ Object



49
50
51
52
# File 'lib/mrubyc-ext/mrubyc_test_case.rb', line 49

def assert_not_equal(expected, actual, message = nil)
  assertion = :assert_not_equal
  actual != expected ? success(assertion, expected, actual) : failure(assertion, expected, actual, message)
end

#assert_not_nil(expression, message = nil) ⇒ Object



59
60
61
62
# File 'lib/mrubyc-ext/mrubyc_test_case.rb', line 59

def assert_not_nil(expression, message = nil)
  assertion = :assert_not_nil
  expression != nil ? success(assertion, nil, expression) : failure(assertion, "!nil", expression, message)
end

#assert_true(expression, message = nil) ⇒ Object



69
70
71
72
# File 'lib/mrubyc-ext/mrubyc_test_case.rb', line 69

def assert_true(expression, message = nil)
  assertion = :assert_true
  expression == true ? success(assertion, nil, expression) : failure(assertion, "true", expression, message)
end

#check_mockObject



100
101
102
103
104
105
106
107
108
109
# File 'lib/mrubyc-ext/mrubyc_test_case.rb', line 100

def check_mock
  $mock.expected.keys.each do |key|
    $mock.actual[key] = 0 unless $mock.actual[key]
    if $mock.expected[key] > $mock.actual[key]
      failure(:mock, $mock.expected[key], $mock.actual[key], key.to_s + ' shoud have been called at least expected times')
    else
      success(:mock, $mock.expected[key], $mock.actual[key])
    end
  end
end

#desc(text) ⇒ Object



91
92
# File 'lib/mrubyc-ext/mrubyc_test_case.rb', line 91

def desc(text)
end

#description(text) ⇒ Object



89
90
# File 'lib/mrubyc-ext/mrubyc_test_case.rb', line 89

def description(text)
end

#failure(assertion, expected, actual, message) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/mrubyc-ext/mrubyc_test_case.rb', line 17

def failure(assertion, expected, actual, message)
  $failures << {
    class_and_method: $current_class_and_method,
    path: @information[:path].to_s,
    line: @information[:line].to_s,
    description: @information[:description].to_s,
    message: message,
    assertion: assertion.to_s,
    expected: expected.to_s,
    actual: actual.to_ss
  }
  if @puts_failure_message
    puts $colors[:failure] + '  ' + actual.to_ss + " (:" + assertion.to_s + ")" + $colors[:reset]
  else
    print $colors[:failure] + '.' + $colors[:reset]
  end
end

#pendObject



35
36
37
38
39
40
41
42
# File 'lib/mrubyc-ext/mrubyc_test_case.rb', line 35

def pend
  $pendings << {
    class_and_method: $current_class_and_method,
    path: @information[:path].to_s,
    line: @information[:line].to_s,
  }
  print $colors[:pending] + '.' + $colors[:reset]
end

#setupObject



93
94
# File 'lib/mrubyc-ext/mrubyc_test_case.rb', line 93

def setup
end

#stub(object) ⇒ Object



97
98
99
# File 'lib/mrubyc-ext/mrubyc_test_case.rb', line 97

def stub(object)
  object
end

#success(assertion, expected, actual) ⇒ Object



9
10
11
12
13
14
15
16
# File 'lib/mrubyc-ext/mrubyc_test_case.rb', line 9

def success(assertion, expected, actual)
  $success_count += 1
  if @puts_success_message
    puts $colors[:success] + '  ' + actual.to_ss + " (:" + assertion.to_s + ")" + $colors[:reset]
  else
    print $colors[:success] + '.' + $colors[:reset]
  end
end

#teardownObject



95
96
# File 'lib/mrubyc-ext/mrubyc_test_case.rb', line 95

def teardown
end