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,581 @@
1
+ require 'helper'
2
+ require 'dub/lua'
3
+
4
+ class ArgumentTest < Test::Unit::TestCase
5
+ context 'An Argument' do
6
+ context 'parsing types' do
7
+ {
8
+ "CV_EXPORT const Foo" => ["CV_EXPORT ", "const ", "Foo", "", nil, ""],
9
+ "CV_EXPORT const Foo<blah, blah>" => ["CV_EXPORT ", "const ", "Foo", "", nil, ""],
10
+ "CV_EXPORT Foo" => ["CV_EXPORT ", "" , "Foo", "", nil, ""],
11
+ "const Foo" => ["const " , "" , "Foo", "", nil, ""],
12
+ "Foo" => ["" , "" , "Foo", "", nil, ""],
13
+ "CV_EXPORT const Foo &" => ["CV_EXPORT ", "const ", "Foo", "", nil, " &"],
14
+ "CV_EXPORT const Foo&" => ["CV_EXPORT ", "const ", "Foo", "", nil, "&"],
15
+ "CV_EXPORT Foo &" => ["CV_EXPORT ", "" , "Foo", "", nil, " &"],
16
+ "const Foo &" => ["const " , "" , "Foo", "", nil, " &"],
17
+ "Foo &" => ["" , "" , "Foo", "", nil, " &"],
18
+ "CV_EXPORT const Foo *" => ["CV_EXPORT ", "const ", "Foo", "", nil, " *"],
19
+ "CV_EXPORT const Foo*" => ["CV_EXPORT ", "const ", "Foo", "", nil, "*"],
20
+ "CV_EXPORT Foo *" => ["CV_EXPORT ", "" , "Foo", "", nil, " *"],
21
+ "const Foo *" => ["const " , "" , "Foo", "", nil, " *"],
22
+ "Foo *" => ["" , "" , "Foo", "", nil, " *"],
23
+ "void *" => ["" , "" , "void","", nil, " *"],
24
+ "..." => ["" , "" , "...", "", nil, ""],
25
+
26
+ "CV_EXPORT const Foo < blah, blah >" => ["CV_EXPORT ", "const ", "Foo", " < blah, blah >", " blah, blah ", ""],
27
+ "CV_EXPORT const Foo<blah, blah>" => ["CV_EXPORT ", "const ", "Foo", "<blah, blah>" , "blah, blah" , ""],
28
+ "CV_EXPORT Foo < blah, blah >" => ["CV_EXPORT ", "" , "Foo", " < blah, blah >", " blah, blah ", ""],
29
+ "const Foo < blah, blah >" => ["const " , "" , "Foo", " < blah, blah >", " blah, blah ", ""],
30
+ "CV_EXPORT const Foo < blah, blah > &" => ["CV_EXPORT ", "const ", "Foo", " < blah, blah >", " blah, blah ", " &"],
31
+ "CV_EXPORT const Foo<blah, blah> &" => ["CV_EXPORT ", "const ", "Foo", "<blah, blah>" , "blah, blah" , " &"],
32
+ "CV_EXPORT Foo < blah, blah > &" => ["CV_EXPORT ", "" , "Foo", " < blah, blah >", " blah, blah ", " &"],
33
+ "const Foo < blah, blah > &" => ["const " , "" , "Foo", " < blah, blah >", " blah, blah ", " &"],
34
+ "Foo < blah, blah > &" => ["" , "" , "Foo", " < blah, blah >", " blah, blah ", " &"],
35
+ "CV_EXPORT const Foo < blah, blah > *" => ["CV_EXPORT ", "const ", "Foo", " < blah, blah >", " blah, blah ", " *"],
36
+ "CV_EXPORT const Foo<blah, blah> *" => ["CV_EXPORT ", "const ", "Foo", "<blah, blah>" , "blah, blah" , " *"],
37
+ "CV_EXPORT Foo < blah, blah > *" => ["CV_EXPORT ", "" , "Foo", " < blah, blah >", " blah, blah ", " *"],
38
+ "const Foo < blah, blah > *" => ["const " , "" , "Foo", " < blah, blah >", " blah, blah ", " *"],
39
+ "Foo < blah, blah > *" => ["" , "" , "Foo", " < blah, blah >", " blah, blah ", " *"],
40
+
41
+ "MatExpr_<MatExpr_Op2_<Mat, int, Mat, MatOp_Inv_<Mat> >, Mat>" =>
42
+ ["" ,"" ,"MatExpr_","<MatExpr_Op2_<Mat, int, Mat, MatOp_Inv_<Mat> >, Mat>","MatExpr_Op2_<Mat, int, Mat, MatOp_Inv_<Mat> >, Mat", ""],
43
+ }.each do |type, result|
44
+ should "parse #{type}" do
45
+ type =~ Dub::Argument::TYPE_REGEXP
46
+ assert_equal result, $~.to_a[1..-1]
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ context 'An const ref argument' do
53
+ setup do
54
+ # namespacecv_xml = Dub.parse(fixture('namespacecv.xml'))
55
+ @argument = namespacecv_xml[:cv][:resize].arguments.first
56
+ end
57
+
58
+ should 'return type with type' do
59
+ assert_equal 'Mat', @argument.type
60
+ end
61
+
62
+ should 'return name with name' do
63
+ assert_equal 'src', @argument.name
64
+ end
65
+
66
+ should 'know if argument is const' do
67
+ assert @argument.is_const?
68
+ end
69
+
70
+ should 'know if argument is passed by ref' do
71
+ assert @argument.is_ref?
72
+ end
73
+
74
+ should 'know that it is a pointer' do
75
+ assert !@argument.is_pointer?
76
+ end
77
+
78
+ should 'know if argument type is a native type' do
79
+ assert !@argument.is_native?
80
+ end
81
+
82
+ should 'create a pointer' do
83
+ assert_equal 'const Mat *', @argument.create_type
84
+ end
85
+
86
+ should 'keep a link to the function' do
87
+ assert_kind_of Dub::Function, @argument.function
88
+ end
89
+
90
+ should 'not return true on has_default if it does not have a default value' do
91
+ assert !@argument.has_default?
92
+ end
93
+
94
+ should 'return signature' do
95
+ assert_equal 'const Mat&', @argument.signature
96
+ end
97
+
98
+ should 'return signature on inspect' do
99
+ assert_equal 'const Mat&', @argument.inspect
100
+ end
101
+ end
102
+
103
+ context 'A double argument' do
104
+ setup do
105
+ # namespacecv_xml = Dub.parse(fixture('namespacecv.xml'))
106
+ @argument = namespacecv_xml[:cv][:resize].arguments[3]
107
+ end
108
+
109
+ should 'return type with type' do
110
+ assert_equal 'double', @argument.type
111
+ end
112
+
113
+ should 'return name with name' do
114
+ assert_equal 'fx', @argument.name
115
+ end
116
+
117
+ should 'know if argument is const' do
118
+ assert !@argument.is_const?
119
+ end
120
+
121
+ should 'know if argument is passed by ref' do
122
+ assert !@argument.is_ref?
123
+ end
124
+
125
+ should 'know that it is a pointer' do
126
+ assert !@argument.is_pointer?
127
+ end
128
+
129
+ should 'know if argument type is a native type' do
130
+ assert @argument.is_native?
131
+ end
132
+
133
+ should 'return double on create_type' do
134
+ assert_equal 'double ', @argument.create_type
135
+ end
136
+
137
+ should 'return signature' do
138
+ assert_equal 'double', @argument.signature
139
+ end
140
+ end
141
+
142
+ context 'An argument without name' do
143
+ setup do
144
+ @argument = namespacecv_xml[:cv][:fastMalloc].arguments.first
145
+ end
146
+
147
+ should 'choose a name from its position' do
148
+ assert_equal 'arg1', @argument.name
149
+ end
150
+ end
151
+
152
+ context 'A vararg argument' do
153
+ setup do
154
+ @argument = namespacecv_xml[:cv][:format].arguments[1]
155
+ end
156
+
157
+ should 'know it is a vararg' do
158
+ assert @argument.vararg?
159
+ end
160
+ end
161
+
162
+ context 'A bool argument' do
163
+ subject do
164
+ # namespacecv_xml = Dub.parse(fixture('namespacecv.xml'))
165
+ namespacedub_xml[:dub][:Matrix][:do_something].arguments[1]
166
+ end
167
+
168
+ should 'belong to the :boolean group' do
169
+ assert_equal :boolean, Dub::Argument.type_group(MockArgument.new('bool'))
170
+ end
171
+
172
+ should 'return type with type' do
173
+ assert_equal 'bool', subject.type
174
+ end
175
+
176
+ should 'return name with name' do
177
+ assert_equal 'fast', subject.name
178
+ end
179
+
180
+ should 'know if argument is const' do
181
+ assert !subject.is_const?
182
+ end
183
+
184
+ should 'know if argument is passed by ref' do
185
+ assert !subject.is_ref?
186
+ end
187
+
188
+ should 'know that it is a pointer' do
189
+ assert !subject.is_pointer?
190
+ end
191
+
192
+ should 'know if argument type is a native type' do
193
+ assert subject.is_native?
194
+ end
195
+
196
+ should 'return bool on create_type' do
197
+ assert_equal 'bool ', subject.create_type
198
+ end
199
+
200
+ should 'return signature' do
201
+ assert_equal 'bool', subject.signature
202
+ end
203
+
204
+ should 'return default value if it has one' do
205
+ assert_equal 'false', subject.default
206
+ end
207
+ end
208
+
209
+ context 'An argument with the same name as the function' do
210
+ setup do
211
+ @function = namespacecv_xml[:cv][:magnitude]
212
+ @argument = @function.arguments[2]
213
+ end
214
+
215
+ should 'be prefixed with arg_' do
216
+ assert_equal 'arg_magnitude', @argument.name
217
+ end
218
+ end
219
+
220
+ context 'An argument with a type from another namespace' do
221
+ setup do
222
+ @function = namespacedub_xml[:dub][:Matrix][:use_other_lib]
223
+ @argument = @function.arguments.first
224
+ end
225
+
226
+ should 'not nest own namespace in id_name' do
227
+ assert_equal "std.string", @argument.id_name
228
+ end
229
+
230
+ context 'bound to a generator' do
231
+ setup do
232
+ Dub::Lua.bind(@function)
233
+ end
234
+
235
+ should 'not nest own namespace in type' do
236
+ assert_match %r{luaL_checkudata\(L,\s*\d,\s*\"std\.string\"}, @function.to_s
237
+ end
238
+ end
239
+ end
240
+
241
+ context 'An argument with a default value' do
242
+ setup do
243
+ # namespacecv_xml = Dub.parse(fixture('namespacecv.xml'))
244
+ @argument = namespacecv_xml[:cv][:resize].arguments[5]
245
+ end
246
+
247
+ should 'return type with type' do
248
+ assert_equal 'int', @argument.type
249
+ end
250
+
251
+ should 'return name with name' do
252
+ assert_equal 'interpolation', @argument.name
253
+ end
254
+
255
+ should 'return default value' do
256
+ assert_equal 'cv::INTER_LINEAR', @argument.default
257
+ end
258
+
259
+ should 'know if it has a default value' do
260
+ assert @argument.has_default?
261
+ end
262
+
263
+ context 'that is an enum' do
264
+ setup do
265
+ @argument = namespacecv_xml[:cv][:Mat].constructor[6].arguments[4]
266
+ end
267
+
268
+ should 'use full namespace signature if default is an enum' do
269
+ assert_equal 'cv::Mat::AUTO_STEP', @argument.default
270
+ end
271
+ end
272
+
273
+ context 'that is a class' do
274
+ setup do
275
+ @method = namespacecv_xml[:cv][:accumulate]
276
+ @argument = @method.arguments[2]
277
+ end
278
+
279
+ should 'know that it has a default value' do
280
+ assert @argument.has_default?
281
+ end
282
+
283
+ should 'return default value' do
284
+ assert_equal 'Mat()', @argument.default
285
+ end
286
+
287
+ context 'bound to a generator' do
288
+ setup do
289
+ Dub::Lua.bind(@method)
290
+ end
291
+
292
+ should 'use if then else for default' do
293
+ assert_match %r{if\s*\(top__ < 3\) \{\s*accumulate\(\*src, \*dst\);}m,
294
+ @method.to_s
295
+ end
296
+ end
297
+ end
298
+ end
299
+
300
+ context 'A group of overloaded functions' do
301
+ setup do
302
+ @group = namespacecv_xml[:cv][:divide]
303
+ end
304
+
305
+ should 'be ordered into a decision tree' do
306
+ f1 = @group.detect {|f| f.arguments[0].type == 'Mat'}
307
+ f2 = @group.detect {|f| f.arguments[0].type == 'MatND'}
308
+ f3 = @group.detect {|f| f.arguments[0].type == 'double' && f.arguments[1].type == 'Mat'}
309
+ f4 = @group.detect {|f| f.arguments[0].type == 'double' && f.arguments[1].type == 'MatND'}
310
+ hash = {'cv.Mat'=>f1, 'cv.MatND'=>f2, :number=> {'cv.Mat' => f3, 'cv.MatND' => f4}}
311
+ assert_equal hash, Dub::Argument.decision_tree(@group)
312
+ end
313
+ end
314
+
315
+ context 'A group of overloaded member methods' do
316
+ setup do
317
+ @group = namespacecv_xml[:cv][:Mat][:zeros]
318
+ end
319
+
320
+ should 'be ordered into a decision tree' do
321
+ f1 = @group.detect {|f| f.arguments[0].type == 'Size'}
322
+ f2 = @group.detect {|f| f.arguments[0].type == 'int'}
323
+ hash = {'cv.Size'=>f1, :number=> f2}
324
+ assert_equal hash, Dub::Argument.decision_tree(@group)
325
+ end
326
+ end
327
+
328
+ class MockArgument
329
+ attr_reader :type, :full_type
330
+ def initialize(type, full_type=nil, is_pointer=false)
331
+ @type = type
332
+ @full_type = full_type || type
333
+ @is_pointer = is_pointer
334
+ end
335
+ def is_pointer?
336
+ @is_pointer
337
+ end
338
+ end
339
+ context 'An int argument' do
340
+ should 'belong to the :number group' do
341
+ assert_equal :number, Dub::Argument.type_group(MockArgument.new('int'))
342
+ end
343
+ end
344
+
345
+ context 'A float argument' do
346
+ should 'belong to the :number group' do
347
+ assert_equal :number, Dub::Argument.type_group(MockArgument.new('float'))
348
+ end
349
+ end
350
+
351
+ context 'A double argument' do
352
+ setup do
353
+ @argument = namespacecv_xml[:cv][:resize].arguments[3]
354
+ end
355
+
356
+ should 'belong to the :number group' do
357
+ assert_equal :number, Dub::Argument.type_group(MockArgument.new('double'))
358
+ end
359
+
360
+ should 'create double type' do
361
+ assert_equal 'double ', @argument.create_type
362
+ end
363
+
364
+ should 'pass by value in call' do
365
+ assert_equal 'fx', @argument.in_call_type
366
+ end
367
+ end
368
+
369
+ context 'An array of C types' do
370
+ setup do
371
+ @argument = namespacedub_xml[:dub][:FMatrix][:FunkyThing].arguments.first
372
+ end
373
+
374
+ should 'return array count on array_count' do
375
+ assert_equal '[7]', @argument.array_suffix
376
+ end
377
+
378
+ should 'be passed as is' do
379
+ assert_equal 'v', @argument.name
380
+ end
381
+
382
+ should 'respond true to has_array_argumetns in method' do
383
+ assert namespacedub_xml[:dub][:FMatrix][:FunkyThing].has_array_arguments?
384
+ end
385
+
386
+ context 'bound to a generator' do
387
+ setup do
388
+ @method = namespacedub_xml[:dub][:FMatrix][:FunkyThing]
389
+ Dub::Lua.bind(@method)
390
+ end
391
+
392
+ should 'append array when creating receiver' do
393
+ assert_match %r{double\s+v\[7\]}, @method.to_s
394
+ end
395
+ end
396
+ end
397
+
398
+ context 'A custom class by ref' do
399
+ setup do
400
+ @argument = namespacecv_xml[:cv][:resize].arguments[0]
401
+ end
402
+
403
+ should 'belong to its own group' do
404
+ assert_equal 'cv.Mat', Dub::Argument.type_group(@argument)
405
+ end
406
+
407
+ should 'create a const pointer' do
408
+ assert_equal 'const Mat *', @argument.create_type
409
+ end
410
+
411
+ should 'pass by ref in call' do
412
+ assert_equal '*src', @argument.in_call_type
413
+ end
414
+
415
+ should 'know if argument is const' do
416
+ assert @argument.is_const?
417
+ end
418
+
419
+ should 'know if argument is passed by ref' do
420
+ assert @argument.is_ref?
421
+ end
422
+
423
+ should 'know that it is a pointer' do
424
+ assert !@argument.is_pointer?
425
+ end
426
+ end
427
+
428
+ context 'A pointer to a class' do
429
+ setup do
430
+ @argument = namespacecv_xml[:cv][:calcHist][0].arguments[0]
431
+ end
432
+
433
+ should 'belong to its own group' do
434
+ assert_equal 'cv.Mat', Dub::Argument.type_group(@argument)
435
+ end
436
+
437
+ should 'return type with namespace on id_name' do
438
+ assert_equal 'cv.Mat', @argument.id_name
439
+ end
440
+
441
+ should 'pass by value in call' do
442
+ assert_equal 'images', @argument.in_call_type
443
+ end
444
+
445
+ should 'know if argument is const' do
446
+ assert @argument.is_const?
447
+ end
448
+
449
+ should 'know if argument is passed by ref' do
450
+ assert !@argument.is_ref?
451
+ end
452
+
453
+ should 'know that it is a pointer' do
454
+ assert @argument.is_pointer?
455
+ end
456
+
457
+ should 'create a pointer' do
458
+ assert_equal 'const Mat *', @argument.create_type
459
+ end
460
+ end
461
+
462
+ context 'A pointer to a native type' do
463
+ setup do
464
+ @argument = namespacecv_xml[:cv][:calcHist][0].arguments[2]
465
+ end
466
+
467
+ should 'belong to the number_pointer group' do
468
+ assert_equal :number_ptr, Dub::Argument.type_group(MockArgument.new('int', 'int', true))
469
+ end
470
+
471
+ should 'pass by value in call' do
472
+ assert_equal 'channels', @argument.in_call_type
473
+ end
474
+
475
+ should 'know if argument is const' do
476
+ assert @argument.is_const?
477
+ end
478
+
479
+ should 'know if argument is passed by ref' do
480
+ assert !@argument.is_ref?
481
+ end
482
+
483
+ should 'know that it is a pointer' do
484
+ assert @argument.is_pointer?
485
+ end
486
+
487
+ should 'return the type without star' do
488
+ assert_equal 'int', @argument.type
489
+ end
490
+
491
+ should 'create a native type' do
492
+ assert_equal 'const int *', @argument.create_type
493
+ end
494
+ end
495
+
496
+ context 'A pointer to a const char' do
497
+ setup do
498
+ @argument = namespacedub_xml[:dub][:Matrix][:name].return_value
499
+ end
500
+
501
+ should 'belong to the string group' do
502
+ assert_equal :string, Dub::Argument.type_group(MockArgument.new('char', 'char', true))
503
+ end
504
+
505
+ should 'know if argument is const' do
506
+ assert @argument.is_const?
507
+ end
508
+
509
+ should 'know if argument is passed by ref' do
510
+ assert !@argument.is_ref?
511
+ end
512
+
513
+ should 'know that it is a pointer' do
514
+ assert @argument.is_pointer?
515
+ end
516
+
517
+ should 'return the type without star' do
518
+ assert_equal 'char', @argument.type
519
+ end
520
+
521
+ should 'create a native type' do
522
+ assert_equal 'const char *', @argument.create_type
523
+ end
524
+ end
525
+
526
+ context 'In a class defined from a template' do
527
+ setup do
528
+ @class = namespacecv_xml[:cv][:Scalar]
529
+ end
530
+
531
+ context 'an argument in a constructor' do
532
+ setup do
533
+ @argument = @class[:Scalar][3].arguments.first
534
+ end
535
+
536
+ should 'replace template params' do
537
+ assert_equal 'double', @argument.type
538
+ end
539
+
540
+ should 'not be marked as complex if template params are replaced' do
541
+ assert !@argument.complex?
542
+ end
543
+ end
544
+
545
+ context 'a return value' do
546
+ setup do
547
+ @argument = @class[:all].return_value
548
+ end
549
+
550
+ should 'replace template params and resolve' do
551
+ assert_equal 'Scalar', @argument.type
552
+ end
553
+ end
554
+ end
555
+
556
+ context 'An argument with template params' do
557
+ setup do
558
+ @method = namespacecv_xml[:cv][:Mat][:inv]
559
+ @argument = @method.return_value
560
+ end
561
+
562
+ should 'know it is a complexe type' do
563
+ assert @argument.complex?
564
+ end
565
+
566
+ should 'mark the method as having complexe arguments' do
567
+ assert @method.has_complex_arguments?
568
+ end
569
+ end
570
+
571
+ context 'An argument with resolved template params' do
572
+ setup do
573
+ @method = namespacecv_xml[:cv][:Scalar][:mul]
574
+ @argument = @method.return_value
575
+ end
576
+
577
+ should 'not be marked as a complexe type' do
578
+ assert !@argument.complex?
579
+ end
580
+ end
581
+ end
@@ -0,0 +1,54 @@
1
+ cmake_minimum_required(VERSION 2.6)
2
+ # ----------------------------------------------------------------------------
3
+ # CMake file for Lua. See root CMakeLists.txt
4
+ #
5
+ # ----------------------------------------------------------------------------
6
+ project(Matrix)
7
+
8
+ include_directories(
9
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
10
+ ${CMAKE_CURRENT_SOURCE_DIR}/vendor/lua
11
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../../lib/dub/lua
12
+ )
13
+
14
+ # ==============================================================================
15
+ #
16
+ # Platform guessing
17
+ #
18
+ # ==============================================================================
19
+ if(UNIX)
20
+ if(APPLE)
21
+ # macosx
22
+ set(PLAT_LINK "-bundle -undefined dynamic_lookup -all_load")
23
+ else(APPLE)
24
+ # linux
25
+ set(PLAT_LINK "-shared")
26
+ endif(APPLE)
27
+ else(UNIX)
28
+ if(WIN32)
29
+ # ?
30
+ else(WIN32)
31
+ # ?
32
+ endif(WIN32)
33
+ endif(UNIX)
34
+
35
+ # ----------------------------------------------------------------------------------
36
+ # Define the library target:
37
+ # ----------------------------------------------------------------------------------
38
+
39
+ set(the_target "Matrix")
40
+
41
+ file(GLOB lib_srcs bindings/*.cpp)
42
+ file(GLOB lib_hdrs bindings/*.h)
43
+ set(lib_ext_hdrs)
44
+
45
+ set(CMAKE_CXX_FLAGS "-DLUA_USE_DLOPEN -DLUA_USE_POSIX")
46
+ add_library(${the_target} STATIC ${lib_srcs} ${lib_hdrs} ${lib_ext_hdrs})
47
+
48
+ set_target_properties(${the_target}
49
+ PROPERTIES OUTPUT_NAME "${the_target}"
50
+ #LINK_FLAGS ${PLAT_LINK}
51
+ PREFIX ""
52
+ SUFFIX ".a" #".so"
53
+ LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/vendor/lua
54
+ )