blockenspiel 0.3.3-java → 0.4.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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
  #
data/lib/blockenspiel.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  # Blockenspiel entry point
4
4
  #
5
5
  # -----------------------------------------------------------------------------
6
- # Copyright 2008 Daniel Azuma
6
+ # Copyright 2008-2010 Daniel Azuma
7
7
  #
8
8
  # All rights reserved.
9
9
  #
@@ -34,10 +34,28 @@
34
34
  ;
35
35
 
36
36
 
37
+ # == Blockenspiel
38
+ #
39
+ # The Blockenspiel module provides a namespace for Blockenspiel, as well as
40
+ # the main entry point method "invoke".
41
+
42
+ module Blockenspiel
43
+ end
44
+
45
+
46
+ includes_ = [
47
+ 'errors',
48
+ 'dsl_setup',
49
+ 'builder',
50
+ 'impl',
51
+ 'version',
52
+ ]
53
+
54
+
55
+ dir_ = ::File.expand_path('blockenspiel', ::File.dirname(__FILE__))
37
56
  if ::RUBY_PLATFORM =~ /java/
38
57
  require "blockenspiel_unmixer"
39
58
  else
40
- require "#{File.dirname(__FILE__)}/blockenspiel/unmixer"
59
+ includes_.unshift('unmixer')
41
60
  end
42
- require "#{File.dirname(__FILE__)}/blockenspiel/impl"
43
- require "#{File.dirname(__FILE__)}/blockenspiel/version"
61
+ includes_.each{ |file_| require "#{dir_}/#{file_}" }
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,20 +1,21 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blockenspiel
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 15
4
5
  prerelease: false
5
6
  segments:
6
- - 0
7
- - 3
8
- - 3
9
- version: 0.3.3
7
+ - 0
8
+ - 4
9
+ - 0
10
+ version: 0.4.0
10
11
  platform: java
11
12
  authors:
12
- - Daniel Azuma
13
+ - Daniel Azuma
13
14
  autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-05-24 00:00:00 -07:00
18
+ date: 2010-06-21 00:00:00 -07:00
18
19
  default_executable:
19
20
  dependencies: []
20
21
 
@@ -25,31 +26,35 @@ executables: []
25
26
  extensions: []
26
27
 
27
28
  extra_rdoc_files:
28
- - README.rdoc
29
- - Blockenspiel.rdoc
30
- - History.rdoc
31
- - ImplementingDSLblocks.rdoc
29
+ - README.rdoc
30
+ - Blockenspiel.rdoc
31
+ - History.rdoc
32
+ - ImplementingDSLblocks.rdoc
32
33
  files:
33
- - ext/blockenspiel/unmixer.c
34
- - ext/blockenspiel/extconf.rb
35
- - ext/blockenspiel/BlockenspielUnmixerService.java
36
- - lib/blockenspiel.rb
37
- - lib/blockenspiel/impl.rb
38
- - lib/blockenspiel/version.rb
39
- - lib/blockenspiel/versionomy.rb
40
- - tests/tc_basic.rb
41
- - tests/tc_behaviors.rb
42
- - tests/tc_dsl_attrs.rb
43
- - tests/tc_dsl_methods.rb
44
- - tests/tc_dynamic.rb
45
- - tests/tc_mixins.rb
46
- - tests/tc_modules.rb
47
- - Blockenspiel.rdoc
48
- - History.rdoc
49
- - ImplementingDSLblocks.rdoc
50
- - README.rdoc
51
- - Rakefile
52
- - lib/blockenspiel_unmixer.jar
34
+ - ext/blockenspiel/unmixer.c
35
+ - ext/blockenspiel/extconf.rb
36
+ - ext/blockenspiel/BlockenspielUnmixerService.java
37
+ - lib/blockenspiel/builder.rb
38
+ - lib/blockenspiel/dsl_setup.rb
39
+ - lib/blockenspiel/errors.rb
40
+ - lib/blockenspiel/impl.rb
41
+ - lib/blockenspiel/version.rb
42
+ - lib/blockenspiel/versionomy.rb
43
+ - lib/blockenspiel.rb
44
+ - lib/blockenspiel_unmixer.jar
45
+ - tests/files/file1.rb
46
+ - tests/tc_basic.rb
47
+ - tests/tc_behaviors.rb
48
+ - tests/tc_dsl_attrs.rb
49
+ - tests/tc_dsl_methods.rb
50
+ - tests/tc_dynamic.rb
51
+ - tests/tc_mixins.rb
52
+ - tests/tc_modules.rb
53
+ - Blockenspiel.rdoc
54
+ - History.rdoc
55
+ - ImplementingDSLblocks.rdoc
56
+ - README.rdoc
57
+ - Rakefile
53
58
  has_rdoc: true
54
59
  homepage: http://virtuoso.rubyforge.org/blockenspiel
55
60
  licenses: []
@@ -58,35 +63,39 @@ post_install_message:
58
63
  rdoc_options: []
59
64
 
60
65
  require_paths:
61
- - lib
66
+ - lib
62
67
  required_ruby_version: !ruby/object:Gem::Requirement
68
+ none: false
63
69
  requirements:
64
- - - ">="
65
- - !ruby/object:Gem::Version
66
- segments:
67
- - 1
68
- - 8
69
- - 6
70
- version: 1.8.6
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ hash: 57
73
+ segments:
74
+ - 1
75
+ - 8
76
+ - 7
77
+ version: 1.8.7
71
78
  required_rubygems_version: !ruby/object:Gem::Requirement
79
+ none: false
72
80
  requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- segments:
76
- - 0
77
- version: "0"
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ hash: 3
84
+ segments:
85
+ - 0
86
+ version: "0"
78
87
  requirements: []
79
88
 
80
89
  rubyforge_project: virtuoso
81
- rubygems_version: 1.3.6
90
+ rubygems_version: 1.3.7
82
91
  signing_key:
83
92
  specification_version: 3
84
93
  summary: Blockenspiel is a helper library designed to make it easy to implement DSL blocks.
85
94
  test_files:
86
- - tests/tc_basic.rb
87
- - tests/tc_behaviors.rb
88
- - tests/tc_dsl_attrs.rb
89
- - tests/tc_dsl_methods.rb
90
- - tests/tc_dynamic.rb
91
- - tests/tc_mixins.rb
92
- - tests/tc_modules.rb
95
+ - tests/tc_basic.rb
96
+ - tests/tc_behaviors.rb
97
+ - tests/tc_dsl_attrs.rb
98
+ - tests/tc_dsl_methods.rb
99
+ - tests/tc_dynamic.rb
100
+ - tests/tc_mixins.rb
101
+ - tests/tc_modules.rb