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,547 @@
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
+ setup do
164
+ # namespacecv_xml = Dub.parse(fixture('namespacecv.xml'))
165
+ @argument = namespacedub_xml[:dub][:Matrix][:do_something].arguments[1]
166
+ end
167
+
168
+ should 'return type with type' do
169
+ assert_equal 'bool', @argument.type
170
+ end
171
+
172
+ should 'return name with name' do
173
+ assert_equal 'fast', @argument.name
174
+ end
175
+
176
+ should 'know if argument is const' do
177
+ assert !@argument.is_const?
178
+ end
179
+
180
+ should 'know if argument is passed by ref' do
181
+ assert !@argument.is_ref?
182
+ end
183
+
184
+ should 'know that it is a pointer' do
185
+ assert !@argument.is_pointer?
186
+ end
187
+
188
+ should 'know if argument type is a native type' do
189
+ assert @argument.is_native?
190
+ end
191
+
192
+ should 'return bool on create_type' do
193
+ assert_equal 'bool ', @argument.create_type
194
+ end
195
+
196
+ should 'return signature' do
197
+ assert_equal 'bool', @argument.signature
198
+ end
199
+
200
+ should 'return default value if it has one' do
201
+ assert_equal 'false', @argument.default
202
+ end
203
+ end
204
+
205
+ context 'An argument with the same name as the function' do
206
+ setup do
207
+ @function = namespacecv_xml[:cv][:magnitude]
208
+ @argument = @function.arguments[2]
209
+ end
210
+
211
+ should 'be prefixed with arg_' do
212
+ assert_equal 'arg_magnitude', @argument.name
213
+ end
214
+ end
215
+
216
+ context 'An argument with a type from another namespace' do
217
+ setup do
218
+ @function = namespacedub_xml[:dub][:Matrix][:use_other_lib]
219
+ @argument = @function.arguments.first
220
+ end
221
+
222
+ should 'not nest own namespace in id_name' do
223
+ assert_equal "std.string", @argument.id_name
224
+ end
225
+
226
+ context 'bound to a generator' do
227
+ setup do
228
+ Dub::Lua.bind(@function)
229
+ end
230
+
231
+ should 'not nest own namespace in type' do
232
+ assert_match %r{luaL_checkudata\(L,\s*1,\s*\"std\.string\"}, @function.to_s
233
+ end
234
+ end
235
+ end
236
+
237
+ context 'An argument with a default value' do
238
+ setup do
239
+ # namespacecv_xml = Dub.parse(fixture('namespacecv.xml'))
240
+ @argument = namespacecv_xml[:cv][:resize].arguments[5]
241
+ end
242
+
243
+ should 'return type with type' do
244
+ assert_equal 'int', @argument.type
245
+ end
246
+
247
+ should 'return name with name' do
248
+ assert_equal 'interpolation', @argument.name
249
+ end
250
+
251
+ should 'return default value' do
252
+ assert_equal 'cv::INTER_LINEAR', @argument.default
253
+ end
254
+
255
+ should 'know if it has a default value' do
256
+ assert @argument.has_default?
257
+ end
258
+
259
+ context 'that is an enum' do
260
+ setup do
261
+ @argument = namespacecv_xml[:cv][:Mat].constructor[6].arguments[4]
262
+ end
263
+
264
+ should 'use full namespace signature if default is an enum' do
265
+ assert_equal 'cv::Mat::AUTO_STEP', @argument.default
266
+ end
267
+ end
268
+
269
+ context 'that is a class' do
270
+ setup do
271
+ @method = namespacecv_xml[:cv][:accumulate]
272
+ @argument = @method.arguments[2]
273
+ end
274
+
275
+ should 'know that it has a default value' do
276
+ assert @argument.has_default?
277
+ end
278
+
279
+ should 'return default value' do
280
+ assert_equal 'Mat()', @argument.default
281
+ end
282
+
283
+ context 'bound to a generator' do
284
+ setup do
285
+ Dub::Lua.bind(@method)
286
+ end
287
+
288
+ should 'use if then else for default' do
289
+ assert_match %r{if\s*\(top__ < 3\) \{\s*accumulate\(\*src, \*dst\);}m,
290
+ @method.to_s
291
+ end
292
+ end
293
+ end
294
+ end
295
+
296
+ context 'A group of overloaded functions' do
297
+ setup do
298
+ @group = namespacecv_xml[:cv][:divide]
299
+ end
300
+
301
+ should 'be ordered into a decision tree' do
302
+ f1 = @group.detect {|f| f.arguments[0].type == 'Mat'}
303
+ f2 = @group.detect {|f| f.arguments[0].type == 'MatND'}
304
+ f3 = @group.detect {|f| f.arguments[0].type == 'double' && f.arguments[1].type == 'Mat'}
305
+ f4 = @group.detect {|f| f.arguments[0].type == 'double' && f.arguments[1].type == 'MatND'}
306
+ hash = {'cv.Mat'=>f1, 'cv.MatND'=>f2, :number=> {'cv.Mat' => f3, 'cv.MatND' => f4}}
307
+ assert_equal hash, Dub::Argument.decision_tree(@group)
308
+ end
309
+ end
310
+
311
+ context 'A group of overloaded member methods' do
312
+ setup do
313
+ @group = namespacecv_xml[:cv][:Mat][:zeros]
314
+ end
315
+
316
+ should 'be ordered into a decision tree' do
317
+ f1 = @group.detect {|f| f.arguments[0].type == 'Size'}
318
+ f2 = @group.detect {|f| f.arguments[0].type == 'int'}
319
+ hash = {'cv.Size'=>f1, :number=> f2}
320
+ assert_equal hash, Dub::Argument.decision_tree(@group)
321
+ end
322
+ end
323
+
324
+ class MockArgument
325
+ attr_reader :type, :full_type
326
+ def initialize(type, full_type=nil, is_pointer=false)
327
+ @type = type
328
+ @full_type = full_type || type
329
+ @is_pointer = is_pointer
330
+ end
331
+ def is_pointer?
332
+ @is_pointer
333
+ end
334
+ end
335
+ context 'An int argument' do
336
+ should 'belong to the :number group' do
337
+ assert_equal :number, Dub::Argument.type_group(MockArgument.new('int'))
338
+ end
339
+ end
340
+
341
+ context 'A float argument' do
342
+ should 'belong to the :number group' do
343
+ assert_equal :number, Dub::Argument.type_group(MockArgument.new('float'))
344
+ end
345
+ end
346
+
347
+ context 'A double argument' do
348
+ setup do
349
+ @argument = namespacecv_xml[:cv][:resize].arguments[3]
350
+ end
351
+
352
+ should 'belong to the :number group' do
353
+ assert_equal :number, Dub::Argument.type_group(MockArgument.new('double'))
354
+ end
355
+
356
+ should 'create double type' do
357
+ assert_equal 'double ', @argument.create_type
358
+ end
359
+
360
+ should 'pass by value in call' do
361
+ assert_equal 'fx', @argument.in_call_type
362
+ end
363
+ end
364
+
365
+ context 'An array of C types' do
366
+ setup do
367
+ @argument = namespacedub_xml[:dub][:FMatrix][:FunkyThing].arguments.first
368
+ end
369
+
370
+ should 'return array count on array_count' do
371
+ assert_equal '[7]', @argument.array_suffix
372
+ end
373
+
374
+ should 'be passed as is' do
375
+ assert_equal 'v', @argument.name
376
+ end
377
+
378
+ should 'respond true to has_array_argumetns in method' do
379
+ assert namespacedub_xml[:dub][:FMatrix][:FunkyThing].has_array_arguments?
380
+ end
381
+
382
+ context 'bound to a generator' do
383
+ setup do
384
+ @method = namespacedub_xml[:dub][:FMatrix][:FunkyThing]
385
+ Dub::Lua.bind(@method)
386
+ end
387
+
388
+ should 'append array when creating receiver' do
389
+ assert_match %r{double\s+v\[7\]}, @method.to_s
390
+ end
391
+ end
392
+ end
393
+
394
+ context 'A custom class by ref' do
395
+ setup do
396
+ @argument = namespacecv_xml[:cv][:resize].arguments[0]
397
+ end
398
+
399
+ should 'belong to its own group' do
400
+ assert_equal 'cv.Mat', Dub::Argument.type_group(@argument)
401
+ end
402
+
403
+ should 'create a const pointer' do
404
+ assert_equal 'const Mat *', @argument.create_type
405
+ end
406
+
407
+ should 'pass by ref in call' do
408
+ assert_equal '*src', @argument.in_call_type
409
+ end
410
+
411
+ should 'know if argument is const' do
412
+ assert @argument.is_const?
413
+ end
414
+
415
+ should 'know if argument is passed by ref' do
416
+ assert @argument.is_ref?
417
+ end
418
+
419
+ should 'know that it is a pointer' do
420
+ assert !@argument.is_pointer?
421
+ end
422
+ end
423
+
424
+ context 'A pointer to a class' do
425
+ setup do
426
+ @argument = namespacecv_xml[:cv][:calcHist][0].arguments[0]
427
+ end
428
+
429
+ should 'belong to its own group' do
430
+ assert_equal 'cv.Mat', Dub::Argument.type_group(@argument)
431
+ end
432
+
433
+ should 'return type with namespace on id_name' do
434
+ assert_equal 'cv.Mat', @argument.id_name
435
+ end
436
+
437
+ should 'pass by value in call' do
438
+ assert_equal 'images', @argument.in_call_type
439
+ end
440
+
441
+ should 'know if argument is const' do
442
+ assert @argument.is_const?
443
+ end
444
+
445
+ should 'know if argument is passed by ref' do
446
+ assert !@argument.is_ref?
447
+ end
448
+
449
+ should 'know that it is a pointer' do
450
+ assert @argument.is_pointer?
451
+ end
452
+
453
+ should 'create a pointer' do
454
+ assert_equal 'const Mat *', @argument.create_type
455
+ end
456
+ end
457
+
458
+ context 'A pointer to a native type' do
459
+ setup do
460
+ @argument = namespacecv_xml[:cv][:calcHist][0].arguments[2]
461
+ end
462
+
463
+ should 'belong to the number_pointer group' do
464
+ assert_equal :number_ptr, Dub::Argument.type_group(MockArgument.new('int', 'int', true))
465
+ end
466
+
467
+ should 'pass by value in call' do
468
+ assert_equal 'channels', @argument.in_call_type
469
+ end
470
+
471
+ should 'know if argument is const' do
472
+ assert @argument.is_const?
473
+ end
474
+
475
+ should 'know if argument is passed by ref' do
476
+ assert !@argument.is_ref?
477
+ end
478
+
479
+ should 'know that it is a pointer' do
480
+ assert @argument.is_pointer?
481
+ end
482
+
483
+ should 'return the type without star' do
484
+ assert_equal 'int', @argument.type
485
+ end
486
+
487
+ should 'create a native type' do
488
+ assert_equal 'const int *', @argument.create_type
489
+ end
490
+ end
491
+
492
+ context 'In a class defined from a template' do
493
+ setup do
494
+ @class = namespacecv_xml[:cv][:Scalar]
495
+ end
496
+
497
+ context 'an argument in a constructor' do
498
+ setup do
499
+ @argument = @class[:Scalar][3].arguments.first
500
+ end
501
+
502
+ should 'replace template params' do
503
+ assert_equal 'double', @argument.type
504
+ end
505
+
506
+ should 'not be marked as complex if template params are replaced' do
507
+ assert !@argument.complex?
508
+ end
509
+ end
510
+
511
+ context 'a return value' do
512
+ setup do
513
+ @argument = @class[:all].return_value
514
+ end
515
+
516
+ should 'replace template params and resolve' do
517
+ assert_equal 'Scalar', @argument.type
518
+ end
519
+ end
520
+ end
521
+
522
+ context 'An argument with template params' do
523
+ setup do
524
+ @method = namespacecv_xml[:cv][:Mat][:inv]
525
+ @argument = @method.return_value
526
+ end
527
+
528
+ should 'know it is a complexe type' do
529
+ assert @argument.complex?
530
+ end
531
+
532
+ should 'mark the method as having complexe arguments' do
533
+ assert @method.has_complex_arguments?
534
+ end
535
+ end
536
+
537
+ context 'An argument with resolved template params' do
538
+ setup do
539
+ @method = namespacecv_xml[:cv][:Scalar][:mul]
540
+ @argument = @method.return_value
541
+ end
542
+
543
+ should 'not be marked as a complexe type' do
544
+ assert !@argument.complex?
545
+ end
546
+ end
547
+ 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
+ )