rbplusplus 0.1.1 → 0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. data/Rakefile +31 -15
  2. data/TODO +20 -0
  3. data/lib/rbplusplus/builders/base.rb +148 -8
  4. data/lib/rbplusplus/builders/class.rb +106 -31
  5. data/lib/rbplusplus/builders/enumeration.rb +40 -0
  6. data/lib/rbplusplus/builders/extension.rb +31 -6
  7. data/lib/rbplusplus/builders/module.rb +12 -6
  8. data/lib/rbplusplus/builders/types_manager.rb +93 -0
  9. data/lib/rbplusplus/extension.rb +69 -41
  10. data/lib/rbplusplus/module.rb +3 -1
  11. data/lib/rbplusplus/transformers/class.rb +67 -0
  12. data/lib/rbplusplus/transformers/constructor.rb +4 -0
  13. data/lib/rbplusplus/transformers/function.rb +27 -0
  14. data/lib/rbplusplus/transformers/method.rb +4 -0
  15. data/lib/rbplusplus/transformers/module.rb +71 -0
  16. data/lib/rbplusplus/transformers/node.rb +77 -0
  17. data/lib/rbplusplus/transformers/node_cache.rb +19 -0
  18. data/lib/rbplusplus/transformers/node_reference.rb +30 -0
  19. data/lib/rbplusplus/transformers/rbgccxml.rb +6 -0
  20. data/lib/rbplusplus/writers/extension.rb +33 -25
  21. data/lib/rbplusplus/writers/multiple_files_writer.rb +42 -2
  22. data/lib/rbplusplus/writers/single_file_writer.rb +5 -0
  23. data/lib/rbplusplus.rb +24 -0
  24. data/test/class_methods_test.rb +55 -0
  25. data/test/classes_test.rb +0 -25
  26. data/test/compiling_test.rb +30 -0
  27. data/test/constructors_test.rb +40 -0
  28. data/test/enumerations_test.rb +63 -0
  29. data/test/file_writers_test.rb +56 -4
  30. data/test/generated/extconf.rb +25 -5
  31. data/test/headers/class_methods.h +41 -0
  32. data/test/headers/complex_static_methods.h +25 -0
  33. data/test/headers/constructors.h +47 -0
  34. data/test/headers/enums.h +77 -0
  35. data/test/headers/external_mapping.h +16 -0
  36. data/test/headers/external_mapping_rice.h +20 -0
  37. data/test/headers/include/helper.h +1 -0
  38. data/test/headers/nested_struct.h +20 -0
  39. data/test/headers/overload.h +28 -0
  40. data/test/headers/subclass.h +42 -0
  41. data/test/headers/to_from_ruby.h +78 -0
  42. data/test/headers/to_from_ruby_source.cpp +22 -0
  43. data/test/headers/ugly_helper.h +18 -0
  44. data/test/headers/ugly_interface.h +115 -0
  45. data/test/headers/ugly_interface_ns.h +8 -0
  46. data/test/nested_test.rb +26 -0
  47. data/test/object_persistence_test.rb +44 -0
  48. data/test/overloading_test.rb +36 -0
  49. data/test/struct_test.rb +22 -0
  50. data/test/subclass_test.rb +31 -0
  51. data/test/test_helper.rb +5 -0
  52. data/test/to_from_ruby_test.rb +24 -0
  53. data/test/wrap_as_test.rb +114 -0
  54. metadata +43 -6
@@ -0,0 +1,114 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ context "Ugly interfaces cleaner" do
4
+
5
+ specify "should map functions detailed" do
6
+ node = nil
7
+
8
+
9
+ Extension.new "ui" do |e|
10
+ e.sources full_dir("headers/ugly_interface_ns.h"),
11
+ :includes => full_dir("headers/ugly_helper.h")
12
+ node = e.namespace("UI")
13
+
14
+ # test the no export option
15
+ node.functions("uiIgnore").ignore
16
+
17
+ # static method wrapping
18
+ node.functions("IlikeVectors").wrap_as("create_vector").calls("newInstanceButBetter")
19
+
20
+ e.module "UI" do |m|
21
+ m.module "Math" do |m_math|
22
+ #function wrapping
23
+ m_math.includes node.functions("uiAdd").wrap_as("add")
24
+ # Wrap_as changes the name of the node
25
+ node.functions("add").ignored?.should == false
26
+ node.functions("add").moved?.should == true
27
+
28
+ m_math.includes node.functions("ui_Subtract").wrap_as("subtract")
29
+ m_math.includes node.namespaces("DMath").functions("divide")
30
+ end
31
+
32
+ #class wrapping
33
+ vector = node.classes("C_UIVector").wrap_as("Vector")
34
+ vector.methods("x_").wrap_as("x")
35
+ vector.methods("set_x").wrap_as("x=")
36
+
37
+ # This is ignored because the C function Vector_y is not defined
38
+ vector.methods("y_").calls("Vector_y").ignore
39
+ vector.methods("y_").qualified_name.should == "Vector_y"
40
+
41
+ m.includes vector
42
+
43
+ #mapping stray functions to singleton methods
44
+ modder = node.namespaces("I_LEARN_C").classes("Modder").wrap_as("Modulus")
45
+ modder.includes node.namespaces("I_LEARN_C").functions("mod")
46
+ modder.includes node.namespaces("I_LEARN_C").functions("mod2").wrap_as("method_mod").as_instance_method
47
+ m.includes modder
48
+
49
+ nc = node.classes("NoConstructor")
50
+ nc.constructors.each { |c| c.ignore }
51
+ m.includes nc
52
+
53
+ m.includes node.classes("Outside")
54
+ node.classes("Outside").includes node.classes("Inside")
55
+ end
56
+ end
57
+
58
+ require 'ui'
59
+
60
+ should.raise NoMethodError do
61
+ ui_ignore()
62
+ end
63
+
64
+ should.raise NoMethodError do
65
+ ui_add(1,2)
66
+ end
67
+
68
+ should.not.raise NoMethodError do
69
+ UI::Math::add(1,2).should == 3
70
+ end
71
+
72
+ should.raise NoMethodError do
73
+ ui_subtract(2,1)
74
+ end
75
+
76
+ should.not.raise NoMethodError do
77
+ UI::Math::subtract(2,1).should == 1
78
+ end
79
+
80
+ should.raise NameError do
81
+ C_UIVector.new
82
+ end
83
+
84
+ should.not.raise NameError do
85
+ v = UI::Vector.new
86
+ v.x = 3
87
+ v.x.should == 3
88
+ end
89
+
90
+ should.raise NameError do
91
+ UI::DMath::divide(1.0,2.0)
92
+ end
93
+
94
+ should.not.raise NoMethodError do
95
+ UI::Modulus.mod(3,2).should == 1
96
+ end
97
+
98
+ should.raise TypeError do
99
+ UI::Modulus.new.method_mod(2)
100
+ end
101
+
102
+ should.not.raise NoMethodError do
103
+ UI::Math::divide(2,1).should == 2
104
+ end
105
+
106
+ should.raise TypeError do
107
+ UI::NoConstructor.new
108
+ end
109
+
110
+ should.not.raise NoMethodError do
111
+ UI::Outside::Inside.new
112
+ end
113
+ end
114
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbplusplus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: "0.8"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Roelofs
@@ -9,26 +9,28 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-05-12 00:00:00 -04:00
12
+ date: 2008-07-22 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rbgccxml
17
+ type: :runtime
17
18
  version_requirement:
18
19
  version_requirements: !ruby/object:Gem::Requirement
19
20
  requirements:
20
21
  - - "="
21
22
  - !ruby/object:Gem::Version
22
- version: 0.1.1
23
+ version: "0.8"
23
24
  version:
24
25
  - !ruby/object:Gem::Dependency
25
26
  name: rice
27
+ type: :runtime
26
28
  version_requirement:
27
29
  version_requirements: !ruby/object:Gem::Requirement
28
30
  requirements:
29
- - - "="
31
+ - - ">="
30
32
  - !ruby/object:Gem::Version
31
- version: 1.0.1
33
+ version: 1.0.2
32
34
  version:
33
35
  description: Rb++ combines the powerful query interface of rbgccxml and the Rice library to make Ruby wrapping extensions easier to write than ever.
34
36
  email: jameskilton@gmail.com
@@ -43,11 +45,22 @@ files:
43
45
  - Rakefile
44
46
  - lib/rbplusplus/extension.rb
45
47
  - lib/rbplusplus/module.rb
48
+ - lib/rbplusplus/builders/enumeration.rb
46
49
  - lib/rbplusplus/builders/extension.rb
47
50
  - lib/rbplusplus/builders/module.rb
51
+ - lib/rbplusplus/builders/types_manager.rb
48
52
  - lib/rbplusplus/builders/base.rb
49
53
  - lib/rbplusplus/builders/class.rb
50
54
  - lib/rbplusplus/rbplusplus.rb
55
+ - lib/rbplusplus/transformers/function.rb
56
+ - lib/rbplusplus/transformers/node_cache.rb
57
+ - lib/rbplusplus/transformers/node.rb
58
+ - lib/rbplusplus/transformers/module.rb
59
+ - lib/rbplusplus/transformers/constructor.rb
60
+ - lib/rbplusplus/transformers/node_reference.rb
61
+ - lib/rbplusplus/transformers/method.rb
62
+ - lib/rbplusplus/transformers/class.rb
63
+ - lib/rbplusplus/transformers/rbgccxml.rb
51
64
  - lib/rbplusplus/writers/extension.rb
52
65
  - lib/rbplusplus/writers/base.rb
53
66
  - lib/rbplusplus/writers/single_file_writer.rb
@@ -78,25 +91,49 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
91
  requirements: []
79
92
 
80
93
  rubyforge_project: rbplusplus
81
- rubygems_version: 1.1.1
94
+ rubygems_version: 1.2.0
82
95
  signing_key:
83
96
  specification_version: 2
84
97
  summary: Ruby library to generate Rice wrapper code
85
98
  test_files:
86
99
  - test/classes_test.rb
87
100
  - test/extension_test.rb
101
+ - test/nested_test.rb
102
+ - test/subclass_test.rb
103
+ - test/constructors_test.rb
104
+ - test/overloading_test.rb
105
+ - test/wrap_as_test.rb
106
+ - test/object_persistence_test.rb
88
107
  - test/generated/extconf.rb
108
+ - test/class_methods_test.rb
89
109
  - test/compiling_test.rb
110
+ - test/to_from_ruby_test.rb
111
+ - test/struct_test.rb
112
+ - test/enumerations_test.rb
90
113
  - test/modules_test.rb
91
114
  - test/functions_test.rb
92
115
  - test/test_helper.rb
93
116
  - test/file_writers_test.rb
94
117
  - test/headers/Subtracter.hpp
118
+ - test/headers/complex_static_methods.h
119
+ - test/headers/ugly_interface.h
120
+ - test/headers/external_mapping.h
95
121
  - test/headers/functions.h
122
+ - test/headers/to_from_ruby_source.cpp
96
123
  - test/headers/empty.h
124
+ - test/headers/enums.h
125
+ - test/headers/ugly_interface_ns.h
126
+ - test/headers/nested_struct.h
127
+ - test/headers/subclass.h
97
128
  - test/headers/requires_define.h
129
+ - test/headers/class_methods.h
130
+ - test/headers/ugly_helper.h
131
+ - test/headers/constructors.h
98
132
  - test/headers/nested_classes.h
99
133
  - test/headers/with_includes.h
134
+ - test/headers/to_from_ruby.h
135
+ - test/headers/external_mapping_rice.h
100
136
  - test/headers/include
101
137
  - test/headers/include/helper.h
138
+ - test/headers/overload.h
102
139
  - test/headers/Adder.h