blockenspiel 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,7 +3,7 @@
3
3
  # Blockenspiel version
4
4
  #
5
5
  # -----------------------------------------------------------------------------
6
- # Copyright 2008-2009 Daniel Azuma
6
+ # Copyright 2008-2010 Daniel Azuma
7
7
  #
8
8
  # All rights reserved.
9
9
  #
@@ -37,7 +37,7 @@
37
37
  module Blockenspiel
38
38
 
39
39
  # Current gem version, as a frozen string.
40
- VERSION_STRING = '0.3.3'.freeze
40
+ VERSION_STRING = '0.4.0'.freeze
41
41
 
42
42
  autoload(:VERSION, ::File.dirname(__FILE__)+'/versionomy.rb')
43
43
 
@@ -3,7 +3,7 @@
3
3
  # Blockenspiel version
4
4
  #
5
5
  # -----------------------------------------------------------------------------
6
- # Copyright 2008-2009 Daniel Azuma
6
+ # Copyright 2008-2010 Daniel Azuma
7
7
  #
8
8
  # All rights reserved.
9
9
  #
Binary file
@@ -0,0 +1,2 @@
1
+ set_value(:a, 1)
2
+ set_value_by_block(:b){ 2 }
data/tests/tc_basic.rb CHANGED
@@ -131,6 +131,36 @@ module Blockenspiel
131
131
  end
132
132
 
133
133
 
134
+ # Test basic usage with a string.
135
+ #
136
+ # * Asserts that the specified target object receives the messages.
137
+
138
+ def test_basic_string
139
+ string_ = <<-STR
140
+ set_value(:a, 1)
141
+ set_value_by_block(:b){ 2 }
142
+ STR
143
+ target_ = SimpleTarget.new
144
+ ::Blockenspiel.invoke(string_, target_)
145
+ assert(!self.respond_to?(:set_value))
146
+ assert_equal(1, target_.get_value(:a))
147
+ assert_equal(2, target_.get_value(:b))
148
+ end
149
+
150
+
151
+ # Test basic usage with a file.
152
+ #
153
+ # * Asserts that the specified target object receives the messages.
154
+
155
+ def test_basic_file
156
+ target_ = SimpleTarget.new
157
+ ::Blockenspiel.invoke(target_, :file => "#{File.dirname(__FILE__)}/files/file1.rb")
158
+ assert(!self.respond_to?(:set_value))
159
+ assert_equal(1, target_.get_value(:a))
160
+ assert_equal(2, target_.get_value(:b))
161
+ end
162
+
163
+
134
164
  end
135
165
 
136
166
  end
data/tests/tc_mixins.rb CHANGED
@@ -242,12 +242,12 @@ module Blockenspiel
242
242
  hash_ = ::Hash.new
243
243
  block1_ = ::Proc.new do
244
244
  set_value('a', 1)
245
- sleep(0.5)
245
+ sleep(0.1)
246
246
  set_value2('b'){ 2 }
247
247
  end
248
248
  block2_ = ::Proc.new do
249
249
  set_value('c', 3)
250
- sleep(1)
250
+ sleep(0.2)
251
251
  set_value2('d'){ 4 }
252
252
  end
253
253
  target_ = Target1.new(hash_)
@@ -266,6 +266,143 @@ module Blockenspiel
266
266
  end
267
267
 
268
268
 
269
+ # A full thread test with the same set of nested mixins done into the same
270
+ # object twice in two different threads.
271
+ #
272
+ # * Asserts that the right methods are added and removed at the right time.
273
+ # * Asserts that the methods delegate to the right target object, even when
274
+ # multiple mixins add the same method name, multiple times from different
275
+ # threads.
276
+
277
+ def test_nested_two_threads
278
+ hash_ = {}
279
+ target1_ = Target1.new(hash_)
280
+ target2_ = Target2.new(hash_)
281
+ assert(!self.respond_to?(:set_value))
282
+ assert(!self.respond_to?(:set_value2))
283
+ assert(!self.respond_to?(:set_value2_inmixin))
284
+ t1_ = ::Thread.new do
285
+ ::Blockenspiel.invoke(::Proc.new do
286
+ sleep(0.1)
287
+ set_value('a', 1)
288
+ set_value2('b'){ 2 }
289
+ ::Blockenspiel.invoke(::Proc.new do
290
+ sleep(0.1)
291
+ set_value('c', 3)
292
+ set_value2_inmixin('d'){ 4 }
293
+ end, target2_)
294
+ sleep(0.1)
295
+ set_value('e', 5)
296
+ set_value2('f'){ 6 }
297
+ end, target1_)
298
+ end
299
+ t2_ = ::Thread.new do
300
+ ::Blockenspiel.invoke(::Proc.new do
301
+ sleep(0.1)
302
+ set_value('A', 11)
303
+ set_value2_inmixin('B'){ 12 }
304
+ ::Blockenspiel.invoke(::Proc.new do
305
+ sleep(0.1)
306
+ set_value('C', 13)
307
+ set_value2('D'){ 14 }
308
+ end, target1_)
309
+ sleep(0.1)
310
+ set_value('E', 15)
311
+ set_value2_inmixin('F'){ 16 }
312
+ end, target2_)
313
+ end
314
+ t1_.join
315
+ t2_.join
316
+ assert(!self.respond_to?(:set_value))
317
+ assert(!self.respond_to?(:set_value2))
318
+ assert(!self.respond_to?(:set_value2_inmixin))
319
+ assert_equal(1, hash_['a1'])
320
+ assert_equal(2, hash_['b1'])
321
+ assert_equal(3, hash_['c2'])
322
+ assert_equal(4, hash_['d2'])
323
+ assert_equal(5, hash_['e1'])
324
+ assert_equal(6, hash_['f1'])
325
+ assert_equal(11, hash_['A2'])
326
+ assert_equal(12, hash_['B2'])
327
+ assert_equal(13, hash_['C1'])
328
+ assert_equal(14, hash_['D1'])
329
+ assert_equal(15, hash_['E2'])
330
+ assert_equal(16, hash_['F2'])
331
+ end
332
+
333
+
334
+ # A full fiber test with the same set of nested mixins done into the same
335
+ # object twice in two different fibers.
336
+ #
337
+ # * Asserts that the right methods are added and removed at the right time.
338
+ # * Asserts that the methods delegate to the right target object, even when
339
+ # multiple mixins add the same method name, multiple times from different
340
+ # fibers.
341
+
342
+ def test_nested_two_fibers
343
+ return unless defined?(::Fiber)
344
+ hash_ = {}
345
+ target1_ = Target1.new(hash_)
346
+ target2_ = Target2.new(hash_)
347
+ assert(!self.respond_to?(:set_value))
348
+ assert(!self.respond_to?(:set_value2))
349
+ assert(!self.respond_to?(:set_value2_inmixin))
350
+ f1_ = ::Fiber.new do
351
+ ::Blockenspiel.invoke(::Proc.new do
352
+ ::Fiber.yield
353
+ set_value('a', 1)
354
+ set_value2('b'){ 2 }
355
+ ::Blockenspiel.invoke(::Proc.new do
356
+ ::Fiber.yield
357
+ set_value('c', 3)
358
+ set_value2_inmixin('d'){ 4 }
359
+ end, target2_)
360
+ ::Fiber.yield
361
+ set_value('e', 5)
362
+ set_value2('f'){ 6 }
363
+ end, target1_)
364
+ end
365
+ f2_ = ::Fiber.new do
366
+ ::Blockenspiel.invoke(::Proc.new do
367
+ ::Fiber.yield
368
+ set_value('A', 11)
369
+ set_value2_inmixin('B'){ 12 }
370
+ ::Blockenspiel.invoke(::Proc.new do
371
+ ::Fiber.yield
372
+ set_value('C', 13)
373
+ set_value2('D'){ 14 }
374
+ end, target1_)
375
+ ::Fiber.yield
376
+ set_value('E', 15)
377
+ set_value2_inmixin('F'){ 16 }
378
+ end, target2_)
379
+ end
380
+ f1_.resume
381
+ f2_.resume
382
+ f1_.resume
383
+ f2_.resume
384
+ f1_.resume
385
+ f2_.resume
386
+ f1_.resume
387
+ f2_.resume
388
+ assert(!self.respond_to?(:set_value))
389
+ assert(!self.respond_to?(:set_value2))
390
+ assert(!self.respond_to?(:set_value2_inmixin))
391
+ assert_equal(1, hash_['a1'])
392
+ assert_equal(2, hash_['b1'])
393
+ assert_equal(3, hash_['c2'])
394
+ assert_equal(4, hash_['d2'])
395
+ assert_equal(5, hash_['e1'])
396
+ assert_equal(6, hash_['f1'])
397
+ assert_equal(11, hash_['A2'])
398
+ assert_equal(12, hash_['B2'])
399
+ assert_equal(13, hash_['C1'])
400
+ assert_equal(14, hash_['D1'])
401
+ assert_equal(15, hash_['E2'])
402
+ assert_equal(16, hash_['F2'])
403
+ end
404
+
405
+
269
406
  # Test mixin omissions.
270
407
  #
271
408
  # * Asserts that underscore methods are not mixed in.
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blockenspiel
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 3
9
- - 3
10
- version: 0.3.3
8
+ - 4
9
+ - 0
10
+ version: 0.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Daniel Azuma
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-05-24 00:00:00 -07:00
18
+ date: 2010-06-21 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -34,11 +34,15 @@ files:
34
34
  - ext/blockenspiel/unmixer.c
35
35
  - ext/blockenspiel/extconf.rb
36
36
  - ext/blockenspiel/BlockenspielUnmixerService.java
37
+ - lib/blockenspiel/builder.rb
38
+ - lib/blockenspiel/dsl_setup.rb
39
+ - lib/blockenspiel/errors.rb
37
40
  - lib/blockenspiel/impl.rb
38
41
  - lib/blockenspiel/version.rb
39
42
  - lib/blockenspiel/versionomy.rb
40
43
  - lib/blockenspiel.rb
41
44
  - lib/blockenspiel_unmixer.jar
45
+ - tests/files/file1.rb
42
46
  - tests/tc_basic.rb
43
47
  - tests/tc_behaviors.rb
44
48
  - tests/tc_dsl_attrs.rb
@@ -65,12 +69,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
65
69
  requirements:
66
70
  - - ">="
67
71
  - !ruby/object:Gem::Version
68
- hash: 59
72
+ hash: 57
69
73
  segments:
70
74
  - 1
71
75
  - 8
72
- - 6
73
- version: 1.8.6
76
+ - 7
77
+ version: 1.8.7
74
78
  required_rubygems_version: !ruby/object:Gem::Requirement
75
79
  none: false
76
80
  requirements: