ffi-swig-generator 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. data/.hg/branch.cache +2 -0
  2. data/.hg/dirstate +0 -0
  3. data/.hg/store/00changelog.i +0 -0
  4. data/.hg/store/00manifest.i +0 -0
  5. data/.hg/store/data/.hgignore.i +0 -0
  6. data/.hg/store/data/.hgtags.i +0 -0
  7. data/.hg/store/data/_history.txt.i +0 -0
  8. data/.hg/store/data/_r_e_a_d_m_e.rdoc.i +0 -0
  9. data/.hg/store/data/_rakefile.i +0 -0
  10. data/.hg/store/data/cucumber.yml.i +0 -0
  11. data/.hg/store/data/examples/_rakefile.i +0 -0
  12. data/.hg/store/data/features/generate.feature.i +0 -0
  13. data/.hg/store/data/features/step__definitions/generate.rb.i +0 -0
  14. data/.hg/store/data/features/support/env.rb.i +0 -0
  15. data/.hg/store/data/features/support/results.rb.i +0 -0
  16. data/.hg/store/data/features/support/templates.rb.i +0 -0
  17. data/.hg/store/data/lib/ffi-swig-generator.rb.i +0 -0
  18. data/.hg/store/data/lib/generator/application.rb.i +0 -0
  19. data/.hg/store/data/lib/generator/constant.rb.i +0 -0
  20. data/.hg/store/data/lib/generator/enum.rb.i +0 -0
  21. data/.hg/store/data/lib/generator/function.rb.i +0 -0
  22. data/.hg/store/data/lib/generator/generator.rb.i +0 -0
  23. data/.hg/store/data/lib/generator/generatortask.rb.i +0 -0
  24. data/.hg/store/data/lib/generator/logger.rb.i +0 -0
  25. data/.hg/store/data/lib/generator/node.rb.i +0 -0
  26. data/.hg/store/data/lib/generator/parser.rb.i +0 -0
  27. data/.hg/store/data/lib/generator/struct.rb.i +0 -0
  28. data/.hg/store/data/lib/generator/type.rb.i +0 -0
  29. data/.hg/store/data/lib/generator/types.rb.i +0 -0
  30. data/.hg/store/data/spec/generator/constant__spec.rb.i +0 -0
  31. data/.hg/store/data/spec/generator/enum__spec.rb.i +0 -0
  32. data/.hg/store/data/spec/generator/function__spec.rb.i +0 -0
  33. data/.hg/store/data/spec/generator/generator__spec.rb.i +0 -0
  34. data/.hg/store/data/spec/generator/node__spec.rb.i +0 -0
  35. data/.hg/store/data/spec/generator/parser__spec.rb.i +0 -0
  36. data/.hg/store/data/spec/generator/struct__spec.rb.i +0 -0
  37. data/.hg/store/data/spec/generator/swig/constants.i.i +0 -0
  38. data/.hg/store/data/spec/generator/swig/functions.i.i +0 -0
  39. data/.hg/store/data/spec/generator/swig/testlib.i.i +0 -0
  40. data/.hg/store/data/spec/generator/swig/typedefs.i.i +0 -0
  41. data/.hg/store/data/spec/generator/swig/types.i.i +0 -0
  42. data/.hg/store/data/spec/generator/type__spec.rb.i +0 -0
  43. data/.hg/store/data/spec/spec__helper.rb.i +0 -0
  44. data/.hg/store/data/tasks/cucumber.rake.i +0 -0
  45. data/.hg/store/undo +0 -0
  46. data/.hg/undo.dirstate +0 -0
  47. data/.hgignore +3 -0
  48. data/.hgtags +1 -0
  49. data/History.txt +22 -2
  50. data/README.rdoc +26 -22
  51. data/Rakefile +2 -3
  52. data/cucumber.yml +1 -0
  53. data/examples/Rakefile +5 -3
  54. data/examples/generated/libc_wrap.rb +18 -0
  55. data/examples/generated/libc_wrap.xml +597 -0
  56. data/examples/generated/wiiuse_wrap.rb +322 -0
  57. data/examples/generated/wiiuse_wrap.xml +9025 -0
  58. data/features/generate.feature +45 -0
  59. data/features/step_definitions/generate.rb +32 -0
  60. data/features/support/env.rb +4 -0
  61. data/features/support/templates.rb +381 -0
  62. data/lib/ffi-swig-generator.rb +1 -1
  63. data/lib/generator/application.rb +1 -1
  64. data/lib/generator/constant.rb +24 -0
  65. data/lib/generator/enum.rb +38 -0
  66. data/lib/generator/function.rb +71 -0
  67. data/lib/generator/generatortask.rb +21 -9
  68. data/lib/generator/logger.rb +29 -0
  69. data/lib/generator/node.rb +19 -0
  70. data/lib/generator/parser.rb +168 -0
  71. data/lib/generator/struct.rb +76 -0
  72. data/lib/generator/type.rb +128 -0
  73. data/lib/generator/types.rb +36 -0
  74. data/spec/generator/constant_spec.rb +17 -0
  75. data/spec/generator/enum_spec.rb +29 -0
  76. data/spec/generator/function_spec.rb +66 -0
  77. data/spec/generator/parser_spec.rb +250 -0
  78. data/spec/generator/struct_spec.rb +77 -0
  79. data/spec/generator/swig/constants.i +5 -0
  80. data/spec/generator/swig/functions.i +8 -0
  81. data/spec/generator/swig/testlib.i +42 -0
  82. data/spec/generator/swig/typedefs.i +1 -0
  83. data/spec/generator/swig/types.i +1 -0
  84. data/spec/generator/type_spec.rb +38 -0
  85. data/spec/spec_helper.rb +6 -0
  86. data/tasks/cucumber.rake +8 -0
  87. metadata +58 -18
  88. data/lib/generator/generator.rb +0 -344
  89. data/spec/generator/generator_spec.rb +0 -248
@@ -1,248 +0,0 @@
1
- require File.join(File.dirname(__FILE__), %w[.. spec_helper])
2
-
3
- include FFI
4
-
5
- share_examples_for "All specs" do
6
- after :all do
7
- remove_xml
8
- end
9
- end
10
-
11
- describe Generator::Parser do
12
- it_should_behave_like 'All specs'
13
- before :all do
14
- @node = generate_xml_wrap_from('testlib')
15
- end
16
- it 'should generate ruby ffi wrap code' do
17
- Generator::Parser.generate(@node).should == <<EOC
18
-
19
- module TestLib
20
- extend FFI::Library
21
- CONST_1 = 0x10
22
- CONST_2 = 0x20
23
- ENUM_1 = 0
24
- ENUM_2 = 1
25
- ENUM_3 = 2
26
-
27
- class UnionT < FFI::Union
28
- layout(
29
- :c, :char,
30
- :f, :float
31
- )
32
- end
33
- class TestStruct < FFI::Struct
34
- layout(
35
- :i, :int,
36
- :c, :char,
37
- :b, :uchar
38
- )
39
- end
40
- class TestStruct3 < FFI::Struct
41
- layout(
42
- :c, :char
43
- )
44
- end
45
- callback(:cb, [ :string, :string ], :void)
46
- class TestStruct2 < FFI::Struct
47
- layout(
48
- :s, TestStruct,
49
- :s_3, TestStruct3,
50
- :e, :int,
51
- :func, :cb,
52
- :u, UnionT
53
- )
54
- end
55
- attach_function :get_int, [ :pointer ], :int
56
- attach_function :get_char, [ :pointer ], :char
57
- attach_function :func_with_enum, [ :int ], :int
58
- attach_function :func_with_enum_2, [ :int ], :int
59
- attach_function :func_with_typedef, [ ], :uchar
60
-
61
- end
62
- EOC
63
- end
64
- end
65
-
66
- describe Generator::Constant do
67
- it_should_behave_like 'All specs'
68
- before :all do
69
- @node = generate_xml_wrap_from('constants')
70
- end
71
- it 'should return a ruby constant assignment' do
72
- Generator::Constant.new(:node => @node / 'constant').to_s.should == "CONST_1 = 0x10"
73
- end
74
- end
75
-
76
- describe Generator::Enum do
77
- before :all do
78
- @node = generate_xml_wrap_from('enums')
79
- end
80
- it 'should generate constants' do
81
- Generator::Enum.new(:node => (@node / 'enum')[0]).to_s.should == <<EOE
82
- ENUM_1 = 0
83
- ENUM_2 = 1
84
- ENUM_3 = 2
85
- EOE
86
- end
87
- it 'should generate constants starting from the latest assignment' do
88
- Generator::Enum.new(:node => (@node / 'enum')[1]).to_s.should == <<EOE
89
- ENUM_21 = 2
90
- ENUM_22 = 3
91
- ENUM_23 = 4
92
- EOE
93
- Generator::Enum.new(:node => (@node / 'enum')[2]).to_s.should == <<EOE
94
- ENUM_31 = 0
95
- ENUM_32 = 5
96
- ENUM_33 = 6
97
- EOE
98
- end
99
- end
100
-
101
- describe Generator::Type do
102
- it_should_behave_like 'All specs'
103
- before :all do
104
- @node = generate_xml_wrap_from('types')
105
- end
106
- it 'should generate string type' do
107
- Generator::Type.new(:node => (@node / 'cdecl')[0]).to_s.should == ':string'
108
- end
109
- it 'should generate pointer type' do
110
- Generator::Type.new(:node => (@node / 'cdecl')[1]).to_s.should == ':pointer'
111
- Generator::Type.new(:node => (@node / 'cdecl')[2]).to_s.should == ':pointer'
112
- end
113
- it 'should generate array type' do
114
- Generator::Type.new(:node => (@node / 'cdecl')[3]).to_s.should == '[:int, 5]'
115
- Generator::Type.new(:node => (@node / 'cdecl')[4]).to_s.should == '[:string, 5]'
116
- end
117
- it 'should generate struct type' do
118
- Generator::Type.new(:node => (@node / 'cdecl')[6]).to_s.should == 'TestStruct'
119
- end
120
- it 'should generate struct array type' do
121
- Generator::Type.new(:node => (@node / 'cdecl')[7]).to_s.should == '[TestStruct, 5]'
122
- end
123
- it 'should generate enum array type' do
124
- Generator::Type.new(:node => (@node / 'cdecl')[8]).to_s.should == '[:int, 5]'
125
- end
126
- it 'should generate const type' do
127
- Generator::Type.new(:node => (@node / 'cdecl')[9]).to_s.should == ':int'
128
- Generator::Type.new(:node => (@node / 'cdecl')[10]).to_s.should == ':string'
129
- end
130
- Generator::TYPES.sort.each_with_index do |type, i|
131
- it "should generate #{type[0]} type" do
132
- Generator::Type.new(:node => (@node / 'cdecl')[i + 11]).to_s.should == type[1]
133
- end
134
- end
135
- end
136
-
137
- describe Generator::Function do
138
- it_should_behave_like 'All specs'
139
- before :all do
140
- @node = generate_xml_wrap_from('functions')
141
- end
142
- it 'should return a properly generated attach_method' do
143
- Generator::Function.new(:node => (@node / 'cdecl')[0]).to_s.should == "attach_function :func_1, [ :char, :int ], :int"
144
- end
145
- it 'should properly generate pointer arguments' do
146
- Generator::Function.new(:node => (@node / 'cdecl')[1]).to_s.should == "attach_function :func_2, [ :pointer, :pointer, :pointer ], :uint"
147
- end
148
- it 'should properly generate string arguments' do
149
- Generator::Function.new(:node => (@node / 'cdecl')[2]).to_s.should == "attach_function :func_3, [ :string ], :void"
150
- end
151
- it 'should properly generate return type' do
152
- Generator::Function.new(:node => (@node / 'cdecl')[3]).to_s.should == "attach_function :func_4, [ :int ], :string"
153
- end
154
- it 'should properly generate void return type' do
155
- Generator::Function.new(:node => (@node / 'cdecl')[4]).to_s.should == "attach_function :func_5, [ ], :void"
156
- end
157
- it 'should properly generate pointer of pointer arguments' do
158
- Generator::Function.new(:node => (@node / 'cdecl')[5]).to_s.should == "attach_function :func_6, [ :pointer ], :void"
159
- end
160
- it 'should properly generate enum arguments' do
161
- Generator::Function.new(:node => (@node / 'cdecl')[6]).to_s.should == "attach_function :func_7, [ :int ], :void"
162
- end
163
- it 'should properly generate enum return type' do
164
- Generator::Function.new(:node => (@node / 'cdecl')[7]).to_s.should == "attach_function :func_8, [ ], :int"
165
- end
166
- it 'should properly generate struct arguments' do
167
- Generator::Function.new(:node => (@node / 'cdecl')[9]).to_s.should == "attach_function :func_9, [ TestStruct ], :void"
168
- end
169
- it 'should properly generate struct return type' do
170
- Generator::Function.new(:node => (@node / 'cdecl')[10]).to_s.should == "attach_function :func_10, [ ], TestStruct"
171
- end
172
- it 'should properly generate a function with no parameters' do
173
- Generator::Function.new(:node => (@node / 'cdecl')[11]).to_s.should == "attach_function :func_11, [ ], :void"
174
- end
175
- it 'should properly generate a function that takes a callback as argument' do
176
- Generator::Function.new(:node => (@node / 'cdecl')[12]).to_s.should == "attach_function :func_12, [ callback(:callback, [ :float ], :void) ], :void"
177
- Generator::Function.new(:node => (@node / 'cdecl')[13]).to_s.should == "attach_function :func_13, [ callback(:callback, [ :double, :float ], :int) ], :void"
178
- Generator::Function.new(:node => (@node / 'cdecl')[14]).to_s.should == "attach_function :func_14, [ callback(:callback, [ :string ], :void) ], :void"
179
- Generator::Function.new(:node => (@node / 'cdecl')[15]).to_s.should == "attach_function :func_15, [ callback(:callback, [ ], :void) ], :void"
180
- end
181
- end
182
-
183
- describe Generator::Structure do
184
- it_should_behave_like 'All specs'
185
- before :all do
186
- @node = generate_xml_wrap_from('structs')
187
- end
188
- it 'should properly generate the layout of a FFI::Struct class' do
189
- Generator::Structure.new(:node => (@node / 'class')[0]).to_s.should == <<EOC
190
- class TestStruct1 < FFI::Struct
191
- layout(
192
- :i, :int,
193
- :c, :char,
194
- :s, :string,
195
- :a, [:char, 5]
196
- )
197
- end
198
- EOC
199
-
200
- end
201
- it 'should properly generate the layout of a FFI::Struct containing pointer field' do
202
- Generator::Structure.new(:node => (@node / 'class')[1]).to_s.should == <<EOC
203
- class TestStruct2 < FFI::Struct
204
- layout(
205
- :ptr, :pointer
206
- )
207
- end
208
- EOC
209
- end
210
- it 'should properly generate the layout of a FFI::Struct containing array field' do
211
- Generator::Structure.new(:node => (@node / 'class')[2]).to_s.should == <<EOC
212
- class TestStruct3 < FFI::Struct
213
- layout(
214
- :c, [:char, 5]
215
- )
216
- end
217
- EOC
218
-
219
- end
220
- it 'should properly generate the layout of a FFI::Struct containing array field' do
221
- Generator::Structure.new(:node => (@node / 'class')[3]).to_s.should == <<EOC
222
- class TestStruct4 < FFI::Struct
223
- layout(
224
- :s, [TestStruct3, 5]
225
- )
226
- end
227
- EOC
228
-
229
- end
230
- end
231
-
232
- describe Generator::Union do
233
- it_should_behave_like 'All specs'
234
- before :all do
235
- @node = generate_xml_wrap_from('unions')
236
- end
237
- it 'should properly generate the layout of a FFI::Union class' do
238
- Generator::Union.new(:node => (@node / 'class')[0]).to_s.should == <<EOC
239
- class UnionT < FFI::Union
240
- layout(
241
- :c, :char,
242
- :f, :float
243
- )
244
- end
245
- EOC
246
- end
247
- end
248
-