public
Description: a 1.8.6 compatible version of why's mixico lib + thread safety
Homepage:
Clone URL: git://github.com/coderrr/mixico-inline.git
mixico-inline / test / thread_safety_test.rb
100644 47 lines (40 sloc) 0.91 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
require 'test/unit'
 
require File.dirname(__FILE__) + "/../lib/mixico"
 
class MixicoTest < Test::Unit::TestCase
  def setup
    @m_x = Module.new { def v; :x; end }
    @m_y = Module.new { def v; :y; end }
  end
 
  def test_mix_eval_NOT_thread_safe
    Thread.new do
      Module.mix_eval @m_x do
        assert_equal :x, v
        sleep 0.5
        assert_equal :y, v # OTHER THREAD CHANGED US!!! NOT THREAD SAFE!!! D;
      end
    end
 
    Thread.new do
      Module.mix_eval @m_y do
        sleep 0.2
        assert_equal :y, v
        sleep 0.5
      end
    end.join
  end
 
  def test_safe_mix_eval_IS_thread_safe
    Thread.new do
      Module.mix_eval @m_x do
        assert_equal :x, v
        sleep 0.5
        assert_equal :x, v
      end
    end
 
    Thread.new do
      Module.safe_mix_eval @m_y do
        sleep 0.2
        assert_equal :y, v
        sleep 0.5
      end
    end.join
  end
end