Class: TestBlockTry

Inherits:
Test::Unit::TestCase
  • Object
show all
Defined in:
lib/dolzenko/try_block.rb

Instance Method Summary collapse

Instance Method Details

#setupObject



61
62
63
# File 'lib/dolzenko/try_block.rb', line 61

def setup
  TryBlock.install!
end

#test_asserts_passed_blockObject



156
157
158
159
160
161
162
163
164
# File 'lib/dolzenko/try_block.rb', line 156

def test_asserts_passed_block
  assert_raises ArgumentError do
    TryBlock.try_block
  end

  assert_raises ArgumentError do
    "qwerty".try_block
  end
end

#test_core_extObject



166
167
168
169
# File 'lib/dolzenko/try_block.rb', line 166

def test_core_ext
  assert_nil nil.try_block { 42 }
  assert_equal 6, "qwerty".try_block { length }
end

#test_doesnt_eat_general_exceptionObject



87
88
89
90
91
92
93
94
95
# File 'lib/dolzenko/try_block.rb', line 87

def test_doesnt_eat_general_exception
  assert_raises RuntimeError do
    TryBlock { raise "FAIL" }
  end
  
  assert_raises RuntimeError do
    "qwerty".try_block { raise "FAIL" }
  end
end

#test_doesnt_eat_general_exception_originated_from_somewhere_elseObject



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/dolzenko/try_block.rb', line 97

def test_doesnt_eat_general_exception_originated_from_somewhere_else
  proc_raiser = proc { raise "FAIL" }
  obj_raiser = "qwerty".tap { |obj| def obj.raiser; raise "FAIL" end }

  assert_raises RuntimeError do
    TryBlock { proc_raiser[] }
  end

  assert_raises RuntimeError do
    obj_raiser.try_block { raiser }
  end

  assert_raises RuntimeError do
    [1].try_block { detect { |e| raise "FAIL" } }
  end
end

#test_doesnt_eat_nil_object_exception_originated_from_somewhere_elseObject



114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# File 'lib/dolzenko/try_block.rb', line 114

def test_doesnt_eat_nil_object_exception_originated_from_somewhere_else
  some_nil = nil
  no_method_raiser = proc { some_nil.doesnt_exist_on_nil }
  obj_no_method_raiser = "qwerty".tap { |obj| def obj.raiser; doesnt_exist_on_string() end }

  if RUBY_VERSION < '1.9'
      # ["try_block.rb:97",
      # "try_block.rb:118:in `[]'",
      # "try_block.rb:118:in `test_doesnt_eat_nil_object_exception_originated_from_somewhere_else'",
      # "try_block.rb:37:in `BlockTry'",
      # "try_block.rb:118:in `test_doesnt_eat_nil_object_exception_originated_from_somewhere_else'", <= call site
    assert_raises(NoMethodError) do
      TryBlock do
        no_method_raiser[]
      end
    end
  else
    # ["try_block.rb:97:in `block in test_doesnt_eat_nil_object_exception_originated_from_somewhere_else'",
    # "try_block.rb:112:in `[]'",
    # "try_block.rb:112:in `block (2 levels) in test_doesnt_eat_nil_object_exception_originated_from_somewhere_else'",
    # "try_block.rb:37:in `BlockTry'",
    # "try_block.rb:112:in `block in test_doesnt_eat_nil_object_exception_originated_from_somewhere_else'", <= call site
    # ...
    assert_raises(NoMethodError) { TryBlock { no_method_raiser[] } } # this will only work in 1.9
  end


  assert_raises NoMethodError do
    obj_no_method_raiser.try_block { raiser }
  end
end

#test_evalObject



178
179
180
181
182
183
184
185
186
187
# File 'lib/dolzenko/try_block.rb', line 178

def test_eval
  assert_raises(NoMethodError) { eval("TryBlock { 'qwerty'.doesnt_exist_on_string }") }
  assert_nil(eval("TryBlock { nil.doesnt_exist_on_nil }")) unless RUBY_PLATFORM =~ /\bjava\b/ 

  assert_raises(NoMethodError) { eval("'qwerty'.try_block { doesnt_exist_on_string() }") }
  assert_nil(eval("'qwerty'.try_block { nil.doesnt_exist_on_nil }")) unless RUBY_PLATFORM =~ /\bjava\b/

  assert_equal 6, eval("'qwerty'.try_block { length }")
  assert_nil(eval("[false].try_block { detect { |e| e }.doesnt_exist_on_nil.also_doesnt_exist_on_nil }")) unless RUBY_PLATFORM =~ /\bjava\b/
end

#test_hash_diggingObject



146
147
148
149
150
151
152
153
154
# File 'lib/dolzenko/try_block.rb', line 146

def test_hash_digging
  h = { :asd => 123, :rty => 456}
  assert_nil TryBlock { h[:qwe][:asd][:zxc] }
  assert_equal 123, TryBlock { h[:asd] }
  
  assert_nil h.try_block { self[:qwe][:asd][:zxc] }
  assert_nil h.try_block { |ha| ha[:qwe][:asd][:zxc] }
  assert_equal 456, h.try_block { |ha| ha[:rty] }
end

#test_meta_methodObject



171
172
173
174
175
176
# File 'lib/dolzenko/try_block.rb', line 171

def test_meta_method
  obj_raiser = Class.new.tap { |c| c.module_eval("def raiser; raise 'FAIL' end ") }

  assert_raises(RuntimeError) { TryBlock { obj_raiser.new.raiser } }
  assert_raises(RuntimeError) { obj_raiser.new.try_block { raiser } }
end

#test_name_error_in_blockObject



77
78
79
80
81
82
83
84
85
# File 'lib/dolzenko/try_block.rb', line 77

def test_name_error_in_block
  assert_raises NameError do
    TryBlock { no_such_name }
  end

  assert_raises NameError do
    "qwerty".try_block { no_such_name }
  end
end

#test_properly_eats_exception_on_nil_object_from_call_siteObject



65
66
67
68
69
70
71
72
73
74
75
# File 'lib/dolzenko/try_block.rb', line 65

def test_properly_eats_exception_on_nil_object_from_call_site
  some_nil = nil

  assert_nil TryBlock { some_nil.something_else }

  assert_nil "qwerty".try_block { some_nil.something_else }

  assert_nil some_nil.try_block { something_else }

  assert_nil [false].try_block { detect { |e| e }.something }
end