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.
- data/Rakefile +4 -9
- data/lib/rbplusplus/builders/allocation_strategy.rb +0 -7
- data/lib/rbplusplus/builders/base.rb +11 -5
- data/lib/rbplusplus/builders/class.rb +5 -14
- data/lib/rbplusplus/builders/const.rb +1 -1
- data/lib/rbplusplus/builders/constructor.rb +1 -1
- data/lib/rbplusplus/builders/director.rb +13 -13
- data/lib/rbplusplus/builders/enumeration.rb +2 -2
- data/lib/rbplusplus/builders/helpers/class.rb +17 -2
- data/lib/rbplusplus/builders/helpers/implicit_caster.rb +0 -0
- data/lib/rbplusplus/builders/implicit_caster.rb +24 -0
- data/lib/rbplusplus/builders/instance_variable.rb +4 -4
- data/lib/rbplusplus/builders/method_base.rb +8 -7
- data/lib/rbplusplus/builders/module.rb +1 -1
- data/lib/rbplusplus/logger.rb +13 -4
- data/lib/rbplusplus/transformers/class.rb +43 -34
- data/lib/rbplusplus/transformers/constructor.rb +30 -0
- data/lib/rbplusplus/transformers/function.rb +3 -3
- data/lib/rbplusplus/transformers/method.rb +2 -2
- data/lib/rbplusplus/transformers/node.rb +10 -17
- data/lib/rbplusplus/writers/multiple_files_writer.rb +8 -6
- data/lib/rbplusplus.rb +2 -1
- data/test/allocation_strategies_test.rb +21 -14
- data/test/class_methods_encapsulate_test.rb +25 -25
- data/test/class_methods_test.rb +7 -12
- data/test/classes_test.rb +36 -40
- data/test/compiling_test.rb +23 -19
- data/test/constructors_test.rb +5 -5
- data/test/custom_code_test.rb +25 -32
- data/test/default_arguments_test.rb +38 -42
- data/test/director_test.rb +51 -53
- data/test/enumerations_test.rb +37 -41
- data/test/extension_test.rb +10 -10
- data/test/file_writers_test.rb +17 -21
- data/test/function_pointer_test.rb +9 -13
- data/test/function_pointers_classes_test.rb +7 -11
- data/test/functions_test.rb +4 -10
- data/test/generated/extconf.rb +2 -2
- data/test/headers/alloc_strats.h +3 -1
- data/test/headers/implicit_cast.h +107 -0
- data/test/headers/to_from_ruby.h +13 -6
- data/test/headers/to_from_ruby_source.cpp +2 -2
- data/test/implicit_cast_test.rb +67 -0
- data/test/modules_test.rb +39 -40
- data/test/nested_test.rb +14 -16
- data/test/overloading_test.rb +17 -20
- data/test/struct_test.rb +4 -6
- data/test/subclass_test.rb +10 -12
- data/test/test_helper.rb +21 -12
- data/test/to_from_ruby_test.rb +7 -1
- data/test/wrap_as_test.rb +32 -29
- metadata +170 -108
- data/lib/rbplusplus/transformers/node_cache.rb +0 -15
data/test/functions_test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
|
3
|
+
describe "Extension with globally available functions" do
|
4
4
|
|
5
5
|
specify "should make functions available" do
|
6
6
|
Extension.new "functions" do |e|
|
@@ -10,17 +10,11 @@ context "Extension with globally available functions" do
|
|
10
10
|
|
11
11
|
require 'functions'
|
12
12
|
|
13
|
-
|
14
|
-
test1
|
15
|
-
end
|
13
|
+
lambda { test1 }.should_not raise_error(NameError)
|
16
14
|
|
17
|
-
|
18
|
-
assert_in_delta 1.0, test2(2.0), 0.001
|
19
|
-
end
|
15
|
+
test2(2.0).should be_close(1.0, 0.001)
|
20
16
|
|
21
|
-
|
22
|
-
test3(2, 4.2).should == 2
|
23
|
-
end
|
17
|
+
test3(2, 4.2).should == 2
|
24
18
|
end
|
25
19
|
|
26
20
|
end
|
data/test/generated/extconf.rb
CHANGED
@@ -7,7 +7,7 @@ def append_ld_flags(flags)
|
|
7
7
|
with_ldflags("#{$LDFLAGS} #{flags.join(' ')}") { true }
|
8
8
|
end
|
9
9
|
|
10
|
-
$CPPFLAGS += " -I'/
|
10
|
+
$CPPFLAGS += " -I'/Users/roelofs/Development/rbplusplus/test/generated' "
|
11
11
|
$LDFLAGS += " "
|
12
12
|
|
13
13
|
if RUBY_PLATFORM =~ /darwin/
|
@@ -22,4 +22,4 @@ if RUBY_PLATFORM =~ /darwin/
|
|
22
22
|
append_ld_flags '-all_load'
|
23
23
|
end
|
24
24
|
|
25
|
-
create_makefile("
|
25
|
+
create_makefile("ui")
|
data/test/headers/alloc_strats.h
CHANGED
@@ -18,7 +18,9 @@ namespace alloc_strats {
|
|
18
18
|
public:
|
19
19
|
NoConstructor* getConstructor() { return 0; }
|
20
20
|
|
21
|
-
Neither* getInstance() { return
|
21
|
+
static Neither* getInstance() { static Neither neither; return &neither; }
|
22
|
+
|
23
|
+
int process(int a, int b) { return a * b; }
|
22
24
|
};
|
23
25
|
}
|
24
26
|
|
@@ -0,0 +1,107 @@
|
|
1
|
+
#ifndef __IMPLICIT_CAST_H__
|
2
|
+
#define __IMPLICIT_CAST_H__
|
3
|
+
|
4
|
+
namespace implicit_cast {
|
5
|
+
|
6
|
+
const int degree2Radians = (3.14 / 180.0);
|
7
|
+
const int radian2Degrees = (180.0 / 3.14);
|
8
|
+
|
9
|
+
class Radian;
|
10
|
+
|
11
|
+
class Degree
|
12
|
+
{
|
13
|
+
public:
|
14
|
+
explicit Degree(float d) : val_(d) {}
|
15
|
+
Degree(const Radian& r);
|
16
|
+
|
17
|
+
float valueDegrees() const { return val_; }
|
18
|
+
float valueRadians() const { return val_ * degree2Radians; }
|
19
|
+
|
20
|
+
private:
|
21
|
+
float val_;
|
22
|
+
};
|
23
|
+
|
24
|
+
class Radian
|
25
|
+
{
|
26
|
+
public:
|
27
|
+
explicit Radian(float r) : val_(r) {}
|
28
|
+
Radian(const Degree& d) : val_(d.valueRadians()) {}
|
29
|
+
|
30
|
+
float valueRadians() const { return val_; }
|
31
|
+
float valueDegrees() const { return val_ * radian2Degrees; }
|
32
|
+
|
33
|
+
private:
|
34
|
+
float val_;
|
35
|
+
};
|
36
|
+
|
37
|
+
// Due to circular dependencies, need to define some
|
38
|
+
// methods down here
|
39
|
+
Degree::Degree(const Radian& r)
|
40
|
+
{
|
41
|
+
val_ = r.valueDegrees();
|
42
|
+
}
|
43
|
+
|
44
|
+
/**
|
45
|
+
* And now some methods that work w/ the above two classes
|
46
|
+
*/
|
47
|
+
bool isAcute(Degree degree) {
|
48
|
+
return degree.valueDegrees() < 90;
|
49
|
+
}
|
50
|
+
|
51
|
+
bool isObtuse(Radian radian) {
|
52
|
+
return radian.valueDegrees() > 90 && radian.valueDegrees() <= 180;
|
53
|
+
}
|
54
|
+
|
55
|
+
bool isRight(Degree* degree) {
|
56
|
+
return degree->valueDegrees() == 90;
|
57
|
+
}
|
58
|
+
|
59
|
+
/**
|
60
|
+
* Classes to show how to turn off the implicit casting
|
61
|
+
*/
|
62
|
+
class Explicit
|
63
|
+
{
|
64
|
+
public:
|
65
|
+
Explicit(float v) {
|
66
|
+
value = v;
|
67
|
+
}
|
68
|
+
|
69
|
+
Explicit(const Degree &d) {
|
70
|
+
value = d.valueDegrees();
|
71
|
+
}
|
72
|
+
|
73
|
+
Explicit(const Radian &r) {
|
74
|
+
value = r.valueDegrees();
|
75
|
+
}
|
76
|
+
|
77
|
+
float value;
|
78
|
+
};
|
79
|
+
|
80
|
+
float explicitValue(Explicit e) {
|
81
|
+
return e.value;
|
82
|
+
}
|
83
|
+
|
84
|
+
class NotImplicit
|
85
|
+
{
|
86
|
+
public:
|
87
|
+
NotImplicit(float v, int a) {
|
88
|
+
value = v * a;
|
89
|
+
}
|
90
|
+
|
91
|
+
NotImplicit(const Degree &d) {
|
92
|
+
value = d.valueDegrees();
|
93
|
+
}
|
94
|
+
|
95
|
+
NotImplicit(const Radian &r) {
|
96
|
+
value = r.valueDegrees();
|
97
|
+
}
|
98
|
+
|
99
|
+
float value;
|
100
|
+
};
|
101
|
+
|
102
|
+
float notImplicitValue(NotImplicit i) {
|
103
|
+
return i.value;
|
104
|
+
}
|
105
|
+
}
|
106
|
+
|
107
|
+
#endif
|
data/test/headers/to_from_ruby.h
CHANGED
@@ -26,7 +26,11 @@ namespace to_from_ruby {
|
|
26
26
|
// Should also work with class methods
|
27
27
|
class WrappedClass {
|
28
28
|
public:
|
29
|
-
WrappedClass() {}
|
29
|
+
WrappedClass() { myType = new MyType(); }
|
30
|
+
|
31
|
+
~WrappedClass() {
|
32
|
+
if(myType) { delete myType; }
|
33
|
+
}
|
30
34
|
|
31
35
|
const MyType& getMyType(int value) {
|
32
36
|
MyType *type = new MyType();
|
@@ -34,20 +38,23 @@ namespace to_from_ruby {
|
|
34
38
|
return *type;
|
35
39
|
}
|
36
40
|
|
37
|
-
const
|
38
|
-
return *
|
41
|
+
const MyType &overload() {
|
42
|
+
return *myType;
|
39
43
|
}
|
40
44
|
|
41
|
-
const
|
42
|
-
return *
|
45
|
+
const MyType &overload(int arg) {
|
46
|
+
return *myType;
|
43
47
|
}
|
48
|
+
|
49
|
+
private:
|
50
|
+
const MyType* myType;
|
44
51
|
};
|
45
52
|
|
46
53
|
/**
|
47
54
|
* Some types, Rice already wraps for us. Make sure this doesn't cause
|
48
55
|
* a compiler error
|
49
56
|
*/
|
50
|
-
|
57
|
+
int usingConstString(const std::string& in);
|
51
58
|
|
52
59
|
/* template tests */
|
53
60
|
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe "Specify types to allow implicit casting" do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
Extension.new "implicit_cast" do |e|
|
7
|
+
e.sources full_dir("headers/implicit_cast.h")
|
8
|
+
e.writer_mode :single
|
9
|
+
|
10
|
+
node = e.namespace "implicit_cast"
|
11
|
+
|
12
|
+
# Can flag individual constructors
|
13
|
+
node.classes("Explicit").constructors.
|
14
|
+
find(:arguments => ["const Radian&"]).implicit_casting(false)
|
15
|
+
|
16
|
+
# Or flag the class as a whole
|
17
|
+
node.classes("NotImplicit").implicit_casting(false)
|
18
|
+
end
|
19
|
+
|
20
|
+
require 'implicit_cast'
|
21
|
+
end
|
22
|
+
|
23
|
+
specify "proper constructor is exposed" do
|
24
|
+
Degree.new(14).value_degrees.should == 14
|
25
|
+
Radian.new(1).value_radians.should == 1
|
26
|
+
end
|
27
|
+
|
28
|
+
specify "can use Degree in place of Radian" do
|
29
|
+
is_obtuse(Degree.new(75)).should be_false
|
30
|
+
end
|
31
|
+
|
32
|
+
specify "can use Radian in place of Degree" do
|
33
|
+
is_acute(Radian.new(2.0)).should be_false
|
34
|
+
end
|
35
|
+
|
36
|
+
specify "pointers also work fine" do
|
37
|
+
is_right(Degree.new(90)).should be_true
|
38
|
+
is_right(Radian.new(2.0)).should be_false
|
39
|
+
end
|
40
|
+
|
41
|
+
specify "can turn off implicit cast wrapping for a given constructor" do
|
42
|
+
lambda do
|
43
|
+
explicit_value(Radian.new(60.0))
|
44
|
+
end.should raise_error
|
45
|
+
|
46
|
+
lambda do
|
47
|
+
e = Explicit.new(14.0)
|
48
|
+
explicit_value(e).should be_close(14.0, 0.001)
|
49
|
+
end.should_not raise_error
|
50
|
+
end
|
51
|
+
|
52
|
+
specify "can turn off implicit casting for an entire class" do
|
53
|
+
n = NotImplicit.new(10.0, 3)
|
54
|
+
|
55
|
+
not_implicit_value(n).should be_close(30.0, 0.001)
|
56
|
+
|
57
|
+
lambda do
|
58
|
+
not_implicit_value(Degree.new(15.0))
|
59
|
+
end.should raise_error
|
60
|
+
|
61
|
+
lambda do
|
62
|
+
not_implicit_value(Radian.new(1.0))
|
63
|
+
end.should raise_error
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
data/test/modules_test.rb
CHANGED
@@ -2,70 +2,69 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
context "Extension with modules" do
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
full_dir("headers/Adder.h"),
|
17
|
-
full_dir("headers/Adder.cpp")
|
18
|
-
]
|
19
|
-
|
20
|
-
e.writer_mode :single
|
21
|
-
|
22
|
-
e.module "Empty" do |m|
|
23
|
-
end
|
5
|
+
before(:all) do
|
6
|
+
Extension.new "modules" do |e|
|
7
|
+
e.sources [
|
8
|
+
full_dir("headers/Adder.h"),
|
9
|
+
full_dir("headers/functions.h"),
|
10
|
+
full_dir("headers/Subtracter.hpp")
|
11
|
+
],
|
12
|
+
:include_source_files => [
|
13
|
+
full_dir("headers/Adder.h"),
|
14
|
+
full_dir("headers/Adder.cpp")
|
15
|
+
]
|
24
16
|
|
25
|
-
|
26
|
-
wrapper = e.module "Wrapper"
|
27
|
-
node = wrapper.namespace "classes"
|
28
|
-
node.classes("Adder").disable_typedef_lookup
|
17
|
+
e.writer_mode :single
|
29
18
|
|
30
|
-
|
31
|
-
|
32
|
-
|
19
|
+
e.module "Empty" do |m|
|
20
|
+
end
|
21
|
+
|
22
|
+
# Can use without a block
|
23
|
+
wrapper = e.module "Wrapper"
|
24
|
+
node = wrapper.namespace "classes"
|
25
|
+
node.classes("Adder").disable_typedef_lookup
|
26
|
+
|
27
|
+
e.module "Functions" do |m|
|
28
|
+
m.namespace "functions"
|
29
|
+
end
|
33
30
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
end
|
31
|
+
e.module "Nested" do |m|
|
32
|
+
m.module "Nested" do |n|
|
33
|
+
n.module "Inner" do |inner|
|
34
|
+
inner.namespace "subtracter"
|
39
35
|
end
|
40
36
|
end
|
41
|
-
|
42
37
|
end
|
43
38
|
|
44
|
-
require 'modules'
|
45
39
|
end
|
40
|
+
|
41
|
+
require 'modules'
|
46
42
|
end
|
47
43
|
|
48
44
|
specify "should be able to generate a module definition" do
|
49
|
-
|
45
|
+
lambda { Empty }.should_not raise_error(NameError)
|
46
|
+
|
50
47
|
Empty.class.should == Module
|
51
48
|
end
|
52
49
|
|
53
50
|
specify "should wrap up C++ classes under the namespace as requested" do
|
54
|
-
|
55
|
-
|
51
|
+
lambda { Adder }.should raise_error(NameError)
|
52
|
+
lambda { Wrapper::Adder }.should_not raise_error(NameError)
|
53
|
+
|
56
54
|
a = Wrapper::Adder.new
|
57
55
|
a.get_class_name.should == "Adder"
|
58
56
|
end
|
59
57
|
|
60
58
|
specify "should wrap up C++ functions in the module" do
|
61
|
-
|
62
|
-
Functions::test2(2).should
|
59
|
+
lambda { Functions }.should_not raise_error(NameError)
|
60
|
+
Functions::test2(2).should be_close(1.0, 0.001)
|
63
61
|
Functions::test3(4, 6).should == 4
|
64
62
|
end
|
65
63
|
|
66
64
|
specify "should be able to nest modules and related definitions" do
|
67
|
-
|
68
|
-
|
65
|
+
lambda { Subtracter }.should raise_error(NameError)
|
66
|
+
lambda { Nested::Nested::Inner::Subtracter }.should_not raise_error(NameError)
|
67
|
+
|
69
68
|
s = Nested::Nested::Inner::Subtracter.new
|
70
69
|
s.get_class_name.should == "Subtracter"
|
71
70
|
end
|
data/test/nested_test.rb
CHANGED
@@ -1,26 +1,24 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
context "Wrapping Classes within classes" do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
Extension.new "nested" do |e|
|
9
|
-
e.sources full_dir("headers/nested_classes.h")
|
10
|
-
node = e.namespace "classes"
|
11
|
-
end
|
12
|
-
|
13
|
-
require 'nested'
|
4
|
+
before(:all) do
|
5
|
+
Extension.new "nested" do |e|
|
6
|
+
e.sources full_dir("headers/nested_classes.h")
|
7
|
+
node = e.namespace "classes"
|
14
8
|
end
|
9
|
+
|
10
|
+
require 'nested'
|
15
11
|
end
|
16
12
|
|
17
13
|
specify "should properly make nested classes available" do
|
18
|
-
|
19
|
-
|
20
|
-
|
14
|
+
lambda do
|
15
|
+
Kernel.const_get(TestClass)
|
16
|
+
Kernel.const_get(TestClass::InnerClass)
|
17
|
+
Kernel.const_get(TestClass::InnerClass::Inner2)
|
18
|
+
end.should_not raise_error(NameError)
|
21
19
|
|
22
|
-
TestClass.new.
|
23
|
-
TestClass::InnerClass.new.
|
24
|
-
TestClass::InnerClass::Inner2.new.
|
20
|
+
TestClass.new.should_not be_nil
|
21
|
+
TestClass::InnerClass.new.should_not be_nil
|
22
|
+
TestClass::InnerClass::Inner2.new.should_not be_nil
|
25
23
|
end
|
26
24
|
end
|
data/test/overloading_test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
|
3
|
+
describe "Extension with overloaded methods" do
|
4
4
|
|
5
5
|
specify "should have all functions available" do
|
6
6
|
Extension.new "overload" do |e|
|
@@ -12,35 +12,32 @@ context "Extension with overloaded methods" do
|
|
12
12
|
mathy.use_constructor(
|
13
13
|
mathy.constructors.find(:arguments => [:int])
|
14
14
|
)
|
15
|
+
|
16
|
+
mathy.methods("constMethod").find(:arguments => ["std::string"]).wrap_as("const_method_string")
|
15
17
|
end
|
16
18
|
|
17
19
|
require 'overload'
|
18
20
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
#math = Mathy.new
|
23
|
-
math = Mathy.new(1)
|
24
|
-
end
|
21
|
+
#Constructor overloading is broken in rice
|
22
|
+
#math = Mathy.new
|
23
|
+
math = Mathy.new(1)
|
25
24
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
math.times_3(3,2,3).should.equal 18
|
31
|
-
end
|
25
|
+
math.times.should == 1
|
26
|
+
math.times_1(3).should == 3
|
27
|
+
math.times_2(3,2).should == 6
|
28
|
+
math.times_3(3,2,3).should == 18
|
32
29
|
|
33
|
-
|
30
|
+
lambda do
|
34
31
|
math.nothing_0
|
35
32
|
math.nothing_1(1)
|
36
|
-
end
|
33
|
+
end.should_not raise_error(NameError)
|
37
34
|
|
38
35
|
# Should properly handle const overloads as well
|
39
|
-
|
40
|
-
math.const_method_0(1)
|
41
|
-
math.const_method_1(1)
|
42
|
-
math.
|
43
|
-
end
|
36
|
+
lambda do
|
37
|
+
math.const_method_0(1)
|
38
|
+
math.const_method_1(1)
|
39
|
+
math.const_method_string("love")
|
40
|
+
end.should_not raise_error(NameError)
|
44
41
|
|
45
42
|
end
|
46
43
|
|
data/test/struct_test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
|
3
|
+
describe "Nested Struct" do
|
4
4
|
|
5
5
|
specify "should be accessible" do
|
6
6
|
Extension.new "nested" do |e|
|
@@ -10,13 +10,11 @@ context "Nested Struct" do
|
|
10
10
|
|
11
11
|
require 'nested'
|
12
12
|
|
13
|
-
|
14
|
-
Klass::NestedStruct.new.one.should == 1
|
15
|
-
end
|
13
|
+
Klass::NestedStruct.new.one.should == 1
|
16
14
|
|
17
|
-
|
15
|
+
lambda do
|
18
16
|
Klass::PrivateNestedStruct.new
|
19
|
-
end
|
17
|
+
end.should raise_error(NameError)
|
20
18
|
end
|
21
19
|
|
22
20
|
end
|
data/test/subclass_test.rb
CHANGED
@@ -12,30 +12,28 @@ context "Extension with class hierachies" do
|
|
12
12
|
# Rice doesn't support multiple-inheritance (neither does Ruby), so for now
|
13
13
|
# until we can fake it, force people to specify
|
14
14
|
node.classes("Multiple").use_superclass( node.classes("Base2") )
|
15
|
+
|
16
|
+
node.classes.implicit_casting(false)
|
15
17
|
end
|
16
18
|
|
17
19
|
require 'subclass'
|
18
20
|
|
19
21
|
# Ignored superclasses should not cause problems with wrapped subclasses
|
20
|
-
|
21
|
-
|
22
|
-
Base.new.zero.should == Sub.new.zero
|
23
|
-
end
|
22
|
+
Base.new.one.should == Sub.new.one
|
23
|
+
Base.new.zero.should == Sub.new.zero
|
24
24
|
|
25
25
|
# Template superclasses shouldn't cause problems
|
26
|
-
|
27
|
-
TemplateSub.new.zero.should == TemplateSub.new.custom
|
28
|
-
end
|
26
|
+
TemplateSub.new.zero.should == TemplateSub.new.custom
|
29
27
|
|
30
|
-
|
28
|
+
lambda do
|
31
29
|
TemplatePtr.new.custom
|
32
|
-
end
|
30
|
+
end.should_not raise_error(NameError)
|
33
31
|
|
34
|
-
|
32
|
+
lambda do
|
35
33
|
Multiple.new
|
36
|
-
end
|
34
|
+
end.should_not raise_error(NameError)
|
37
35
|
|
38
|
-
Multiple.superclass.should
|
36
|
+
Multiple.superclass.should == Base2
|
39
37
|
end
|
40
38
|
|
41
39
|
end
|
data/test/test_helper.rb
CHANGED
@@ -2,28 +2,37 @@ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../lib")
|
|
2
2
|
$:.unshift File.expand_path(File.dirname(__FILE__) + "/generated")
|
3
3
|
|
4
4
|
require 'rubygems'
|
5
|
-
require '
|
5
|
+
require 'rspec'
|
6
6
|
require 'rbplusplus'
|
7
|
-
require 'mocha_standalone'
|
8
7
|
|
9
8
|
include RbPlusPlus
|
10
9
|
|
11
|
-
|
12
|
-
|
10
|
+
module FileDirectoryHelpers
|
13
11
|
def full_dir(path)
|
14
12
|
File.expand_path(File.join(File.dirname(__FILE__), path))
|
15
13
|
end
|
14
|
+
end
|
16
15
|
|
17
|
-
|
16
|
+
module TestHelpers
|
17
|
+
def clear_info
|
18
18
|
`rm -rf #{full_dir('generated')}/*`
|
19
|
-
Logger.stubs(:info)
|
20
|
-
Logger.stubs(:warn)
|
21
|
-
Logger.stubs(:error)
|
22
|
-
Logger.stubs(:debug)
|
23
19
|
end
|
24
20
|
|
25
|
-
def
|
26
|
-
|
27
|
-
|
21
|
+
def silence_logging
|
22
|
+
RbPlusPlus::Logger.silent!
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_setup
|
26
|
+
clear_info
|
27
|
+
silence_logging
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
RSpec.configure do |config|
|
32
|
+
config.include(FileDirectoryHelpers)
|
33
|
+
config.include(TestHelpers)
|
34
|
+
|
35
|
+
config.before(:all) do
|
36
|
+
test_setup
|
28
37
|
end
|
29
38
|
end
|
data/test/to_from_ruby_test.rb
CHANGED
@@ -17,6 +17,12 @@ context "Properly build known required to_ruby and from_ruby methods" do
|
|
17
17
|
|
18
18
|
c = WrappedClass.new
|
19
19
|
c.get_my_type(17).value.should == 17
|
20
|
-
|
20
|
+
|
21
|
+
using_const_string("super_long").should == 10
|
22
|
+
|
23
|
+
# Running this gets a glibc double free error. Not sure if this is properly
|
24
|
+
# fixable outside of implementing call and return policies in Rice.
|
25
|
+
# c.overload_0.class.should == MyType
|
26
|
+
# c.overload_0.class.should == c.overload_1(0).class
|
21
27
|
end
|
22
28
|
end
|