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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
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
145
146
147
148
149
150
151
|
# -*- coding: utf-8 -*-
require 'test/unit'
require 'rubygems'
require 'mocha'
require File.expand_path(File.dirname(__FILE__) + '/../helper')
miquire :core, 'plugin'
class TC_Plugin < Test::Unit::TestCase
def setup
Plugin.clear!
end
must "basic plugin" do
sum = 0
Plugin.create(:event) do
on_increase do |v|
sum += v end
filter_increase do |v|
[v * 2]
end
end
Event[:increase].call(1)
Delayer.run while not Delayer.empty?
assert_equal(2, sum)
end
must "filter in another thread" do
filter_thread = nil
Plugin.create(:event) do
on_thread do
end
filter_thread do
filter_thread = Thread.current
[]
end
end
Event[:thread].call
Delayer.run while not Delayer.empty?
assert filter_thread
assert_equal Thread.current, filter_thread
Event.filter_another_thread = true
filter_thread = nil
r = true
Event[:thread].call.next{ r = false }.trap{ r = false }
Delayer.run while r
# p r
# p SerialThread.instance_eval{ @queue.size }
# p Delayer.empty?
assert filter_thread
assert_not_equal Thread.current, filter_thread
end
must "uninstall" do
sum = 0
Plugin.create(:event) do
on_increase do |v|
sum += v end
filter_increase do |v|
[v * 2]
end
end
Plugin.create(:event).uninstall
Event[:increase].call(1)
Delayer.run while not Delayer.empty?
assert_equal(0, sum)
end
must "detach" do
sum = 0
event = filter = nil
Plugin.create(:event) do
event = on_increase do |v|
sum += v end
filter = filter_increase do |v|
[v * 2]
end
end
Event[:increase].call(1)
Delayer.run while not Delayer.empty?
assert_equal(2, sum)
Plugin.create(:event).detach filter
Event[:increase].call(1)
Delayer.run while not Delayer.empty?
assert_equal(3, sum)
Plugin.create(:event).detach event
Event[:increase].call(1)
Delayer.run while not Delayer.empty?
assert_equal(3, sum)
end
must "get plugin list" do
assert_equal([], Plugin.plugin_list)
Plugin.create(:plugin_0)
assert_equal([:plugin_0], Plugin.plugin_list)
Plugin.create(:plugin_1)
assert_equal([:plugin_0, :plugin_1], Plugin.plugin_list)
end
must "dsl method defevent" do
Plugin.create :defevent do
defevent :increase, prototype: [Integer] end
assert_equal([Integer], Event[:increase].options[:prototype])
assert_equal(Plugin[:defevent], Event[:increase].options[:plugin])
end
must "unload hook" do
value = 0
Plugin.create(:unload) {
on_unload {
value += 2 }
on_unload {
value += 1 } }
assert_equal(value, 0)
Plugin.create(:unload).uninstall
assert_equal(value, 3)
end
must "simple dsl" do
Plugin.create :dsl_def do
defdsl :twice do |number|
number * 2
end
end
dsl_use = Plugin.create(:dsl_use)
assert_equal(4, dsl_use.twice(2))
assert_equal(0, dsl_use.twice(0))
assert_equal(-26, dsl_use.twice(-13))
end
must "callback dsl" do
Plugin.create :dsl_def do
defdsl :rejector do |value, &condition|
value.reject(&condition)
end
end
dsl_use = Plugin.create(:dsl_use)
assert_equal([2, 4, 6], dsl_use.rejector(1..6){ |d| 0 != (d & 1) })
end
end
|