dub 0.2.2 → 1.0.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.

Potentially problematic release.


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

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