rbplusplus 0.9.1 → 1.0

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.
Files changed (53) hide show
  1. data/Rakefile +4 -9
  2. data/lib/rbplusplus/builders/allocation_strategy.rb +0 -7
  3. data/lib/rbplusplus/builders/base.rb +11 -5
  4. data/lib/rbplusplus/builders/class.rb +5 -14
  5. data/lib/rbplusplus/builders/const.rb +1 -1
  6. data/lib/rbplusplus/builders/constructor.rb +1 -1
  7. data/lib/rbplusplus/builders/director.rb +13 -13
  8. data/lib/rbplusplus/builders/enumeration.rb +2 -2
  9. data/lib/rbplusplus/builders/helpers/class.rb +17 -2
  10. data/lib/rbplusplus/builders/helpers/implicit_caster.rb +0 -0
  11. data/lib/rbplusplus/builders/implicit_caster.rb +24 -0
  12. data/lib/rbplusplus/builders/instance_variable.rb +4 -4
  13. data/lib/rbplusplus/builders/method_base.rb +8 -7
  14. data/lib/rbplusplus/builders/module.rb +1 -1
  15. data/lib/rbplusplus/logger.rb +13 -4
  16. data/lib/rbplusplus/transformers/class.rb +43 -34
  17. data/lib/rbplusplus/transformers/constructor.rb +30 -0
  18. data/lib/rbplusplus/transformers/function.rb +3 -3
  19. data/lib/rbplusplus/transformers/method.rb +2 -2
  20. data/lib/rbplusplus/transformers/node.rb +10 -17
  21. data/lib/rbplusplus/writers/multiple_files_writer.rb +8 -6
  22. data/lib/rbplusplus.rb +2 -1
  23. data/test/allocation_strategies_test.rb +21 -14
  24. data/test/class_methods_encapsulate_test.rb +25 -25
  25. data/test/class_methods_test.rb +7 -12
  26. data/test/classes_test.rb +36 -40
  27. data/test/compiling_test.rb +23 -19
  28. data/test/constructors_test.rb +5 -5
  29. data/test/custom_code_test.rb +25 -32
  30. data/test/default_arguments_test.rb +38 -42
  31. data/test/director_test.rb +51 -53
  32. data/test/enumerations_test.rb +37 -41
  33. data/test/extension_test.rb +10 -10
  34. data/test/file_writers_test.rb +17 -21
  35. data/test/function_pointer_test.rb +9 -13
  36. data/test/function_pointers_classes_test.rb +7 -11
  37. data/test/functions_test.rb +4 -10
  38. data/test/generated/extconf.rb +2 -2
  39. data/test/headers/alloc_strats.h +3 -1
  40. data/test/headers/implicit_cast.h +107 -0
  41. data/test/headers/to_from_ruby.h +13 -6
  42. data/test/headers/to_from_ruby_source.cpp +2 -2
  43. data/test/implicit_cast_test.rb +67 -0
  44. data/test/modules_test.rb +39 -40
  45. data/test/nested_test.rb +14 -16
  46. data/test/overloading_test.rb +17 -20
  47. data/test/struct_test.rb +4 -6
  48. data/test/subclass_test.rb +10 -12
  49. data/test/test_helper.rb +21 -12
  50. data/test/to_from_ruby_test.rb +7 -1
  51. data/test/wrap_as_test.rb +32 -29
  52. metadata +170 -108
  53. data/lib/rbplusplus/transformers/node_cache.rb +0 -15
@@ -1,54 +1,50 @@
1
1
  require 'test_helper'
2
2
 
3
- context "Default arguments properly exposed" do
4
-
5
- def setup
6
- if !defined?(@@defargs_built)
7
- super
8
- @@defargs_built = true
9
- Extension.new "defargs" do |e|
10
- e.sources full_dir("headers/default_arguments.h")
11
- e.writer_mode :single
12
- node = e.namespace "default_args"
13
-
14
- e.module "Inner" do |m|
15
- m.includes node.functions("module_do")
16
- end
17
-
18
- node.classes("Directed").director
3
+ describe "Default arguments properly exposed" do
4
+
5
+ before(:all) do
6
+ Extension.new "defargs" do |e|
7
+ e.sources full_dir("headers/default_arguments.h")
8
+ e.writer_mode :single
9
+ node = e.namespace "default_args"
10
+
11
+ e.module "Inner" do |m|
12
+ m.includes node.functions("module_do")
19
13
  end
20
14
 
21
- require 'defargs'
15
+ node.classes("Directed").director
22
16
  end
17
+
18
+ require 'defargs'
23
19
  end
24
20
 
25
21
  specify "global functions" do
26
- global_do(1, 4, 5).should.equal 20
27
- global_do(1, 4).should.equal 40
28
- global_do(1).should.equal 30
22
+ global_do(1, 4, 5).should == 20
23
+ global_do(1, 4).should == 40
24
+ global_do(1).should == 30
29
25
  end
30
26
 
31
27
  specify "module functions" do
32
- Inner.module_do(5).should.equal 18
33
- Inner.module_do(5, 5).should.equal 20
34
- Inner.module_do(5, 5, 5).should.equal 15
28
+ Inner.module_do(5).should == 18
29
+ Inner.module_do(5, 5).should == 20
30
+ Inner.module_do(5, 5, 5).should == 15
35
31
  end
36
32
 
37
33
  specify "class instance methods" do
38
34
  tester = Tester.new
39
- tester.concat("this", "that").should.equal "this-that"
40
- tester.concat("this", "that", ";").should.equal "this;that"
35
+ tester.concat("this", "that").should == "this-that"
36
+ tester.concat("this", "that", ";").should == "this;that"
41
37
  end
42
38
 
43
39
  specify "class static methods" do
44
- Tester.build("base").should.equal "basebasebase"
45
- Tester.build("woot", 5).should.equal "wootwootwootwootwoot"
40
+ Tester.build("base").should == "basebasebase"
41
+ Tester.build("woot", 5).should == "wootwootwootwootwoot"
46
42
  end
47
43
 
48
44
  specify "director methods" do
49
45
  d = Directed.new
50
- d.virtual_do(3).should.equal 30
51
- d.virtual_do(3, 9).should.equal 27
46
+ d.virtual_do(3).should == 30
47
+ d.virtual_do(3, 9).should == 27
52
48
 
53
49
  class MyD < Directed
54
50
  def virtual_do(x, y = 10)
@@ -57,31 +53,31 @@ context "Default arguments properly exposed" do
57
53
  end
58
54
 
59
55
  myd = MyD.new
60
- myd.virtual_do(10).should.equal 300
56
+ myd.virtual_do(10).should == 300
61
57
  end
62
58
 
63
59
  specify "throw argument error on bad types" do
64
- should.raise TypeError do
60
+ lambda do
65
61
  global_do(1, "three")
66
- end
62
+ end.should raise_error(TypeError)
67
63
  end
68
64
 
69
65
  # See MethodBase#fix_enumeration_value
70
66
  specify "properly handle incomplete enums in default values" do
71
- modify(1).should.equal 11
72
- modify(1, Ops::ADD).should.equal 11
73
- modify(1, Ops::REMOVE).should.equal -9
67
+ modify(1).should == 11
68
+ modify(1, Ops::ADD).should == 11
69
+ modify(1, Ops::REMOVE).should == -9
74
70
  end
75
71
 
76
72
  # Ogre does this to handle some weird pass-back-enum-that-signals-error (Ogre::Frustum::isVisible)
77
73
  specify "properly handle incomplete enums arguments with straight integer default values" do
78
- modify2(1).should.equal 1
79
- modify2(1, Ops::ADD).should.equal 1
80
- modify2(1, Ops::REMOVE).should.equal 1
74
+ modify2(1).should == 1
75
+ modify2(1, Ops::ADD).should == 1
76
+ modify2(1, Ops::REMOVE).should == 1
81
77
  end
82
78
 
83
- xspecify "should properly handle argument type qualifiers like refs and consts" do
84
- build_strings("I'd ").should.equal "I'd kick-it"
85
- build_strings("You won't", " do it").should.equal "You won't do it"
86
- end
79
+ specify "should properly handle argument type qualifiers like refs and consts" # do
80
+ # build_strings("I'd ").should == "I'd kick-it"
81
+ # build_strings("You won't", " do it").should == "You won't do it"
82
+ # end
87
83
  end
@@ -2,32 +2,28 @@ require 'test_helper'
2
2
 
3
3
  context "Director proxy generation" do
4
4
 
5
- def setup
6
- if !defined?(@@director_built)
7
- super
8
- @@director_built = true
9
- Extension.new "director" do |e|
10
- e.sources full_dir("headers/director.h")
11
-
12
- node = e.namespace "director"
13
-
14
- # As director is pretty complicated to get right
15
- # automatically for now, we force-specify which
16
- # classes to have directors set on.
17
- %w(Worker MultiplyWorker BadNameClass VirtualWithArgs NoConstructor VBase VOne VTwo).each do |k|
18
- node.classes(k).director
19
- end
20
-
21
- node.classes("Worker").methods("doProcessImpl").default_return_value(0)
22
-
23
- klass = node.classes("BadNameClass")
24
- klass.wrap_as("BetterNamedClass")
25
- klass.methods("_is_x_ok_to_run").wrap_as("x_ok?")
26
- klass.methods("__do_someProcessing").wrap_as("do_processing")
5
+ before(:all) do
6
+ Extension.new "director" do |e|
7
+ e.sources full_dir("headers/director.h")
8
+
9
+ node = e.namespace "director"
10
+
11
+ # As director is pretty complicated to get right
12
+ # automatically for now, we force-specify which
13
+ # classes to have directors set on.
14
+ %w(Worker MultiplyWorker BadNameClass VirtualWithArgs NoConstructor VBase VOne VTwo).each do |k|
15
+ node.classes(k).director
27
16
  end
28
17
 
29
- require 'director'
18
+ node.classes("Worker").methods("doProcessImpl").default_return_value(0)
19
+
20
+ klass = node.classes("BadNameClass")
21
+ klass.wrap_as("BetterNamedClass")
22
+ klass.methods("_is_x_ok_to_run").wrap_as("x_ok?")
23
+ klass.methods("__do_someProcessing").wrap_as("do_processing")
30
24
  end
25
+
26
+ require 'director'
31
27
  end
32
28
 
33
29
  specify "polymorphic calls extend into Ruby" do
@@ -40,7 +36,7 @@ context "Director proxy generation" do
40
36
  h = Handler.new
41
37
  h.add_worker(MyWorker.new)
42
38
 
43
- h.process_workers(5).should.equal 15
39
+ h.process_workers(5).should == 15
44
40
  end
45
41
 
46
42
  specify "super calls on pure virtual raise exception" do
@@ -50,9 +46,9 @@ context "Director proxy generation" do
50
46
  end
51
47
  end
52
48
 
53
- should.raise NotImplementedError do
49
+ lambda do
54
50
  SuperBadWorker.new.process(10)
55
- end
51
+ end.should raise_error(NotImplementedError)
56
52
  end
57
53
 
58
54
  specify "allows super calls to continue back into C++ classes" do
@@ -62,9 +58,9 @@ context "Director proxy generation" do
62
58
  end
63
59
  end
64
60
 
65
- should.not.raise NotImplementedError do
66
- SuperGoodWorker.new.do_something(10).should.equal 50
67
- end
61
+ lambda do
62
+ SuperGoodWorker.new.do_something(10).should == 50
63
+ end.should_not raise_error(NotImplementedError)
68
64
  end
69
65
 
70
66
  specify "can specify a default return value in the wrapper" do
@@ -79,25 +75,25 @@ context "Director proxy generation" do
79
75
  end
80
76
 
81
77
  w = MyAwesomeWorker.new
82
- w.do_process(3).should.equal 10
78
+ w.do_process(3).should == 10
83
79
 
84
80
  h = Handler.new
85
81
  h.add_worker(w)
86
82
 
87
- h.process_workers(10).should.equal 18
83
+ h.process_workers(10).should == 18
88
84
  end
89
85
 
90
86
  specify "properly adds all constructor arguments" do
91
87
  v = VirtualWithArgs.new 14, true
92
- v.process_a("hi").should.equal 16
93
- v.process_b.should.be true
88
+ v.process_a("hi").should == 16
89
+ v.process_b.should be_true
94
90
  end
95
91
 
96
92
  specify "takes into account renamed methods / classes" do
97
93
  c = BetterNamedClass.new
98
- assert !c.x_ok?
94
+ c.x_ok?.should_not be_true
99
95
 
100
- c.do_processing.should.equal 14
96
+ c.do_processing.should == 14
101
97
  end
102
98
 
103
99
  specify "handles no constructors" do
@@ -105,7 +101,7 @@ context "Director proxy generation" do
105
101
  end
106
102
 
107
103
  n = MyThing.new
108
- n.do_something.should.equal 4
104
+ n.do_something.should == 4
109
105
  end
110
106
 
111
107
  specify "only builds method wrappers for virtual methods" do
@@ -117,13 +113,13 @@ context "Director proxy generation" do
117
113
 
118
114
  # Super calls still work
119
115
  w = NumberWorker.new
120
- w.get_number.should.equal 27
116
+ w.get_number.should == 27
121
117
 
122
118
  # But polymorphism stops in the C++
123
119
  h = Handler.new
124
120
  h.add_worker(w)
125
121
 
126
- h.add_worker_numbers.should.equal 12
122
+ h.add_worker_numbers.should == 12
127
123
  end
128
124
 
129
125
  specify "Directors implement all pure virtual methods up the inheritance tree" do
@@ -131,21 +127,22 @@ context "Director proxy generation" do
131
127
  v1 = VOne.new
132
128
  v2 = VTwo.new
133
129
 
134
- v1.method_one.should.equal "methodOne"
130
+ v1.method_one.should == "methodOne"
135
131
 
136
- should.raise NotImplementedError do
132
+ lambda do
137
133
  v1.method_two
138
- end
139
- should.raise NotImplementedError do
134
+ end.should raise_error(NotImplementedError)
135
+
136
+ lambda do
140
137
  v1.method_three
141
- end
138
+ end.should raise_error(NotImplementedError)
142
139
 
143
- v2.method_one.should.equal "methodOne"
144
- v2.method_two.should.equal "methodTwo"
140
+ v2.method_one.should == "methodOne"
141
+ v2.method_two.should == "methodTwo"
145
142
 
146
- should.raise NotImplementedError do
143
+ lambda do
147
144
  v2.method_three
148
- end
145
+ end.should raise_error(NotImplementedError)
149
146
  end
150
147
 
151
148
  specify "handles superclasses of the class with virtual methods" do
@@ -158,21 +155,22 @@ context "Director proxy generation" do
158
155
  h = Handler.new
159
156
 
160
157
  h.add_worker(MultiplyWorker.new)
161
- h.process_workers(5).should.equal 10
158
+ h.process_workers(5).should == 10
162
159
 
163
160
  h.add_worker(QuadWorker.new)
164
- h.process_workers(5).should.equal 40
161
+ h.process_workers(5).should == 40
165
162
  end
166
163
 
167
164
  specify "multiple files writer properly handles directors and nested nodes" do
168
- assert defined?(Worker::ZeeEnum)
169
- assert defined?(Worker::ZeeEnum::VALUE)
170
- Worker::ZeeEnum::VALUE.to_i.should.equal 4
165
+ lambda { Worker::ZeeEnum }.should_not raise_error(NameError)
166
+ lambda { Worker::ZeeEnum::VALUE }.should_not raise_error(NameError)
167
+
168
+ Worker::ZeeEnum::VALUE.to_i.should == 4
171
169
  end
172
170
 
173
171
  specify "inheritance types are registered properly" do
174
172
  two = VTwo.new
175
- VBase::process(two).should.equal "methodTwo"
173
+ VBase::process(two).should == "methodTwo"
176
174
  end
177
175
 
178
176
  end
@@ -1,27 +1,23 @@
1
1
  require 'test_helper'
2
2
 
3
- context "Wrapping enumerations" do
4
-
5
- def setup
6
- if !defined?(@@enums_built)
7
- super
8
- @@enums_built = true
9
- Extension.new "enums" do |e|
10
- e.sources full_dir("headers/enums.h")
11
- e.namespace "enums"
12
- e.writer_mode :single
13
-
14
- e.module "Mod" do |m|
15
- m.namespace "inner"
16
- end
17
- end
3
+ describe "Wrapping enumerations" do
4
+
5
+ before(:all) do
6
+ Extension.new "enums" do |e|
7
+ e.sources full_dir("headers/enums.h")
8
+ e.namespace "enums"
9
+ e.writer_mode :single
18
10
 
19
- require 'enums'
11
+ e.module "Mod" do |m|
12
+ m.namespace "inner"
13
+ end
20
14
  end
15
+
16
+ require 'enums'
21
17
  end
22
18
 
23
19
  specify "should wrap up enums properly" do
24
- assert defined?(TestEnum)
20
+ lambda { TestEnum }.should_not raise_error(NameError)
25
21
 
26
22
  TestEnum::VALUE1.to_i.should == 0
27
23
  TestEnum::VALUE2.to_i.should == 1
@@ -29,12 +25,12 @@ context "Wrapping enumerations" do
29
25
  end
30
26
 
31
27
  specify "should only wrap public enums" do
32
- assert !defined?(Tester::NotWrapped)
33
- assert !defined?(Tester::AlsoNotWrapped)
28
+ lambda { Tester::NotWrapped }.should raise_error(NameError)
29
+ lambda { Tester::AlsoNotWrapped }.should raise_error(NameError)
34
30
  end
35
31
 
36
32
  specify "should wrap up enumerations at proper nesting" do
37
- assert defined?(Tester::MyEnum)
33
+ lambda { Tester::TestEnum }.should_not raise_error(NameError)
38
34
 
39
35
  Tester::MyEnum::I_LIKE_MONEY.to_i.should == 3
40
36
  Tester::MyEnum::YOU_LIKE_MONEY_TOO.to_i.should == 4
@@ -42,7 +38,7 @@ context "Wrapping enumerations" do
42
38
  end
43
39
 
44
40
  specify "should work in user-defined modules" do
45
- assert defined?(Mod::InnerEnum)
41
+ lambda { Mod::InnerEnum }.should_not raise_error(NameError)
46
42
 
47
43
  Mod::InnerEnum::INNER_1.to_i.should == 0
48
44
  Mod::InnerEnum::INNER_2.to_i.should == 1
@@ -52,9 +48,9 @@ context "Wrapping enumerations" do
52
48
  what_test_enum(TestEnum::VALUE1).should == "We gots enum 0";
53
49
 
54
50
  # Types should be adhered to
55
- should.raise RuntimeError do
51
+ lambda do
56
52
  what_test_enum(Mod::InnerEnum::INNER_1)
57
- end
53
+ end.should raise_error(RuntimeError)
58
54
 
59
55
  t = Tester.new
60
56
  t.get_enum_description(Tester::MyEnum::YOU_LIKE_MONEY_TOO).should == "You like money!"
@@ -67,26 +63,26 @@ context "Wrapping enumerations" do
67
63
  end
68
64
 
69
65
  specify "anonymous enumerations' values are added as constants to the parent class" do
70
- assert defined?(Tester::ANON_ENUM_VAL1)
71
- assert defined?(Tester::ANON_ENUM_VAL2)
72
- assert defined?(Tester::ANON_ENUM_VAL3)
73
- assert defined?(Tester::ANON_ENUM_VAL4)
74
-
75
- Tester::ANON_ENUM_VAL1.should.equal 1
76
- Tester::ANON_ENUM_VAL2.should.equal 2
77
- Tester::ANON_ENUM_VAL3.should.equal 5
78
- Tester::ANON_ENUM_VAL4.should.equal 3
66
+ lambda { Tester::ANON_ENUM_VAL1 }.should_not raise_error(NameError)
67
+ lambda { Tester::ANON_ENUM_VAL2 }.should_not raise_error(NameError)
68
+ lambda { Tester::ANON_ENUM_VAL3 }.should_not raise_error(NameError)
69
+ lambda { Tester::ANON_ENUM_VAL4 }.should_not raise_error(NameError)
70
+
71
+ Tester::ANON_ENUM_VAL1.should == 1
72
+ Tester::ANON_ENUM_VAL2.should == 2
73
+ Tester::ANON_ENUM_VAL3.should == 5
74
+ Tester::ANON_ENUM_VAL4.should == 3
79
75
  end
80
76
 
81
77
  specify "top-level anonymous enumerations' values are added to the global scope" do
82
- assert defined?(OUTER_ANON_1)
83
- assert defined?(OUTER_ANON_2)
84
- assert defined?(FOURTY_TWO)
85
- assert defined?(SEPERATE_OUTER_VALUE)
86
-
87
- OUTER_ANON_1.should.equal 0
88
- OUTER_ANON_2.should.equal 1
89
- FOURTY_TWO.should.equal 42
90
- SEPERATE_OUTER_VALUE.should.equal 14
78
+ lambda { OUTER_ANON_1 }.should_not raise_error(NameError)
79
+ lambda { OUTER_ANON_2 }.should_not raise_error(NameError)
80
+ lambda { FOURTY_TWO }.should_not raise_error(NameError)
81
+ lambda { SEPERATE_OUTER_VALUE }.should_not raise_error(NameError)
82
+
83
+ OUTER_ANON_1.should == 0
84
+ OUTER_ANON_2.should == 1
85
+ FOURTY_TWO.should == 42
86
+ SEPERATE_OUTER_VALUE.should == 14
91
87
  end
92
88
  end
@@ -1,6 +1,6 @@
1
1
  require 'test_helper'
2
2
 
3
- context "Ruby Extension creation" do
3
+ describe "Ruby Extension creation" do
4
4
 
5
5
  specify "should create a valid Ruby extension" do
6
6
  Extension.new "ext_test" do |e|
@@ -8,9 +8,9 @@ context "Ruby Extension creation" do
8
8
  e.writer_mode :single
9
9
  end
10
10
 
11
- should.not.raise LoadError do
12
- require("ext_test")
13
- end
11
+ lambda do
12
+ require "ext_test"
13
+ end.should_not raise_error(LoadError)
14
14
  end
15
15
 
16
16
  specify "should create a valid Ruby extension without a block" do
@@ -22,13 +22,13 @@ context "Ruby Extension creation" do
22
22
  e.write
23
23
  e.compile
24
24
 
25
- should.not.raise LoadError do
26
- require("ext_test")
27
- end
25
+ lambda do
26
+ require "ext_test"
27
+ end.should_not raise_error(LoadError)
28
28
  end
29
29
 
30
30
  specify "should properly build working dir as deep as needed" do
31
- should.not.raise Errno::ENOENT do
31
+ lambda do
32
32
  path = File.join(File.expand_path(File.dirname(__FILE__)), "generated", "path1", "path2")
33
33
  Extension.new "extension" do |e|
34
34
  e.sources full_dir("headers/empty.h")
@@ -36,8 +36,8 @@ context "Ruby Extension creation" do
36
36
  e.writer_mode :single
37
37
  end
38
38
 
39
- assert File.exists?(File.join(path, "extconf.rb"))
40
- end
39
+ File.exists?(File.join(path, "extconf.rb")).should be_true
40
+ end.should_not raise_error(Errno::ENOENT)
41
41
  end
42
42
  end
43
43
 
@@ -1,8 +1,8 @@
1
1
  require 'test_helper'
2
2
 
3
- context "Multiple file writer (default)" do
3
+ describe "Multiple file writer (default)" do
4
4
 
5
- setup do
5
+ before(:each) do
6
6
  @working_dir = File.expand_path(File.dirname(__FILE__) + "/generated")
7
7
 
8
8
  e = Extension.new "adder"
@@ -20,7 +20,7 @@ context "Multiple file writer (default)" do
20
20
 
21
21
  specify "should properly split up code into multiple files" do
22
22
  files = Dir["#{@working_dir}/*"]
23
- files.size.should == 12
23
+ files.size.should == 10
24
24
 
25
25
  %w(
26
26
  extconf.rb
@@ -32,28 +32,24 @@ context "Multiple file writer (default)" do
32
32
  _classes_IntAdder.rb.hpp
33
33
  _classes_ShouldFindMe.rb.hpp
34
34
  _classes_ShouldFindMe.rb.cpp
35
- _rbpp_custom.rb.hpp
36
- _rbpp_custom.rb.cpp
37
35
  adder.rb.cpp
38
36
  ).each do |wants|
39
- assert_not_nil files.find {|got| File.basename(got) == wants }, "Didn't find #{wants}"
37
+ files.find {|got| File.basename(got) == wants }.should_not be_nil
40
38
  end
41
39
  end
42
40
 
43
41
  end
44
42
 
45
- context "Multiple file writer with to_from_ruby" do
43
+ describe "Multiple file writer works with global _rbpp_custom" do
46
44
 
47
- setup do
45
+ before(:each) do
48
46
  @working_dir = File.expand_path(File.dirname(__FILE__) + "/generated")
49
47
 
50
- e = Extension.new "to_from_ruby"
48
+ e = Extension.new "enums"
51
49
  e.working_dir = @working_dir
52
- e.sources full_dir("headers/to_from_ruby.h"),
53
- :include_paths => full_dir("headers"),
54
- :include_source_files => full_dir("headers/to_from_ruby_source.cpp")
50
+ e.sources full_dir("headers/enums.h")
55
51
 
56
- e.namespace "to_from_ruby"
52
+ e.namespace "enums"
57
53
 
58
54
  e.build
59
55
  e.write
@@ -67,15 +63,15 @@ context "Multiple file writer with to_from_ruby" do
67
63
  _rbpp_custom.rb.hpp
68
64
  _rbpp_custom.rb.cpp
69
65
  ).each do |wants|
70
- assert_not_nil files.find {|got| File.basename(got) == wants }, "Didn't find #{wants}"
66
+ files.find {|got| File.basename(got) == wants }.should_not be_nil
71
67
  end
72
68
  end
73
69
 
74
70
  end
75
71
 
76
- context "Single file writer" do
72
+ describe "Single file writer" do
77
73
 
78
- setup do
74
+ before(:each) do
79
75
  @working_dir = File.expand_path(File.dirname(__FILE__) + "/generated")
80
76
 
81
77
  e = Extension.new "adder"
@@ -99,15 +95,15 @@ context "Single file writer" do
99
95
  extconf.rb
100
96
  adder.rb.cpp
101
97
  ).each do |wants|
102
- assert_not_nil files.find {|got| File.basename(got) == wants }, "Didn't find #{wants}"
98
+ files.find {|got| File.basename(got) == wants }.should_not be_nil
103
99
  end
104
100
  end
105
101
 
106
102
  end
107
103
 
108
- context "Single file writer with to_from_ruby" do
104
+ describe "Single file writer with to_from_ruby" do
109
105
 
110
- setup do
106
+ before(:each) do
111
107
  Extension.new "to_from_ruby" do |e|
112
108
  e.sources full_dir("headers/to_from_ruby.h"),
113
109
  :include_paths => full_dir("headers"),
@@ -120,8 +116,8 @@ context "Single file writer with to_from_ruby" do
120
116
  end
121
117
 
122
118
  specify "should have compiled properly" do
123
- should.not.raise LoadError do
119
+ lambda do
124
120
  require 'to_from_ruby'
125
- end
121
+ end.should_not raise_error(LoadError)
126
122
  end
127
123
  end
@@ -1,18 +1,14 @@
1
1
  require 'test_helper'
2
2
 
3
- context "properly handles and wraps function pointer arguments" do
4
-
5
- def setup
6
- if !defined?(@@function_pointers)
7
- super
8
- @@function_pointers = true
9
- Extension.new "function_pointers" do |e|
10
- e.sources full_dir("headers/function_pointers.h")
11
- node = e.namespace "function_pointers"
12
- end
13
-
14
- require 'function_pointers'
3
+ describe "properly handles and wraps function pointer arguments" do
4
+
5
+ before(:all) do
6
+ Extension.new "function_pointers" do |e|
7
+ e.sources full_dir("headers/function_pointers.h")
8
+ node = e.namespace "function_pointers"
15
9
  end
10
+
11
+ require 'function_pointers'
16
12
  end
17
13
 
18
14
  specify "no arguments, no return" do
@@ -24,7 +20,7 @@ context "properly handles and wraps function pointer arguments" do
24
20
 
25
21
  call_callback
26
22
 
27
- assert proc_called
23
+ proc_called.should be_true
28
24
  end
29
25
 
30
26
  specify "arguments, no return" do
@@ -1,18 +1,14 @@
1
1
  require 'test_helper'
2
2
 
3
- context "Function pointers into class methods" do
3
+ describe "Function pointers into class methods" do
4
4
 
5
- def setup
6
- if !defined?(@@function_pointers_class)
7
- super
8
- @@function_pointers_class = true
9
- Extension.new "function_pointers_class" do |e|
10
- e.sources full_dir("headers/function_pointers_class.h")
11
- node = e.namespace "function_pointers_class"
12
- end
13
-
14
- require 'function_pointers_class'
5
+ before(:all) do
6
+ Extension.new "function_pointers_class" do |e|
7
+ e.sources full_dir("headers/function_pointers_class.h")
8
+ node = e.namespace "function_pointers_class"
15
9
  end
10
+
11
+ require 'function_pointers_class'
16
12
  end
17
13
 
18
14