dub 0.2.2 → 0.6.2

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.

Potentially problematic release.


This version of dub might be problematic. Click here for more details.

Files changed (266) hide show
  1. data/.gitignore +8 -0
  2. data/History.txt +32 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +48 -0
  5. data/Rakefile +58 -0
  6. data/dub.gemspec +197 -0
  7. data/lib/dub/argument.rb +275 -0
  8. data/lib/dub/entities_unescape.rb +16 -0
  9. data/lib/dub/function.rb +163 -0
  10. data/lib/dub/function_group.rb +72 -0
  11. data/lib/dub/generator.rb +15 -0
  12. data/lib/dub/group.rb +24 -0
  13. data/lib/dub/klass.rb +231 -0
  14. data/lib/dub/lua/class.cpp.erb +83 -0
  15. data/lib/dub/lua/class_gen.rb +97 -0
  16. data/lib/dub/lua/function.cpp.erb +18 -0
  17. data/lib/dub/lua/function_gen.rb +258 -0
  18. data/lib/dub/lua/group.cpp.erb +9 -0
  19. data/lib/dub/lua/lua_cpp_helper.h +141 -0
  20. data/lib/dub/lua/namespace.cpp.erb +40 -0
  21. data/lib/dub/lua/namespace_gen.rb +88 -0
  22. data/lib/dub/lua.rb +24 -0
  23. data/lib/dub/member_extraction.rb +92 -0
  24. data/lib/dub/namespace.rb +277 -0
  25. data/lib/dub/parser.rb +46 -0
  26. data/lib/dub/templates/lua_template.erb +21 -0
  27. data/lib/dub/version.rb +3 -0
  28. data/lib/dub.rb +23 -20
  29. data/test/argument_test.rb +547 -0
  30. data/test/fixtures/app/CMakeLists.txt +54 -0
  31. data/test/fixtures/app/Doxyfile +1600 -0
  32. data/test/fixtures/app/bindings/all_lua.cpp +299 -0
  33. data/test/fixtures/app/include/matrix.h +140 -0
  34. data/test/fixtures/app/make_lua_bindings.rb +13 -0
  35. data/test/fixtures/app/vendor/lua/CMakeLists.txt +25 -0
  36. data/test/fixtures/app/vendor/lua/COPYRIGHT +34 -0
  37. data/test/fixtures/app/vendor/lua/HISTORY +183 -0
  38. data/test/fixtures/app/vendor/lua/INSTALL +99 -0
  39. data/test/fixtures/app/vendor/lua/Makefile +183 -0
  40. data/test/fixtures/app/vendor/lua/README +37 -0
  41. data/test/fixtures/app/vendor/lua/lapi.c +1080 -0
  42. data/test/fixtures/app/vendor/lua/lapi.h +16 -0
  43. data/test/fixtures/app/vendor/lua/lauxlib.c +653 -0
  44. data/test/fixtures/app/vendor/lua/lauxlib.h +174 -0
  45. data/test/fixtures/app/vendor/lua/lbaselib.c +643 -0
  46. data/test/fixtures/app/vendor/lua/lcode.c +839 -0
  47. data/test/fixtures/app/vendor/lua/lcode.h +76 -0
  48. data/test/fixtures/app/vendor/lua/ldblib.c +397 -0
  49. data/test/fixtures/app/vendor/lua/ldebug.c +622 -0
  50. data/test/fixtures/app/vendor/lua/ldebug.h +33 -0
  51. data/test/fixtures/app/vendor/lua/ldo.c +516 -0
  52. data/test/fixtures/app/vendor/lua/ldo.h +57 -0
  53. data/test/fixtures/app/vendor/lua/ldump.c +164 -0
  54. data/test/fixtures/app/vendor/lua/lfunc.c +174 -0
  55. data/test/fixtures/app/vendor/lua/lfunc.h +34 -0
  56. data/test/fixtures/app/vendor/lua/lgc.c +711 -0
  57. data/test/fixtures/app/vendor/lua/lgc.h +110 -0
  58. data/test/fixtures/app/vendor/lua/liblua.a +0 -0
  59. data/test/fixtures/app/vendor/lua/linit.c +38 -0
  60. data/test/fixtures/app/vendor/lua/liolib.c +532 -0
  61. data/test/fixtures/app/vendor/lua/llex.c +461 -0
  62. data/test/fixtures/app/vendor/lua/llex.h +81 -0
  63. data/test/fixtures/app/vendor/lua/llimits.h +128 -0
  64. data/test/fixtures/app/vendor/lua/lmathlib.c +263 -0
  65. data/test/fixtures/app/vendor/lua/lmem.c +86 -0
  66. data/test/fixtures/app/vendor/lua/lmem.h +49 -0
  67. data/test/fixtures/app/vendor/lua/loadlib.c +664 -0
  68. data/test/fixtures/app/vendor/lua/lobject.c +214 -0
  69. data/test/fixtures/app/vendor/lua/lobject.h +381 -0
  70. data/test/fixtures/app/vendor/lua/lopcodes.c +102 -0
  71. data/test/fixtures/app/vendor/lua/lopcodes.h +268 -0
  72. data/test/fixtures/app/vendor/lua/loslib.c +244 -0
  73. data/test/fixtures/app/vendor/lua/lparser.c +1337 -0
  74. data/test/fixtures/app/vendor/lua/lparser.h +82 -0
  75. data/test/fixtures/app/vendor/lua/lstate.c +214 -0
  76. data/test/fixtures/app/vendor/lua/lstate.h +168 -0
  77. data/test/fixtures/app/vendor/lua/lstring.c +111 -0
  78. data/test/fixtures/app/vendor/lua/lstring.h +31 -0
  79. data/test/fixtures/app/vendor/lua/lstrlib.c +868 -0
  80. data/test/fixtures/app/vendor/lua/ltable.c +588 -0
  81. data/test/fixtures/app/vendor/lua/ltable.h +40 -0
  82. data/test/fixtures/app/vendor/lua/ltablib.c +278 -0
  83. data/test/fixtures/app/vendor/lua/ltm.c +75 -0
  84. data/test/fixtures/app/vendor/lua/ltm.h +54 -0
  85. data/test/fixtures/app/vendor/lua/lua.c +695 -0
  86. data/test/fixtures/app/vendor/lua/lua.h +385 -0
  87. data/test/fixtures/app/vendor/lua/lua_dub_helper.h +77 -0
  88. data/test/fixtures/app/vendor/lua/luac +0 -0
  89. data/test/fixtures/app/vendor/lua/luac.c +200 -0
  90. data/test/fixtures/app/vendor/lua/luaconf.h +762 -0
  91. data/test/fixtures/app/vendor/lua/lualib.h +53 -0
  92. data/test/fixtures/app/vendor/lua/lundump.c +223 -0
  93. data/test/fixtures/app/vendor/lua/lundump.h +36 -0
  94. data/test/fixtures/app/vendor/lua/lvm.c +765 -0
  95. data/test/fixtures/app/vendor/lua/lvm.h +36 -0
  96. data/test/fixtures/app/vendor/lua/lzio.c +82 -0
  97. data/test/fixtures/app/vendor/lua/lzio.h +67 -0
  98. data/test/fixtures/app/vendor/lua/matrix.h +102 -0
  99. data/test/fixtures/app/vendor/lua/print.c +227 -0
  100. data/test/fixtures/app/vendor/lua/test/README +26 -0
  101. data/test/fixtures/app/vendor/lua/test/bisect.lua +27 -0
  102. data/test/fixtures/app/vendor/lua/test/cf.lua +16 -0
  103. data/test/fixtures/app/vendor/lua/test/echo.lua +5 -0
  104. data/test/fixtures/app/vendor/lua/test/env.lua +7 -0
  105. data/test/fixtures/app/vendor/lua/test/factorial.lua +32 -0
  106. data/test/fixtures/app/vendor/lua/test/fib.lua +40 -0
  107. data/test/fixtures/app/vendor/lua/test/fibfor.lua +13 -0
  108. data/test/fixtures/app/vendor/lua/test/globals.lua +13 -0
  109. data/test/fixtures/app/vendor/lua/test/hello.lua +3 -0
  110. data/test/fixtures/app/vendor/lua/test/life.lua +111 -0
  111. data/test/fixtures/app/vendor/lua/test/luac.lua +7 -0
  112. data/test/fixtures/app/vendor/lua/test/printf.lua +7 -0
  113. data/test/fixtures/app/vendor/lua/test/readonly.lua +12 -0
  114. data/test/fixtures/app/vendor/lua/test/sieve.lua +29 -0
  115. data/test/fixtures/app/vendor/lua/test/sort.lua +66 -0
  116. data/test/fixtures/app/vendor/lua/test/table.lua +12 -0
  117. data/test/fixtures/app/vendor/lua/test/trace-calls.lua +32 -0
  118. data/test/fixtures/app/vendor/lua/test/trace-globals.lua +38 -0
  119. data/test/fixtures/app/vendor/lua/test/xd.lua +14 -0
  120. data/test/fixtures/app/xml/classdub_1_1_matrix.xml +281 -0
  121. data/test/fixtures/app/xml/classdub_1_1_t_mat.xml +233 -0
  122. data/test/fixtures/app/xml/combine.xslt +15 -0
  123. data/test/fixtures/app/xml/compound.xsd +814 -0
  124. data/test/fixtures/app/xml/dir_53661a2bdeb1d55e60581a7e15deb763.xml +12 -0
  125. data/test/fixtures/app/xml/index.xml +44 -0
  126. data/test/fixtures/app/xml/index.xsd +66 -0
  127. data/test/fixtures/app/xml/matrix_8h.xml +157 -0
  128. data/test/fixtures/app/xml/namespacedub.xml +41 -0
  129. data/test/fixtures/classcv_1_1_mat.xml +1996 -0
  130. data/test/fixtures/classcv_1_1_point__.xml +341 -0
  131. data/test/fixtures/classcv_1_1_scalar__.xml +269 -0
  132. data/test/fixtures/classcv_1_1_size__.xml +270 -0
  133. data/test/fixtures/dummy_class.cpp.erb +1 -0
  134. data/test/fixtures/dummy_function.cpp.erb +1 -0
  135. data/test/fixtures/group___magic_type.xml +406 -0
  136. data/test/fixtures/namespacecv.xml +12659 -0
  137. data/test/function_group_test.rb +24 -0
  138. data/test/function_test.rb +395 -0
  139. data/test/group_test.rb +155 -0
  140. data/test/helper.rb +34 -0
  141. data/test/klass_test.rb +387 -0
  142. data/test/lua_function_gen_test.rb +195 -0
  143. data/test/namespace_test.rb +220 -0
  144. data/test/parser_test.rb +36 -0
  145. metadata +211 -275
  146. checksums.yaml +0 -7
  147. data/lib/open_api_sdk/analytics.rb +0 -99
  148. data/lib/open_api_sdk/domains.rb +0 -353
  149. data/lib/open_api_sdk/dub.rb +0 -88
  150. data/lib/open_api_sdk/links.rb +0 -766
  151. data/lib/open_api_sdk/metatags.rb +0 -54
  152. data/lib/open_api_sdk/models/operations/bulkcreatelinks_response.rb +0 -60
  153. data/lib/open_api_sdk/models/operations/bulkupdatelinks_requestbody.rb +0 -27
  154. data/lib/open_api_sdk/models/operations/bulkupdatelinks_response.rb +0 -60
  155. data/lib/open_api_sdk/models/operations/color.rb +0 -24
  156. data/lib/open_api_sdk/models/operations/createdomain_requestbody.rb +0 -33
  157. data/lib/open_api_sdk/models/operations/createdomain_response.rb +0 -60
  158. data/lib/open_api_sdk/models/operations/createlink_requestbody.rb +0 -95
  159. data/lib/open_api_sdk/models/operations/createlink_response.rb +0 -60
  160. data/lib/open_api_sdk/models/operations/createtag_requestbody.rb +0 -32
  161. data/lib/open_api_sdk/models/operations/createtag_response.rb +0 -60
  162. data/lib/open_api_sdk/models/operations/data.rb +0 -83
  163. data/lib/open_api_sdk/models/operations/deletedomain_request.rb +0 -24
  164. data/lib/open_api_sdk/models/operations/deletedomain_response.rb +0 -60
  165. data/lib/open_api_sdk/models/operations/deletedomain_responsebody.rb +0 -24
  166. data/lib/open_api_sdk/models/operations/deletelink_request.rb +0 -24
  167. data/lib/open_api_sdk/models/operations/deletelink_response.rb +0 -60
  168. data/lib/open_api_sdk/models/operations/deletelink_responsebody.rb +0 -24
  169. data/lib/open_api_sdk/models/operations/event.rb +0 -21
  170. data/lib/open_api_sdk/models/operations/getlinkinfo_request.rb +0 -33
  171. data/lib/open_api_sdk/models/operations/getlinkinfo_response.rb +0 -60
  172. data/lib/open_api_sdk/models/operations/getlinks_request.rb +0 -51
  173. data/lib/open_api_sdk/models/operations/getlinks_response.rb +0 -60
  174. data/lib/open_api_sdk/models/operations/getlinkscount_request.rb +0 -48
  175. data/lib/open_api_sdk/models/operations/getlinkscount_response.rb +0 -60
  176. data/lib/open_api_sdk/models/operations/getmetatags_request.rb +0 -24
  177. data/lib/open_api_sdk/models/operations/getmetatags_response.rb +0 -33
  178. data/lib/open_api_sdk/models/operations/getmetatags_responsebody.rb +0 -30
  179. data/lib/open_api_sdk/models/operations/getqrcode_request.rb +0 -39
  180. data/lib/open_api_sdk/models/operations/getqrcode_response.rb +0 -60
  181. data/lib/open_api_sdk/models/operations/gettags_response.rb +0 -60
  182. data/lib/open_api_sdk/models/operations/getworkspace_request.rb +0 -24
  183. data/lib/open_api_sdk/models/operations/getworkspace_response.rb +0 -60
  184. data/lib/open_api_sdk/models/operations/groupby.rb +0 -28
  185. data/lib/open_api_sdk/models/operations/interval.rb +0 -25
  186. data/lib/open_api_sdk/models/operations/level.rb +0 -21
  187. data/lib/open_api_sdk/models/operations/listdomains_response.rb +0 -60
  188. data/lib/open_api_sdk/models/operations/paymentprocessor.rb +0 -20
  189. data/lib/open_api_sdk/models/operations/requestbody.rb +0 -95
  190. data/lib/open_api_sdk/models/operations/retrieveanalytics_request.rb +0 -81
  191. data/lib/open_api_sdk/models/operations/retrieveanalytics_response.rb +0 -60
  192. data/lib/open_api_sdk/models/operations/sort.rb +0 -20
  193. data/lib/open_api_sdk/models/operations/trackcustomer_requestbody.rb +0 -33
  194. data/lib/open_api_sdk/models/operations/trackcustomer_response.rb +0 -60
  195. data/lib/open_api_sdk/models/operations/trackcustomer_responsebody.rb +0 -33
  196. data/lib/open_api_sdk/models/operations/tracklead_requestbody.rb +0 -42
  197. data/lib/open_api_sdk/models/operations/tracklead_response.rb +0 -60
  198. data/lib/open_api_sdk/models/operations/tracklead_responsebody.rb +0 -42
  199. data/lib/open_api_sdk/models/operations/tracksale_requestbody.rb +0 -42
  200. data/lib/open_api_sdk/models/operations/tracksale_response.rb +0 -60
  201. data/lib/open_api_sdk/models/operations/tracksale_responsebody.rb +0 -42
  202. data/lib/open_api_sdk/models/operations/updatedomain_request.rb +0 -27
  203. data/lib/open_api_sdk/models/operations/updatedomain_requestbody.rb +0 -33
  204. data/lib/open_api_sdk/models/operations/updatedomain_response.rb +0 -60
  205. data/lib/open_api_sdk/models/operations/updatelink_request.rb +0 -27
  206. data/lib/open_api_sdk/models/operations/updatelink_requestbody.rb +0 -95
  207. data/lib/open_api_sdk/models/operations/updatelink_response.rb +0 -60
  208. data/lib/open_api_sdk/models/operations/updatetag_color.rb +0 -24
  209. data/lib/open_api_sdk/models/operations/updatetag_request.rb +0 -27
  210. data/lib/open_api_sdk/models/operations/updatetag_requestbody.rb +0 -32
  211. data/lib/open_api_sdk/models/operations/updatetag_response.rb +0 -60
  212. data/lib/open_api_sdk/models/operations/updateworkspace_request.rb +0 -27
  213. data/lib/open_api_sdk/models/operations/updateworkspace_requestbody.rb +0 -27
  214. data/lib/open_api_sdk/models/operations/updateworkspace_response.rb +0 -60
  215. data/lib/open_api_sdk/models/operations/upsertlink_requestbody.rb +0 -95
  216. data/lib/open_api_sdk/models/operations/upsertlink_response.rb +0 -60
  217. data/lib/open_api_sdk/models/operations.rb +0 -74
  218. data/lib/open_api_sdk/models/shared/badrequest.rb +0 -24
  219. data/lib/open_api_sdk/models/shared/code.rb +0 -18
  220. data/lib/open_api_sdk/models/shared/color.rb +0 -24
  221. data/lib/open_api_sdk/models/shared/conflict.rb +0 -24
  222. data/lib/open_api_sdk/models/shared/conflict_code.rb +0 -18
  223. data/lib/open_api_sdk/models/shared/conflict_error.rb +0 -30
  224. data/lib/open_api_sdk/models/shared/countrycode.rb +0 -267
  225. data/lib/open_api_sdk/models/shared/domains.rb +0 -27
  226. data/lib/open_api_sdk/models/shared/domainschema.rb +0 -48
  227. data/lib/open_api_sdk/models/shared/error.rb +0 -30
  228. data/lib/open_api_sdk/models/shared/forbidden.rb +0 -24
  229. data/lib/open_api_sdk/models/shared/forbidden_code.rb +0 -18
  230. data/lib/open_api_sdk/models/shared/forbidden_error.rb +0 -30
  231. data/lib/open_api_sdk/models/shared/geo.rb +0 -771
  232. data/lib/open_api_sdk/models/shared/internalservererror.rb +0 -24
  233. data/lib/open_api_sdk/models/shared/internalservererror_code.rb +0 -18
  234. data/lib/open_api_sdk/models/shared/internalservererror_error.rb +0 -30
  235. data/lib/open_api_sdk/models/shared/inviteexpired.rb +0 -24
  236. data/lib/open_api_sdk/models/shared/inviteexpired_code.rb +0 -18
  237. data/lib/open_api_sdk/models/shared/inviteexpired_error.rb +0 -30
  238. data/lib/open_api_sdk/models/shared/linkgeotargeting.rb +0 -771
  239. data/lib/open_api_sdk/models/shared/linkschema.rb +0 -142
  240. data/lib/open_api_sdk/models/shared/notfound.rb +0 -24
  241. data/lib/open_api_sdk/models/shared/notfound_code.rb +0 -18
  242. data/lib/open_api_sdk/models/shared/notfound_error.rb +0 -30
  243. data/lib/open_api_sdk/models/shared/plan.rb +0 -24
  244. data/lib/open_api_sdk/models/shared/ratelimitexceeded.rb +0 -24
  245. data/lib/open_api_sdk/models/shared/ratelimitexceeded_code.rb +0 -18
  246. data/lib/open_api_sdk/models/shared/ratelimitexceeded_error.rb +0 -30
  247. data/lib/open_api_sdk/models/shared/role.rb +0 -19
  248. data/lib/open_api_sdk/models/shared/security.rb +0 -24
  249. data/lib/open_api_sdk/models/shared/tagschema.rb +0 -30
  250. data/lib/open_api_sdk/models/shared/unauthorized.rb +0 -24
  251. data/lib/open_api_sdk/models/shared/unauthorized_code.rb +0 -18
  252. data/lib/open_api_sdk/models/shared/unauthorized_error.rb +0 -30
  253. data/lib/open_api_sdk/models/shared/unprocessableentity.rb +0 -24
  254. data/lib/open_api_sdk/models/shared/unprocessableentity_code.rb +0 -18
  255. data/lib/open_api_sdk/models/shared/unprocessableentity_error.rb +0 -30
  256. data/lib/open_api_sdk/models/shared/users.rb +0 -24
  257. data/lib/open_api_sdk/models/shared/workspaceschema.rb +0 -81
  258. data/lib/open_api_sdk/models/shared.rb +0 -49
  259. data/lib/open_api_sdk/qr_codes.rb +0 -97
  260. data/lib/open_api_sdk/sdkconfiguration.rb +0 -52
  261. data/lib/open_api_sdk/tags.rb +0 -272
  262. data/lib/open_api_sdk/track.rb +0 -276
  263. data/lib/open_api_sdk/utils/metadata_fields.rb +0 -150
  264. data/lib/open_api_sdk/utils/t.rb +0 -59
  265. data/lib/open_api_sdk/utils/utils.rb +0 -772
  266. data/lib/open_api_sdk/workspaces.rb +0 -192
@@ -0,0 +1,24 @@
1
+ require 'helper'
2
+ require 'dub/lua'
3
+
4
+ class FunctionGroupTest < Test::Unit::TestCase
5
+
6
+ context 'A FunctionGroup' do
7
+ should 'keep its members sorted by overloaded_index' do
8
+ @group = namespacecv_xml[:cv][:divide]
9
+ assert_equal [1, 2, 3, 4], @group.map {|f| f.overloaded_index}
10
+ end
11
+
12
+ should 'not use top__ in chooser if all methods have same arg count' do
13
+ @method = namespacecv_xml[:cv][:Mat][:diag]
14
+ Dub::Lua.bind(@method)
15
+ assert_no_match %r{top__}, Dub::Lua.function_generator.chooser_body(@method)
16
+ end
17
+
18
+ should 'use top__ in chooser if some methods have different arg count' do
19
+ @method = namespacecv_xml[:cv][:Mat][:Mat]
20
+ Dub::Lua.bind(@method)
21
+ assert_match %r{top__}, Dub::Lua.function_generator.chooser_body(@method)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,395 @@
1
+ require 'helper'
2
+ require 'dub/lua'
3
+
4
+ class FunctionTest < Test::Unit::TestCase
5
+
6
+ context 'A Function' do
7
+ setup do
8
+ # namespacecv_xml = Dub.parse(fixture('namespacecv.xml'))
9
+ @function = namespacecv_xml[:cv][:resize]
10
+ end
11
+
12
+ should 'return a list of Arguments with arguments' do
13
+ assert_kind_of Array, @function.arguments
14
+ assert_kind_of Dub::Argument, @function.arguments.first
15
+ end
16
+
17
+ should 'return name with name' do
18
+ assert_equal 'resize', @function.name
19
+ end
20
+
21
+ should 'have namespace prefix' do
22
+ assert_equal 'cv', @function.prefix
23
+ end
24
+
25
+ should 'use prefix in id_name' do
26
+ assert_equal 'cv.resize', @function.id_name
27
+ end
28
+
29
+ should 'display original_signature' do
30
+ assert_equal 'CV_EXPORTS void cv::resize(const Mat &src, Mat &dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR)', @function.original_signature
31
+ end
32
+
33
+ should 'return file and line on source' do
34
+ assert_equal 'include/opencv/cv.hpp:343', @function.source
35
+ end
36
+
37
+ should 'know if it has default arguments' do
38
+ assert @function.has_default_arguments?
39
+ end
40
+
41
+ context 'without default arguments' do
42
+ setup do
43
+ @function = namespacecv_xml[:cv][:getRotationMatrix2D]
44
+ end
45
+
46
+ should 'know if it has default arguments' do
47
+ assert !@function.has_default_arguments?
48
+ end
49
+ end
50
+
51
+ context 'without a return value' do
52
+ should 'know the type of a returned value' do
53
+ assert_equal nil, @function.return_value
54
+ end
55
+ end
56
+
57
+ context 'with a return value' do
58
+ setup do
59
+ @function = namespacecv_xml[:cv][:getRotationMatrix2D]
60
+ end
61
+
62
+ should 'return an Argument on return_value' do
63
+ assert_kind_of Dub::Argument, @function.return_value
64
+ end
65
+
66
+ should 'know the type of a returned value' do
67
+ assert_equal 'Mat', @function.return_value.type
68
+ end
69
+
70
+ should 'not use a pointer for create_type' do
71
+ assert_equal 'Mat ', @function.return_value.create_type
72
+ end
73
+ end
74
+
75
+ context 'with a pointer to native type return value' do
76
+ setup do
77
+ @function = namespacecv_xml[:cv][:Mat][:ptr].first
78
+ end
79
+
80
+ should 'know the type of the returned value' do
81
+ assert_equal 'uchar *', @function.return_value.create_type
82
+ end
83
+
84
+ should 'know that the type is a native pointer' do
85
+ assert @function.return_value.is_pointer?
86
+ end
87
+ end
88
+
89
+ context 'with a reference return value' do
90
+ setup do
91
+ @function = namespacecv_xml[:cv][:Mat][:adjustROI]
92
+ end
93
+
94
+ should 'strip ref in the create type' do
95
+ assert_equal 'Mat ', @function.return_value.create_type
96
+ end
97
+
98
+ should 'know that the type is a not native pointer' do
99
+ assert !@function.return_value.is_pointer?
100
+ end
101
+ end
102
+
103
+ context 'with a void pointer return value' do
104
+ setup do
105
+ @function = namespacecv_xml[:cv][:fastMalloc]
106
+ #Dub::Lua.bind(@function)
107
+ end
108
+
109
+ should 'strip ref in the create type' do
110
+ assert_equal 'void *', @function.return_value.create_type
111
+ end
112
+
113
+ should 'be ignored by generator' do
114
+ assert Dub::Lua.namespace_generator.ignore_member?(@function)
115
+ end
116
+ end
117
+
118
+ context 'with a class return value' do
119
+ setup do
120
+ @function = namespacecv_xml[:cv][:Mat][:row]
121
+ end
122
+
123
+ should 'return new objects in constructors' do
124
+ Dub::Lua.bind(@function)
125
+ assert_match %r{lua_pushclass<Mat>.*"cv.Mat"}, @function.to_s
126
+ end
127
+ end
128
+ end
129
+
130
+ context 'A vararg method' do
131
+ setup do
132
+ @function = namespacecv_xml[:cv][:format]
133
+ end
134
+
135
+ should 'know it is a vararg' do
136
+ assert @function.vararg?
137
+ end
138
+
139
+ should 'be ignored by generator' do
140
+ assert Dub::Lua.namespace_generator.ignore_member?(@function)
141
+ end
142
+ end
143
+
144
+ context 'A constructor with void pointer argument' do
145
+ setup do
146
+ @function = namespacecv_xml[:cv][:Mat].constructor[6]
147
+ end
148
+
149
+ should 'be ignored by generator' do
150
+ assert Dub::Lua.class_generator.ignore_member?(@function)
151
+ end
152
+
153
+ should 'not have array arguments' do
154
+ assert !namespacecv_xml[:cv][:Mat].constructor[2].has_array_arguments?
155
+ end
156
+
157
+ should 'not be listed in group members if bound' do
158
+ klass = namespacecv_xml[:cv][:Mat]
159
+ Dub::Lua.bind(klass)
160
+ assert !klass.constructor.members.include?(@function)
161
+ end
162
+
163
+ should 'be removed from group list on to_s' do
164
+ klass = namespacecv_xml[:cv][:Mat]
165
+ Dub::Lua.bind(klass)
166
+ assert_no_match %r{void\s*\*_data,\s*size_t}, klass.constructor.to_s
167
+ end
168
+ end
169
+
170
+ context 'A function with void pointer argument' do
171
+ setup do
172
+ @function = namespacecv_xml[:cv][:fastFree]
173
+ end
174
+
175
+ should 'be ignored by generator' do
176
+ assert Dub::Lua.namespace_generator.ignore_member?(@function)
177
+ end
178
+
179
+ should 'be removed from members list' do
180
+ Dub::Lua.bind(namespacecv_xml[:cv])
181
+ assert !namespacecv_xml[:cv].members.include?(@function)
182
+ end
183
+ end
184
+
185
+ context 'A function with list arguments' do
186
+ setup do
187
+ @namespace = namespacecv_xml[:cv]
188
+ Dub::Lua.bind(@namespace)
189
+ @group = @namespace[:calcHist]
190
+ @function = @group[1]
191
+ end
192
+
193
+ # should 'mark argument as list on arg_is_list' do
194
+ # @function.arg_is_list(0, 1)
195
+ # assert @function.arguments[0].is_list?
196
+ # assert !@function.arguments[0].is_list_count?
197
+ # assert @function.arguments[1].is_list_count?
198
+ # end
199
+
200
+ should 'respond true to has_class_pointer_arguments' do
201
+ assert @function.has_class_pointer_arguments?
202
+ end
203
+
204
+ should 'be removed from group list' do
205
+ assert_nil @group.members
206
+ end
207
+
208
+ should 'remove group from member declaration' do
209
+ assert_no_match %r{cv_calcHist}, @namespace.gen.functions_registration(@namespace)
210
+ end
211
+
212
+ should 'not be instanciated' do
213
+ assert_equal '', @group.to_s
214
+ end
215
+ end
216
+
217
+ context 'A method without arguments' do
218
+ setup do
219
+ @function = namespacecv_xml[:cv][:getCPUTickCount]
220
+ end
221
+
222
+ should 'parse return value' do
223
+ assert_equal 'int64', @function.return_value.type
224
+ end
225
+
226
+ should 'produce a one liner to call function' do
227
+ Dub::Lua.bind(@function)
228
+ assert_match %r{int64\s*retval__\s*=\s*getCPUTickCount\(\);}, @function.to_s
229
+ end
230
+ end
231
+
232
+ context 'A method' do
233
+ setup do
234
+ # namespacecv_xml = Dub.parse(fixture('app/xml/namespacedub.xml'))
235
+ @method = namespacedub_xml[:dub][:Matrix][:size]
236
+ end
237
+
238
+ should 'know that it belongs to a class' do
239
+ assert @method.member_method?
240
+ end
241
+
242
+ should 'know if it is a constructor' do
243
+ assert !@method.constructor?
244
+ end
245
+
246
+ should 'return klass on klass' do
247
+ assert_kind_of Dub::Klass, @method.klass
248
+ end
249
+
250
+ should 'use class id_name in id_name' do
251
+ assert_equal 'dub.Matrix.size', @method.id_name
252
+ end
253
+ end
254
+
255
+ context 'A constructor' do
256
+ setup do
257
+ @method = namespacedub_xml[:dub][:Matrix][:Matrix].first
258
+ end
259
+
260
+ should 'know that it belongs to a class' do
261
+ assert @method.member_method?
262
+ end
263
+
264
+ should 'know if it is a constructor' do
265
+ assert @method.constructor?
266
+ end
267
+
268
+ should 'return class name on return_value create_type' do
269
+ assert_equal 'Matrix', @method.return_value.type
270
+ end
271
+
272
+ should 'return class name pointer on return_value create_type' do
273
+ assert_equal 'Matrix *', @method.return_value.create_type
274
+ end
275
+
276
+ context 'from a typedef bound to a generator' do
277
+ setup do
278
+ @method = namespacecv_xml[:cv][:Size].constructor.first
279
+ Dub::Lua.bind(@method)
280
+ end
281
+
282
+ should 'know that it is a constructor' do
283
+ assert @method.constructor?
284
+ end
285
+
286
+ should 'push new userdata on new' do
287
+ assert_match %r{lua_pushclass<Size>.*"cv.Size".*return 1}m, @method.generator.return_value(@method)
288
+ end
289
+ end
290
+ end
291
+
292
+ context 'A static method in a class' do
293
+ setup do
294
+ @method = namespacedub_xml[:dub][:Matrix][:MakeMatrix]
295
+ end
296
+
297
+ should 'know it is static' do
298
+ assert @method.static?
299
+ end
300
+
301
+ should 'append class in call_name' do
302
+ assert_equal 'Matrix::MakeMatrix', @method.call_name
303
+ end
304
+
305
+ should 'parse return type' do
306
+ assert_equal 'Matrix', @method.return_value.type
307
+ end
308
+
309
+ context 'bound to a generator' do
310
+ setup do
311
+ Dub::Lua.bind(@method)
312
+ end
313
+
314
+ should 'not try to find self' do
315
+ assert_no_match %r{self__}, @method.to_s
316
+ end
317
+
318
+ should 'insert the function into the namespace' do
319
+ @class = namespacedub_xml[:dub][:Matrix]
320
+ Dub::Lua.bind(@class)
321
+ result = @class.to_s
322
+ member_methods_registration = result[/Matrix_member_methods([^;]*);/,1]
323
+ namespace_methods_registration = result[/Matrix_namespace_methods([^;]*);/,1]
324
+ assert_no_match %r{Matrix_MakeMatrix}, member_methods_registration
325
+ assert_match %r{Matrix_MakeMatrix.*Matrix_MakeMatrix}, namespace_methods_registration
326
+ end
327
+
328
+ should 'use class name in call' do
329
+ assert_match %r{Matrix::MakeMatrix\(}, @method.gen.call_string(@method)
330
+ end
331
+ end
332
+ end
333
+
334
+ # This is something like template<typename T2> foo() inside a templated class
335
+ context 'A template method' do
336
+ setup do
337
+ @class = namespacecv_xml[:cv][:Scalar]
338
+ @method = @class.template_method(:convertTo)
339
+ end
340
+
341
+ should 'know it is a template' do
342
+ assert @method.template?
343
+ end
344
+
345
+ context 'bound to a generator' do
346
+ setup do
347
+ Dub::Lua.bind(@class)
348
+ end
349
+
350
+ should 'be ignored in class members' do
351
+ assert !@class.members.include?(@method)
352
+ end
353
+ end
354
+ end
355
+
356
+ context 'A method in a class defined from a template' do
357
+ setup do
358
+ @class = namespacecv_xml[:cv][:Scalar]
359
+ @method = @class[:all]
360
+ end
361
+
362
+ should 'resolve its arguments' do
363
+ assert_equal 'double', @method.arguments[0].type
364
+ assert_equal 'Scalar', @method.return_value.type
365
+ end
366
+
367
+ should 'not be seen as a template' do
368
+ assert !@method.template?
369
+ end
370
+
371
+ should 'not be seen as having complex types' do
372
+ assert !@method.has_complex_arguments?
373
+ end
374
+
375
+ context 'bound to a generator' do
376
+ setup do
377
+ Dub::Lua.bind(@class)
378
+ end
379
+
380
+ should 'not be ignored in class members' do
381
+ assert @class.members.include?(@method)
382
+ end
383
+ end
384
+ end
385
+
386
+ context 'A method in a class with templated arguments' do
387
+ setup do
388
+ @method = namespacedub_xml[:dub][:Matrix][:mul]
389
+ end
390
+
391
+ should 'respond true to has_complex_arguments' do
392
+ assert @method.has_complex_arguments?
393
+ end
394
+ end
395
+ end
@@ -0,0 +1,155 @@
1
+ require 'helper'
2
+ require 'dub/lua'
3
+
4
+ class GroupTest < Test::Unit::TestCase
5
+ context 'A Namespace' do
6
+ setup do
7
+ # namespacecv_xml = Dub.parse(fixture('namespacecv.xml'))
8
+ @namespace = namespacecv_xml[:cv]
9
+ end
10
+
11
+ should 'find a function with functions method' do
12
+ assert_kind_of Dub::Function, @namespace.function(:resize)
13
+ end
14
+
15
+ should 'find a function with array index' do
16
+ assert_kind_of Dub::Function, @namespace[:resize]
17
+ end
18
+
19
+ should 'respond to name' do
20
+ assert_equal 'cv', @namespace.name
21
+ end
22
+
23
+ should 'respond to lib_name' do
24
+ # nested namespace could be cv_more
25
+ assert_equal 'cv', @namespace.lib_name
26
+ end
27
+
28
+ should 'respond to id_name' do
29
+ # nested namespace could be cv.more
30
+ assert_equal 'cv', @namespace.id_name
31
+ end
32
+
33
+ should 'return header name on header' do
34
+ assert_equal 'cv.hpp', @namespace.header
35
+ end
36
+
37
+ should 'return defined header if changed' do
38
+ namespace = Dub.parse(fixture('namespacecv.xml'))[:cv]
39
+ namespace.header = 'opencv/cv.h'
40
+ assert_equal 'opencv/cv.h', namespace.header
41
+ end
42
+
43
+ context 'when bound' do
44
+ setup do
45
+ @generator = Dub::Lua.namespace_generator
46
+ end
47
+
48
+ should 'contain generator' do
49
+ res = Dub::Lua.bind(@namespace)
50
+ assert_equal res, @namespace
51
+ assert_equal @generator, @namespace.gen
52
+ end
53
+
54
+ end
55
+
56
+ context 'with overloaded functions' do
57
+ setup do
58
+ @function = namespacecv_xml[:cv][:divide]
59
+ end
60
+
61
+ should 'find a Dub::FunctionGroup' do
62
+ assert_kind_of Dub::FunctionGroup, @function
63
+ end
64
+
65
+ should 'find a group of functions' do
66
+ assert_kind_of Dub::Function, @function[0]
67
+ assert_kind_of Dub::Function, @function[1]
68
+ end
69
+
70
+ should 'group functions by name' do
71
+ assert_equal 'divide', @function[0].name
72
+ assert_equal 'divide', @function[1].name
73
+ end
74
+
75
+ should 'assign an overloaded_index to grouped functions' do
76
+ assert_equal 1, @function[0].overloaded_index
77
+ assert_equal 2, @function[1].overloaded_index
78
+ end
79
+ end
80
+ end
81
+
82
+ context 'A namespace with class definitions' do
83
+ setup do
84
+ @namespace = namespacedub_xml[:dub]
85
+ end
86
+
87
+ should 'find classes by array index' do
88
+ assert_kind_of Dub::Klass, @namespace[:Matrix]
89
+ end
90
+
91
+ should 'find classes with klass' do
92
+ assert_kind_of Dub::Klass, @namespace.klass('Matrix')
93
+ end
94
+
95
+ should 'return a list of classes with classes' do
96
+ assert_kind_of Array, @namespace.classes
97
+ assert_kind_of Dub::Klass, @namespace.classes.first
98
+ end
99
+ end
100
+
101
+ context 'A namespace with template class definitions' do
102
+ setup do
103
+ @namespace = namespacedub_xml[:dub]
104
+ end
105
+
106
+ should 'ignore template classes in class list' do
107
+ assert !@namespace.classes.map{|m| m.name}.include?("TMat")
108
+ end
109
+
110
+ should 'return template class with template_class' do
111
+ assert_kind_of Dub::Klass, @namespace.template_class('TMat')
112
+ end
113
+
114
+ should 'build a full classes for template typedefs' do
115
+ assert_kind_of Dub::Klass, @namespace.klass(:FloatMat)
116
+ end
117
+
118
+ context 'bound to a generator' do
119
+ setup do
120
+ Dub::Lua.bind(@namespace)
121
+ end
122
+
123
+ should 'generate a valid class' do
124
+ # TODO: rerun all tests for lua class generation
125
+ assert_match %r{luaL_register\(L,\s*"dub".*FMatrix}, @namespace[:FloatMat].to_s
126
+ end
127
+ end
128
+ end
129
+
130
+ context 'A namespace with enums' do
131
+ setup do
132
+ @namespace = namespacecv_xml[:cv]
133
+ end
134
+
135
+ should 'respond true to has_enums' do
136
+ assert @namespace.has_constants?
137
+ end
138
+
139
+ should 'produce namespaced declarations' do
140
+ assert_match %r{\{"INTER_LINEAR"\s*,\s*cv::INTER_LINEAR\}}, Dub::Lua.namespace_generator.constants_registration(@namespace)
141
+ end
142
+
143
+ context 'bound to a generator' do
144
+ setup do
145
+ Dub::Lua.bind(@namespace)
146
+ end
147
+
148
+ should 'produce enums registration' do
149
+ result = @namespace.to_s
150
+ assert_match %r{\{"INTER_LINEAR"\s*,\s*cv::INTER_LINEAR\}}, result
151
+ assert_match %r{register_constants\(L,\s*"cv",\s*cv_namespace_constants\)}, result
152
+ end
153
+ end
154
+ end
155
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,34 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+ require 'dub'
8
+
9
+ class Test::Unit::TestCase
10
+
11
+ def self.fixture(path)
12
+ File.join(File.dirname(__FILE__), 'fixtures', path)
13
+ end
14
+
15
+ @@namespacecv_xml = nil
16
+
17
+ Dub.logger.level = Logger::FATAL
18
+
19
+ def fixture(path)
20
+ self.class.fixture(path)
21
+ end
22
+
23
+ def namespacecv_xml
24
+ @@namespacecv_xml ||= Dub.parse(fixture('namespacecv.xml'))
25
+ end
26
+
27
+ def namespacedub_xml
28
+ @@namespacedub_xml ||= Dub.parse(fixture('app/xml/namespacedub.xml'))
29
+ end
30
+
31
+ def groupmagic_xml
32
+ @@groupmagic_xml ||= Dub.parse(fixture('group___magic_type.xml'))
33
+ end
34
+ end