rufus-lua-win 5.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (459) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +69 -0
  6. data/Rakefile +1 -0
  7. data/lib/rufus/lua/win.rb +18 -0
  8. data/lib/rufus/lua/win/version.rb +7 -0
  9. data/rufus-lua-win.gemspec +23 -0
  10. data/vendor/lua/bin/liblua.dll +0 -0
  11. data/vendor/lua/lib/lua/LuaXml.lua +119 -0
  12. data/vendor/lua/lib/lua/alien.lua +250 -0
  13. data/vendor/lua/lib/lua/alien/core.dll +0 -0
  14. data/vendor/lua/lib/lua/alien/struct.dll +0 -0
  15. data/vendor/lua/lib/lua/base.lua +536 -0
  16. data/vendor/lua/lib/lua/bin.lua +20 -0
  17. data/vendor/lua/lib/lua/bit.dll +0 -0
  18. data/vendor/lua/lib/lua/cdlua.dll +0 -0
  19. data/vendor/lua/lib/lua/cdluacontextplus.dll +0 -0
  20. data/vendor/lua/lib/lua/cdluagl.dll +0 -0
  21. data/vendor/lua/lib/lua/cdluaim.dll +0 -0
  22. data/vendor/lua/lib/lua/cdluapdf.dll +0 -0
  23. data/vendor/lua/lib/lua/copas.lua +543 -0
  24. data/vendor/lua/lib/lua/coxpcall.lua +57 -0
  25. data/vendor/lua/lib/lua/date.lua +745 -0
  26. data/vendor/lua/lib/lua/debug_ext.lua +84 -0
  27. data/vendor/lua/lib/lua/debug_init.lua +2 -0
  28. data/vendor/lua/lib/lua/des56.dll +0 -0
  29. data/vendor/lua/lib/lua/dist/config.lua +109 -0
  30. data/vendor/lua/lib/lua/dist/constraints.lua +271 -0
  31. data/vendor/lua/lib/lua/dist/depends.lua +601 -0
  32. data/vendor/lua/lib/lua/dist/git.lua +307 -0
  33. data/vendor/lua/lib/lua/dist/init.lua +278 -0
  34. data/vendor/lua/lib/lua/dist/manifest.lua +225 -0
  35. data/vendor/lua/lib/lua/dist/package.lua +583 -0
  36. data/vendor/lua/lib/lua/dist/sys.lua +367 -0
  37. data/vendor/lua/lib/lua/dist/utils.lua +130 -0
  38. data/vendor/lua/lib/lua/ex.dll +0 -0
  39. data/vendor/lua/lib/lua/fstable.lua +116 -0
  40. data/vendor/lua/lib/lua/getopt.lua +273 -0
  41. data/vendor/lua/lib/lua/git.lua +5 -0
  42. data/vendor/lua/lib/lua/git/core.dll +0 -0
  43. data/vendor/lua/lib/lua/git/objects.lua +121 -0
  44. data/vendor/lua/lib/lua/git/pack.lua +316 -0
  45. data/vendor/lua/lib/lua/git/protocol.lua +188 -0
  46. data/vendor/lua/lib/lua/git/repo.lua +283 -0
  47. data/vendor/lua/lib/lua/git/util.lua +233 -0
  48. data/vendor/lua/lib/lua/gzio.dll +0 -0
  49. data/vendor/lua/lib/lua/gzip.lua +81 -0
  50. data/vendor/lua/lib/lua/iconv.dll +0 -0
  51. data/vendor/lua/lib/lua/imlua.dll +0 -0
  52. data/vendor/lua/lib/lua/imlua_fftw.dll +0 -0
  53. data/vendor/lua/lib/lua/imlua_jp2.dll +0 -0
  54. data/vendor/lua/lib/lua/imlua_process.dll +0 -0
  55. data/vendor/lua/lib/lua/imlua_process_omp.dll +0 -0
  56. data/vendor/lua/lib/lua/io_ext.lua +115 -0
  57. data/vendor/lua/lib/lua/iuplua.dll +0 -0
  58. data/vendor/lua/lib/lua/iuplua_mglplot.dll +0 -0
  59. data/vendor/lua/lib/lua/iuplua_pplot.dll +0 -0
  60. data/vendor/lua/lib/lua/iupluacd.dll +0 -0
  61. data/vendor/lua/lib/lua/iupluacontrols.dll +0 -0
  62. data/vendor/lua/lib/lua/iupluagl.dll +0 -0
  63. data/vendor/lua/lib/lua/iupluaim.dll +0 -0
  64. data/vendor/lua/lib/lua/iupluaimglib.dll +0 -0
  65. data/vendor/lua/lib/lua/iupluatuio.dll +0 -0
  66. data/vendor/lua/lib/lua/lanes-keeper.lua +302 -0
  67. data/vendor/lua/lib/lua/lanes.lua +591 -0
  68. data/vendor/lua/lib/lua/lanes/core.dll +0 -0
  69. data/vendor/lua/lib/lua/lcs.lua +55 -0
  70. data/vendor/lua/lib/lua/lemock.lua +659 -0
  71. data/vendor/lua/lib/lua/lfs.dll +0 -0
  72. data/vendor/lua/lib/lua/list.lua +375 -0
  73. data/vendor/lua/lib/lua/logging.lua +189 -0
  74. data/vendor/lua/lib/lua/logging/console.lua +22 -0
  75. data/vendor/lua/lib/lua/logging/email.lua +44 -0
  76. data/vendor/lua/lib/lua/logging/file.lua +55 -0
  77. data/vendor/lua/lib/lua/logging/rolling_file.lua +81 -0
  78. data/vendor/lua/lib/lua/logging/socket.lua +35 -0
  79. data/vendor/lua/lib/lua/logging/sql.lua +64 -0
  80. data/vendor/lua/lib/lua/loop/base.lua +68 -0
  81. data/vendor/lua/lib/lua/loop/cached.lua +312 -0
  82. data/vendor/lua/lib/lua/loop/collection/MapWithArrayOfKeys.lua +64 -0
  83. data/vendor/lua/lib/lua/loop/collection/ObjectCache.lua +39 -0
  84. data/vendor/lua/lib/lua/loop/collection/OrderedSet.lua +164 -0
  85. data/vendor/lua/lib/lua/loop/collection/PriorityQueue.lua +86 -0
  86. data/vendor/lua/lib/lua/loop/collection/UnorderedArray.lua +32 -0
  87. data/vendor/lua/lib/lua/loop/collection/UnorderedArraySet.lua +56 -0
  88. data/vendor/lua/lib/lua/loop/compiler/Arguments.lua +108 -0
  89. data/vendor/lua/lib/lua/loop/compiler/Conditional.lua +50 -0
  90. data/vendor/lua/lib/lua/loop/compiler/Expression.lua +215 -0
  91. data/vendor/lua/lib/lua/loop/component/base.lua +221 -0
  92. data/vendor/lua/lib/lua/loop/component/contained.lua +71 -0
  93. data/vendor/lua/lib/lua/loop/component/dynamic.lua +223 -0
  94. data/vendor/lua/lib/lua/loop/component/intercepted.lua +354 -0
  95. data/vendor/lua/lib/lua/loop/component/wrapped.lua +195 -0
  96. data/vendor/lua/lib/lua/loop/debug/Inspector.lua +521 -0
  97. data/vendor/lua/lib/lua/loop/debug/Matcher.lua +192 -0
  98. data/vendor/lua/lib/lua/loop/debug/Verbose.lua +266 -0
  99. data/vendor/lua/lib/lua/loop/debug/Viewer.lua +200 -0
  100. data/vendor/lua/lib/lua/loop/multiple.lua +105 -0
  101. data/vendor/lua/lib/lua/loop/object/Exception.lua +57 -0
  102. data/vendor/lua/lib/lua/loop/object/Publisher.lua +43 -0
  103. data/vendor/lua/lib/lua/loop/object/Wrapper.lua +39 -0
  104. data/vendor/lua/lib/lua/loop/scoped.lua +585 -0
  105. data/vendor/lua/lib/lua/loop/serial/FileStream.lua +48 -0
  106. data/vendor/lua/lib/lua/loop/serial/Serializer.lua +291 -0
  107. data/vendor/lua/lib/lua/loop/serial/SocketStream.lua +51 -0
  108. data/vendor/lua/lib/lua/loop/serial/StringStream.lua +47 -0
  109. data/vendor/lua/lib/lua/loop/simple.lua +75 -0
  110. data/vendor/lua/lib/lua/loop/table.lua +71 -0
  111. data/vendor/lua/lib/lua/loop/thread/CoSocket.lua +416 -0
  112. data/vendor/lua/lib/lua/loop/thread/IOScheduler.lua +170 -0
  113. data/vendor/lua/lib/lua/loop/thread/Scheduler.lua +327 -0
  114. data/vendor/lua/lib/lua/loop/thread/SocketScheduler.lua +88 -0
  115. data/vendor/lua/lib/lua/loop/thread/Timer.lua +54 -0
  116. data/vendor/lua/lib/lua/lpeg.dll +0 -0
  117. data/vendor/lua/lib/lua/ltn12.lua +292 -0
  118. data/vendor/lua/lib/lua/luaXML_lib.dll +0 -0
  119. data/vendor/lua/lib/lua/luacurl.dll +0 -0
  120. data/vendor/lua/lib/lua/luadoc/config.lua +34 -0
  121. data/vendor/lua/lib/lua/luadoc/doclet/debug.lua +46 -0
  122. data/vendor/lua/lib/lua/luadoc/doclet/formatter.lua +84 -0
  123. data/vendor/lua/lib/lua/luadoc/doclet/html.lua +289 -0
  124. data/vendor/lua/lib/lua/luadoc/doclet/html/file.lp +113 -0
  125. data/vendor/lua/lib/lua/luadoc/doclet/html/function.lp +64 -0
  126. data/vendor/lua/lib/lua/luadoc/doclet/html/index.lp +70 -0
  127. data/vendor/lua/lib/lua/luadoc/doclet/html/luadoc.css +286 -0
  128. data/vendor/lua/lib/lua/luadoc/doclet/html/menu.lp +55 -0
  129. data/vendor/lua/lib/lua/luadoc/doclet/html/module.lp +109 -0
  130. data/vendor/lua/lib/lua/luadoc/doclet/html/table.lp +15 -0
  131. data/vendor/lua/lib/lua/luadoc/doclet/raw.lua +12 -0
  132. data/vendor/lua/lib/lua/luadoc/init.lua +58 -0
  133. data/vendor/lua/lib/lua/luadoc/lp.lua +130 -0
  134. data/vendor/lua/lib/lua/luadoc/taglet/standard.lua +495 -0
  135. data/vendor/lua/lib/lua/luadoc/taglet/standard/tags.lua +171 -0
  136. data/vendor/lua/lib/lua/luadoc/util.lua +233 -0
  137. data/vendor/lua/lib/lua/luagl.dll +0 -0
  138. data/vendor/lua/lib/lua/luaglu.dll +0 -0
  139. data/vendor/lua/lib/lua/luaidl.lua +113 -0
  140. data/vendor/lua/lib/lua/luaidl/lex.lua +793 -0
  141. data/vendor/lua/lib/lua/luaidl/pre.lua +149 -0
  142. data/vendor/lua/lib/lua/luaidl/sin.lua +3631 -0
  143. data/vendor/lua/lib/lua/luarocks/add.lua +108 -0
  144. data/vendor/lua/lib/lua/luarocks/admin_remove.lua +87 -0
  145. data/vendor/lua/lib/lua/luarocks/build.lua +330 -0
  146. data/vendor/lua/lib/lua/luarocks/build/builtin.lua +253 -0
  147. data/vendor/lua/lib/lua/luarocks/build/cmake.lua +54 -0
  148. data/vendor/lua/lib/lua/luarocks/build/command.lua +32 -0
  149. data/vendor/lua/lib/lua/luarocks/build/make.lua +92 -0
  150. data/vendor/lua/lib/lua/luarocks/cache.lua +85 -0
  151. data/vendor/lua/lib/lua/luarocks/cfg.lua +449 -0
  152. data/vendor/lua/lib/lua/luarocks/command_line.lua +163 -0
  153. data/vendor/lua/lib/lua/luarocks/deps.lua +654 -0
  154. data/vendor/lua/lib/lua/luarocks/dir.lua +69 -0
  155. data/vendor/lua/lib/lua/luarocks/download.lua +90 -0
  156. data/vendor/lua/lib/lua/luarocks/fetch.lua +321 -0
  157. data/vendor/lua/lib/lua/luarocks/fetch/cvs.lua +44 -0
  158. data/vendor/lua/lib/lua/luarocks/fetch/git.lua +81 -0
  159. data/vendor/lua/lib/lua/luarocks/fetch/git_file.lua +17 -0
  160. data/vendor/lua/lib/lua/luarocks/fetch/hg.lua +54 -0
  161. data/vendor/lua/lib/lua/luarocks/fetch/sscm.lua +42 -0
  162. data/vendor/lua/lib/lua/luarocks/fetch/svn.lua +53 -0
  163. data/vendor/lua/lib/lua/luarocks/fs.lua +40 -0
  164. data/vendor/lua/lib/lua/luarocks/fs/lua.lua +676 -0
  165. data/vendor/lua/lib/lua/luarocks/fs/unix.lua +88 -0
  166. data/vendor/lua/lib/lua/luarocks/fs/unix/tools.lua +325 -0
  167. data/vendor/lua/lib/lua/luarocks/fs/win32.lua +107 -0
  168. data/vendor/lua/lib/lua/luarocks/fs/win32/tools.lua +334 -0
  169. data/vendor/lua/lib/lua/luarocks/help.lua +101 -0
  170. data/vendor/lua/lib/lua/luarocks/index.lua +172 -0
  171. data/vendor/lua/lib/lua/luarocks/install.lua +151 -0
  172. data/vendor/lua/lib/lua/luarocks/list.lua +35 -0
  173. data/vendor/lua/lib/lua/luarocks/loader.lua +228 -0
  174. data/vendor/lua/lib/lua/luarocks/make.lua +71 -0
  175. data/vendor/lua/lib/lua/luarocks/make_manifest.lua +34 -0
  176. data/vendor/lua/lib/lua/luarocks/manif.lua +360 -0
  177. data/vendor/lua/lib/lua/luarocks/manif_core.lua +75 -0
  178. data/vendor/lua/lib/lua/luarocks/new_version.lua +141 -0
  179. data/vendor/lua/lib/lua/luarocks/pack.lua +205 -0
  180. data/vendor/lua/lib/lua/luarocks/path.lua +315 -0
  181. data/vendor/lua/lib/lua/luarocks/persist.lua +173 -0
  182. data/vendor/lua/lib/lua/luarocks/refresh_cache.lua +30 -0
  183. data/vendor/lua/lib/lua/luarocks/remove.lua +135 -0
  184. data/vendor/lua/lib/lua/luarocks/rep.lua +313 -0
  185. data/vendor/lua/lib/lua/luarocks/require.lua +6 -0
  186. data/vendor/lua/lib/lua/luarocks/search.lua +399 -0
  187. data/vendor/lua/lib/lua/luarocks/show.lua +138 -0
  188. data/vendor/lua/lib/lua/luarocks/site_config.lua +23 -0
  189. data/vendor/lua/lib/lua/luarocks/tools/patch.lua +712 -0
  190. data/vendor/lua/lib/lua/luarocks/tools/tar.lua +144 -0
  191. data/vendor/lua/lib/lua/luarocks/tools/zip.lua +245 -0
  192. data/vendor/lua/lib/lua/luarocks/type_check.lua +267 -0
  193. data/vendor/lua/lib/lua/luarocks/unpack.lua +151 -0
  194. data/vendor/lua/lib/lua/luarocks/util.lua +420 -0
  195. data/vendor/lua/lib/lua/luarocks/validate.lua +164 -0
  196. data/vendor/lua/lib/lua/luars232.dll +0 -0
  197. data/vendor/lua/lib/lua/luasql/mysql.dll +0 -0
  198. data/vendor/lua/lib/lua/luasql/postgres.dll +0 -0
  199. data/vendor/lua/lib/lua/luasql/sqlite3.dll +0 -0
  200. data/vendor/lua/lib/lua/luaunit.lua +601 -0
  201. data/vendor/lua/lib/lua/lxp.dll +0 -0
  202. data/vendor/lua/lib/lua/lxp/lom.lua +60 -0
  203. data/vendor/lua/lib/lua/math_ext.lua +27 -0
  204. data/vendor/lua/lib/lua/mbox.lua +53 -0
  205. data/vendor/lua/lib/lua/md5.lua +19 -0
  206. data/vendor/lua/lib/lua/md5/core.dll +0 -0
  207. data/vendor/lua/lib/lua/metalua.lua +0 -0
  208. data/vendor/lua/lib/lua/metalua/ast_to_string.mlua +553 -0
  209. data/vendor/lua/lib/lua/metalua/base.lua +104 -0
  210. data/vendor/lua/lib/lua/metalua/bytecode.lua +0 -0
  211. data/vendor/lua/lib/lua/metalua/clopts.mlua +204 -0
  212. data/vendor/lua/lib/lua/metalua/compiler.lua +3 -0
  213. data/vendor/lua/lib/lua/metalua/dollar.mlua +24 -0
  214. data/vendor/lua/lib/lua/metalua/extension/H-runtime.mlua +216 -0
  215. data/vendor/lua/lib/lua/metalua/extension/H.mlua +22 -0
  216. data/vendor/lua/lib/lua/metalua/extension/anaphoric.mlua +54 -0
  217. data/vendor/lua/lib/lua/metalua/extension/clist.mlua +149 -0
  218. data/vendor/lua/lib/lua/metalua/extension/continue.mlua +53 -0
  219. data/vendor/lua/lib/lua/metalua/extension/localin.mlua +2 -0
  220. data/vendor/lua/lib/lua/metalua/extension/log.mlua +39 -0
  221. data/vendor/lua/lib/lua/metalua/extension/match.mlua +374 -0
  222. data/vendor/lua/lib/lua/metalua/extension/ternary.mlua +10 -0
  223. data/vendor/lua/lib/lua/metalua/extension/trycatch.mlua +189 -0
  224. data/vendor/lua/lib/lua/metalua/extension/types-runtime.mlua +159 -0
  225. data/vendor/lua/lib/lua/metalua/extension/types.mlua +352 -0
  226. data/vendor/lua/lib/lua/metalua/extension/withdo.mlua +30 -0
  227. data/vendor/lua/lib/lua/metalua/extension/xglobal-runtime.lua +41 -0
  228. data/vendor/lua/lib/lua/metalua/extension/xglobal.mlua +20 -0
  229. data/vendor/lua/lib/lua/metalua/extension/xloop.mlua +100 -0
  230. data/vendor/lua/lib/lua/metalua/extension/xmatch.mlua +216 -0
  231. data/vendor/lua/lib/lua/metalua/metaloop.mlua +76 -0
  232. data/vendor/lua/lib/lua/metalua/mlc.lua +0 -0
  233. data/vendor/lua/lib/lua/metalua/mlc_xcall.lua +119 -0
  234. data/vendor/lua/lib/lua/metalua/mlp.lua +0 -0
  235. data/vendor/lua/lib/lua/metalua/package2.lua +101 -0
  236. data/vendor/lua/lib/lua/metalua/runtime.lua +3 -0
  237. data/vendor/lua/lib/lua/metalua/string2.lua +44 -0
  238. data/vendor/lua/lib/lua/metalua/table2.lua +372 -0
  239. data/vendor/lua/lib/lua/metalua/walk.mlua +304 -0
  240. data/vendor/lua/lib/lua/metalua/walk/bindings.mlua +41 -0
  241. data/vendor/lua/lib/lua/metalua/walk/id.mlua +186 -0
  242. data/vendor/lua/lib/lua/metalua/walk/scope.lua +54 -0
  243. data/vendor/lua/lib/lua/mime.lua +87 -0
  244. data/vendor/lua/lib/lua/mime/core.dll +0 -0
  245. data/vendor/lua/lib/lua/mobdebug.lua +1484 -0
  246. data/vendor/lua/lib/lua/modules.lua +16 -0
  247. data/vendor/lua/lib/lua/object.lua +56 -0
  248. data/vendor/lua/lib/lua/oil/Exception.lua +26 -0
  249. data/vendor/lua/lib/lua/oil/arch.lua +27 -0
  250. data/vendor/lua/lib/lua/oil/arch/basic/client.lua +29 -0
  251. data/vendor/lua/lib/lua/oil/arch/basic/common.lua +13 -0
  252. data/vendor/lua/lib/lua/oil/arch/basic/server.lua +27 -0
  253. data/vendor/lua/lib/lua/oil/arch/cooperative/common.lua +10 -0
  254. data/vendor/lua/lib/lua/oil/arch/cooperative/server.lua +16 -0
  255. data/vendor/lua/lib/lua/oil/arch/corba/client.lua +39 -0
  256. data/vendor/lua/lib/lua/oil/arch/corba/common.lua +58 -0
  257. data/vendor/lua/lib/lua/oil/arch/corba/intercepted/client.lua +9 -0
  258. data/vendor/lua/lib/lua/oil/arch/corba/intercepted/server.lua +9 -0
  259. data/vendor/lua/lib/lua/oil/arch/corba/server.lua +35 -0
  260. data/vendor/lua/lib/lua/oil/arch/ludo/byref.lua +18 -0
  261. data/vendor/lua/lib/lua/oil/arch/ludo/client.lua +19 -0
  262. data/vendor/lua/lib/lua/oil/arch/ludo/common.lua +18 -0
  263. data/vendor/lua/lib/lua/oil/arch/ludo/server.lua +19 -0
  264. data/vendor/lua/lib/lua/oil/arch/typed/client.lua +27 -0
  265. data/vendor/lua/lib/lua/oil/arch/typed/common.lua +9 -0
  266. data/vendor/lua/lib/lua/oil/arch/typed/server.lua +18 -0
  267. data/vendor/lua/lib/lua/oil/assert.lua +87 -0
  268. data/vendor/lua/lib/lua/oil/builder.lua +45 -0
  269. data/vendor/lua/lib/lua/oil/builder/basic/client.lua +31 -0
  270. data/vendor/lua/lib/lua/oil/builder/basic/common.lua +11 -0
  271. data/vendor/lua/lib/lua/oil/builder/basic/server.lua +13 -0
  272. data/vendor/lua/lib/lua/oil/builder/cooperative/common.lua +11 -0
  273. data/vendor/lua/lib/lua/oil/builder/cooperative/server.lua +11 -0
  274. data/vendor/lua/lib/lua/oil/builder/corba/client.lua +13 -0
  275. data/vendor/lua/lib/lua/oil/builder/corba/common.lua +24 -0
  276. data/vendor/lua/lib/lua/oil/builder/corba/gencode.lua +13 -0
  277. data/vendor/lua/lib/lua/oil/builder/corba/intercepted/client.lua +11 -0
  278. data/vendor/lua/lib/lua/oil/builder/corba/intercepted/server.lua +11 -0
  279. data/vendor/lua/lib/lua/oil/builder/corba/server.lua +13 -0
  280. data/vendor/lua/lib/lua/oil/builder/lua/client.lua +11 -0
  281. data/vendor/lua/lib/lua/oil/builder/lua/server.lua +12 -0
  282. data/vendor/lua/lib/lua/oil/builder/ludo/byref.lua +13 -0
  283. data/vendor/lua/lib/lua/oil/builder/ludo/client.lua +13 -0
  284. data/vendor/lua/lib/lua/oil/builder/ludo/common.lua +14 -0
  285. data/vendor/lua/lib/lua/oil/builder/ludo/server.lua +13 -0
  286. data/vendor/lua/lib/lua/oil/builder/typed/client.lua +16 -0
  287. data/vendor/lua/lib/lua/oil/builder/typed/server.lua +12 -0
  288. data/vendor/lua/lib/lua/oil/compat.lua +846 -0
  289. data/vendor/lua/lib/lua/oil/component.lua +1 -0
  290. data/vendor/lua/lib/lua/oil/corba/giop.lua +301 -0
  291. data/vendor/lua/lib/lua/oil/corba/giop/Codec.lua +1568 -0
  292. data/vendor/lua/lib/lua/oil/corba/giop/CodecGen.lua +589 -0
  293. data/vendor/lua/lib/lua/oil/corba/giop/Exception.lua +25 -0
  294. data/vendor/lua/lib/lua/oil/corba/giop/Indexer.lua +63 -0
  295. data/vendor/lua/lib/lua/oil/corba/giop/Listener.lua +343 -0
  296. data/vendor/lua/lib/lua/oil/corba/giop/Messenger.lua +228 -0
  297. data/vendor/lua/lib/lua/oil/corba/giop/Referrer.lua +180 -0
  298. data/vendor/lua/lib/lua/oil/corba/giop/Requester.lua +462 -0
  299. data/vendor/lua/lib/lua/oil/corba/idl.lua +597 -0
  300. data/vendor/lua/lib/lua/oil/corba/idl/Compiler.lua +133 -0
  301. data/vendor/lua/lib/lua/oil/corba/idl/Importer.lua +235 -0
  302. data/vendor/lua/lib/lua/oil/corba/idl/Indexer.lua +95 -0
  303. data/vendor/lua/lib/lua/oil/corba/idl/Registry.lua +1821 -0
  304. data/vendor/lua/lib/lua/oil/corba/idl/ir.lua +847 -0
  305. data/vendor/lua/lib/lua/oil/corba/idl/sysex.lua +21 -0
  306. data/vendor/lua/lib/lua/oil/corba/iiop/Profiler.lua +200 -0
  307. data/vendor/lua/lib/lua/oil/corba/intercepted/Listener.lua +158 -0
  308. data/vendor/lua/lib/lua/oil/corba/intercepted/Requester.lua +181 -0
  309. data/vendor/lua/lib/lua/oil/corba/services/event.lua +126 -0
  310. data/vendor/lua/lib/lua/oil/corba/services/event/ConsumerAdmin.lua +50 -0
  311. data/vendor/lua/lib/lua/oil/corba/services/event/EventFactory.lua +15 -0
  312. data/vendor/lua/lib/lua/oil/corba/services/event/EventQueue.lua +37 -0
  313. data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushConsumer.lua +75 -0
  314. data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushSupplier.lua +62 -0
  315. data/vendor/lua/lib/lua/oil/corba/services/event/SingleDeferredDispatcher.lua +60 -0
  316. data/vendor/lua/lib/lua/oil/corba/services/event/SingleSynchronousDispatcher.lua +39 -0
  317. data/vendor/lua/lib/lua/oil/corba/services/event/SupplierAdmin.lua +50 -0
  318. data/vendor/lua/lib/lua/oil/corba/services/naming.lua +436 -0
  319. data/vendor/lua/lib/lua/oil/kernel/base/Acceptor.lua +268 -0
  320. data/vendor/lua/lib/lua/oil/kernel/base/Channels.lua +121 -0
  321. data/vendor/lua/lib/lua/oil/kernel/base/Connector.lua +147 -0
  322. data/vendor/lua/lib/lua/oil/kernel/base/Dispatcher.lua +99 -0
  323. data/vendor/lua/lib/lua/oil/kernel/base/Proxies.lua +86 -0
  324. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/asynchronous.lua +56 -0
  325. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/protected.lua +17 -0
  326. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/synchronous.lua +17 -0
  327. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/utils.lua +29 -0
  328. data/vendor/lua/lib/lua/oil/kernel/base/Receiver.lua +110 -0
  329. data/vendor/lua/lib/lua/oil/kernel/base/Servants.lua +207 -0
  330. data/vendor/lua/lib/lua/oil/kernel/base/Sockets.lua +44 -0
  331. data/vendor/lua/lib/lua/oil/kernel/cooperative/Receiver.lua +139 -0
  332. data/vendor/lua/lib/lua/oil/kernel/intercepted/Listener.lua +47 -0
  333. data/vendor/lua/lib/lua/oil/kernel/intercepted/Requester.lua +58 -0
  334. data/vendor/lua/lib/lua/oil/kernel/lua/Dispatcher.lua +76 -0
  335. data/vendor/lua/lib/lua/oil/kernel/lua/Proxies.lua +69 -0
  336. data/vendor/lua/lib/lua/oil/kernel/typed/Dispatcher.lua +91 -0
  337. data/vendor/lua/lib/lua/oil/kernel/typed/Proxies.lua +153 -0
  338. data/vendor/lua/lib/lua/oil/kernel/typed/Servants.lua +137 -0
  339. data/vendor/lua/lib/lua/oil/ludo/Codec.lua +66 -0
  340. data/vendor/lua/lib/lua/oil/ludo/CodecByRef.lua +103 -0
  341. data/vendor/lua/lib/lua/oil/ludo/Listener.lua +151 -0
  342. data/vendor/lua/lib/lua/oil/ludo/Referrer.lua +72 -0
  343. data/vendor/lua/lib/lua/oil/ludo/Requester.lua +107 -0
  344. data/vendor/lua/lib/lua/oil/oo.lua +1 -0
  345. data/vendor/lua/lib/lua/oil/port.lua +1 -0
  346. data/vendor/lua/lib/lua/oil/properties.lua +57 -0
  347. data/vendor/lua/lib/lua/oil/verbose.lua +133 -0
  348. data/vendor/lua/lib/lua/package_ext.lua +15 -0
  349. data/vendor/lua/lib/lua/parser.lua +268 -0
  350. data/vendor/lua/lib/lua/pl/Date.lua +555 -0
  351. data/vendor/lua/lib/lua/pl/List.lua +613 -0
  352. data/vendor/lua/lib/lua/pl/Map.lua +113 -0
  353. data/vendor/lua/lib/lua/pl/MultiMap.lua +62 -0
  354. data/vendor/lua/lib/lua/pl/OrderedMap.lua +151 -0
  355. data/vendor/lua/lib/lua/pl/Set.lua +153 -0
  356. data/vendor/lua/lib/lua/pl/app.lua +165 -0
  357. data/vendor/lua/lib/lua/pl/array2d.lua +501 -0
  358. data/vendor/lua/lib/lua/pl/class.lua +180 -0
  359. data/vendor/lua/lib/lua/pl/comprehension.lua +286 -0
  360. data/vendor/lua/lib/lua/pl/config.lua +176 -0
  361. data/vendor/lua/lib/lua/pl/data.lua +606 -0
  362. data/vendor/lua/lib/lua/pl/dir.lua +475 -0
  363. data/vendor/lua/lib/lua/pl/file.lua +70 -0
  364. data/vendor/lua/lib/lua/pl/func.lua +376 -0
  365. data/vendor/lua/lib/lua/pl/init.lua +68 -0
  366. data/vendor/lua/lib/lua/pl/input.lua +173 -0
  367. data/vendor/lua/lib/lua/pl/lapp.lua +407 -0
  368. data/vendor/lua/lib/lua/pl/lexer.lua +456 -0
  369. data/vendor/lua/lib/lua/pl/luabalanced.lua +264 -0
  370. data/vendor/lua/lib/lua/pl/operator.lua +201 -0
  371. data/vendor/lua/lib/lua/pl/path.lua +398 -0
  372. data/vendor/lua/lib/lua/pl/permute.lua +63 -0
  373. data/vendor/lua/lib/lua/pl/platf/luajava.lua +101 -0
  374. data/vendor/lua/lib/lua/pl/pretty.lua +285 -0
  375. data/vendor/lua/lib/lua/pl/seq.lua +551 -0
  376. data/vendor/lua/lib/lua/pl/sip.lua +344 -0
  377. data/vendor/lua/lib/lua/pl/strict.lua +70 -0
  378. data/vendor/lua/lib/lua/pl/stringio.lua +158 -0
  379. data/vendor/lua/lib/lua/pl/stringx.lua +440 -0
  380. data/vendor/lua/lib/lua/pl/tablex.lua +817 -0
  381. data/vendor/lua/lib/lua/pl/template.lua +103 -0
  382. data/vendor/lua/lib/lua/pl/test.lua +135 -0
  383. data/vendor/lua/lib/lua/pl/text.lua +243 -0
  384. data/vendor/lua/lib/lua/pl/utils.lua +550 -0
  385. data/vendor/lua/lib/lua/pl/xml.lua +689 -0
  386. data/vendor/lua/lib/lua/profiler.dll +0 -0
  387. data/vendor/lua/lib/lua/re.lua +248 -0
  388. data/vendor/lua/lib/lua/rex_onig.dll +0 -0
  389. data/vendor/lua/lib/lua/rex_pcre.dll +0 -0
  390. data/vendor/lua/lib/lua/rex_posix.dll +0 -0
  391. data/vendor/lua/lib/lua/rings.dll +0 -0
  392. data/vendor/lua/lib/lua/serialize.lua +193 -0
  393. data/vendor/lua/lib/lua/set.lua +149 -0
  394. data/vendor/lua/lib/lua/socket.lua +133 -0
  395. data/vendor/lua/lib/lua/socket/core.dll +0 -0
  396. data/vendor/lua/lib/lua/socket/ftp.lua +281 -0
  397. data/vendor/lua/lib/lua/socket/http.lua +350 -0
  398. data/vendor/lua/lib/lua/socket/smtp.lua +251 -0
  399. data/vendor/lua/lib/lua/socket/tp.lua +123 -0
  400. data/vendor/lua/lib/lua/socket/url.lua +297 -0
  401. data/vendor/lua/lib/lua/ssl.dll +0 -0
  402. data/vendor/lua/lib/lua/ssl.lua +93 -0
  403. data/vendor/lua/lib/lua/ssl/https.lua +138 -0
  404. data/vendor/lua/lib/lua/stable.lua +28 -0
  405. data/vendor/lua/lib/lua/std.lua +16 -0
  406. data/vendor/lua/lib/lua/strbuf.lua +32 -0
  407. data/vendor/lua/lib/lua/strict.lua +45 -0
  408. data/vendor/lua/lib/lua/string_ext.lua +274 -0
  409. data/vendor/lua/lib/lua/table_ext.lua +117 -0
  410. data/vendor/lua/lib/lua/tar.lua +262 -0
  411. data/vendor/lua/lib/lua/task.dll +0 -0
  412. data/vendor/lua/lib/lua/tree.lua +81 -0
  413. data/vendor/lua/lib/lua/unicode.dll +0 -0
  414. data/vendor/lua/lib/lua/verbose_require.lua +11 -0
  415. data/vendor/lua/lib/lua/vstruct.lua +86 -0
  416. data/vendor/lua/lib/lua/vstruct/ast.lua +192 -0
  417. data/vendor/lua/lib/lua/vstruct/ast/Bitpack.lua +33 -0
  418. data/vendor/lua/lib/lua/vstruct/ast/Generator.lua +174 -0
  419. data/vendor/lua/lib/lua/vstruct/ast/IO.lua +45 -0
  420. data/vendor/lua/lib/lua/vstruct/ast/List.lua +56 -0
  421. data/vendor/lua/lib/lua/vstruct/ast/Name.lua +20 -0
  422. data/vendor/lua/lib/lua/vstruct/ast/Repeat.lua +23 -0
  423. data/vendor/lua/lib/lua/vstruct/ast/Root.lua +19 -0
  424. data/vendor/lua/lib/lua/vstruct/ast/Table.lua +65 -0
  425. data/vendor/lua/lib/lua/vstruct/cursor.lua +81 -0
  426. data/vendor/lua/lib/lua/vstruct/io.lua +45 -0
  427. data/vendor/lua/lib/lua/vstruct/io/a.lua +24 -0
  428. data/vendor/lua/lib/lua/vstruct/io/b.lua +28 -0
  429. data/vendor/lua/lib/lua/vstruct/io/bigendian.lua +21 -0
  430. data/vendor/lua/lib/lua/vstruct/io/c.lua +25 -0
  431. data/vendor/lua/lib/lua/vstruct/io/defaults.lua +24 -0
  432. data/vendor/lua/lib/lua/vstruct/io/endianness.lua +41 -0
  433. data/vendor/lua/lib/lua/vstruct/io/f.lua +129 -0
  434. data/vendor/lua/lib/lua/vstruct/io/hostendian.lua +21 -0
  435. data/vendor/lua/lib/lua/vstruct/io/i.lua +42 -0
  436. data/vendor/lua/lib/lua/vstruct/io/littleendian.lua +21 -0
  437. data/vendor/lua/lib/lua/vstruct/io/m.lua +62 -0
  438. data/vendor/lua/lib/lua/vstruct/io/p.lua +23 -0
  439. data/vendor/lua/lib/lua/vstruct/io/s.lua +27 -0
  440. data/vendor/lua/lib/lua/vstruct/io/seekb.lua +18 -0
  441. data/vendor/lua/lib/lua/vstruct/io/seekf.lua +18 -0
  442. data/vendor/lua/lib/lua/vstruct/io/seekto.lua +18 -0
  443. data/vendor/lua/lib/lua/vstruct/io/u.lua +54 -0
  444. data/vendor/lua/lib/lua/vstruct/io/x.lua +34 -0
  445. data/vendor/lua/lib/lua/vstruct/io/z.lua +63 -0
  446. data/vendor/lua/lib/lua/vstruct/lexer.lua +100 -0
  447. data/vendor/lua/lib/lua/vstruct/pack.lua +142 -0
  448. data/vendor/lua/lib/lua/vstruct/test.lua +47 -0
  449. data/vendor/lua/lib/lua/vstruct/test/basic.lua +73 -0
  450. data/vendor/lua/lib/lua/vstruct/test/common.lua +100 -0
  451. data/vendor/lua/lib/lua/vstruct/test/fp-bigendian.lua +56 -0
  452. data/vendor/lua/lib/lua/vstruct/test/fp-littleendian.lua +56 -0
  453. data/vendor/lua/lib/lua/vstruct/test/struct-test-gen.lua +1230 -0
  454. data/vendor/lua/lib/lua/vstruct/unpack.lua +126 -0
  455. data/vendor/lua/lib/lua/wx.dll +0 -0
  456. data/vendor/lua/lib/lua/xml.lua +75 -0
  457. data/vendor/lua/lib/lua/zip.dll +0 -0
  458. data/vendor/lua/lib/lua/zlib.dll +0 -0
  459. metadata +529 -0
@@ -0,0 +1,55 @@
1
+ --- Longest Common Subsequence algorithm.
2
+ -- After pseudo-code in <a
3
+ -- href="http://www.ics.uci.edu/~eppstein/161/960229.html">lecture
4
+ -- notes</a> by <a href="mailto:eppstein@ics.uci.edu">David Eppstein</a>.
5
+ module ("lcs", package.seeall)
6
+
7
+
8
+ -- Find common subsequences.
9
+ -- @param a first sequence
10
+ -- @param b second sequence
11
+ -- @return list of common subsequences
12
+ -- @return the length of a
13
+ -- @return the length of b
14
+ local function commonSubseqs (a, b)
15
+ local l, m, n = {}, #a, #b
16
+ for i = m + 1, 1, -1 do
17
+ l[i] = {}
18
+ for j = n + 1, 1, -1 do
19
+ if i > m or j > n then
20
+ l[i][j] = 0
21
+ elseif a[i] == b[j] then
22
+ l[i][j] = 1 + l[i + 1][j + 1]
23
+ else
24
+ l[i][j] = math.max (l[i + 1][j], l[i][j + 1])
25
+ end
26
+ end
27
+ end
28
+ return l, m, n
29
+ end
30
+
31
+ --- Find the longest common subsequence of two sequences.
32
+ -- The sequence objects must have an <code>__append</code> metamethod.
33
+ -- This is provided by <code>string_ext</code> for strings, and by
34
+ -- <code>list</code> for lists.
35
+ -- @param a first sequence
36
+ -- @param b second sequence
37
+ -- @param s an empty sequence of the same type, to hold the result
38
+ -- @return the LCS of a and b
39
+ function longestCommonSubseq (a, b, s)
40
+ local l, m, n = commonSubseqs (a, b)
41
+ local i, j = 1, 1
42
+ local f = getmetatable (s).__append
43
+ while i <= m and j <= n do
44
+ if a[i] == b[j] then
45
+ s = f (s, a[i])
46
+ i = i + 1
47
+ j = j + 1
48
+ elseif l[i + 1][j] >= l[i][j + 1] then
49
+ i = i + 1
50
+ else
51
+ j = j + 1
52
+ end
53
+ end
54
+ return s
55
+ end
@@ -0,0 +1,659 @@
1
+ ------ THIS FILE IS TANGLED FROM LITERATE SOURCE FILES ------
2
+ -- Copyright (C) 2009 Tommy Pettersson <ptp@lysator.liu.se>
3
+ -- See terms in file COPYRIGHT, or at http://lemock.luaforge.net
4
+ module( 'lemock', package.seeall )
5
+ _VERSION = "LeMock 0.6"
6
+ _COPYRIGHT = "Copyright (C) 2009 Tommy Pettersson <ptp@lysator.liu.se>"
7
+ local class, object, qtostring, sfmt, add_to_set
8
+ local elements_of_set, value_equal
9
+ function object (class)
10
+ return setmetatable( {}, class )
11
+ end
12
+ function class (parent)
13
+ local c = object(parent)
14
+ c.__index = c
15
+ return c
16
+ end
17
+ sfmt = string.format
18
+ function qtostring (v)
19
+ if type(v) == 'string' then
20
+ return sfmt( '%q', v )
21
+ else
22
+ return tostring( v )
23
+ end
24
+ end
25
+ function add_to_set (o, setname, element)
26
+ if not o[setname] then
27
+ o[setname] = {}
28
+ end
29
+ local l = o[setname]
30
+ for i = 1, #l do
31
+ if l[i] == element then return end
32
+ end
33
+ l[#l+1] = element
34
+ end
35
+ function elements_of_set (o, setname)
36
+ local l = o[setname]
37
+ local i = l and #l+1 or 0
38
+ return function ()
39
+ i = i - 1
40
+ if i > 0 then return l[i] end
41
+ end
42
+ end
43
+ function value_equal (a, b)
44
+ if a == b then return true end
45
+ if a ~= a and b ~= b then return true end -- NaN == NaN
46
+ return false
47
+ end
48
+ local mock_controller_map = setmetatable( {}, {__mode='k'} )
49
+ -- All the classes are private
50
+ local Action, Argv, Callable, Controller, Mock
51
+ Action = {}
52
+ -- abstract
53
+ Action.generic = class()
54
+ function Action.generic:add_close (label)
55
+ add_to_set( self, 'closelist', label )
56
+ end
57
+ function Action.generic:add_depend (d)
58
+ add_to_set( self, 'dependlist', d )
59
+ end
60
+ function Action.generic:add_label (label)
61
+ add_to_set( self, 'labellist', label )
62
+ end
63
+ function Action.generic:assert_satisfied ()
64
+ assert( self.replay_count <= self.max_replays, "lemock internal error" )
65
+ if not (
66
+ self.min_replays <= self.replay_count
67
+ ) then
68
+ error( sfmt( "Wrong replay count %d (expected %d..%d) for %s"
69
+ , self.replay_count
70
+ , self.min_replays, self.max_replays
71
+ , self:tostring()
72
+ )
73
+ , 0
74
+ )
75
+ end
76
+ end
77
+ function Action.generic:blocks ()
78
+ if self:is_satisfied() then
79
+ return function () end
80
+ end
81
+ return elements_of_set( self, 'labellist' )
82
+ end
83
+ function Action.generic:closes ()
84
+ return elements_of_set( self, 'closelist' )
85
+ end
86
+ function Action.generic:depends ()
87
+ return elements_of_set( self, 'dependlist' )
88
+ end
89
+ function Action.generic:has_label (l)
90
+ for x in elements_of_set( self, 'labellist' ) do
91
+ if x == l then return true end
92
+ end
93
+ return false
94
+ end
95
+ function Action.generic:is_expected ()
96
+ return self.replay_count < self.max_replays
97
+ and not self.is_blocked
98
+ and not self.is_closed
99
+ end
100
+ function Action.generic:is_satisfied ()
101
+ return
102
+ self.min_replays <= self.replay_count
103
+ end
104
+ function Action.generic:match (key)
105
+ if getmetatable(self) ~= getmetatable(key) then return false end
106
+ if self.mock ~= key.mock then return false end
107
+ return self:is_expected()
108
+ end
109
+ function Action.generic:new (mock)
110
+ local a = object( self )
111
+ a.mock = mock
112
+ a.replay_count = 0
113
+ a.min_replays = 1
114
+ a.max_replays = 1
115
+ return a
116
+ end
117
+ function Action.generic:set_times (a, b)
118
+ min = a or 1
119
+ max = b or min
120
+ min, max = tonumber(min), tonumber(max)
121
+ if (not min) or (not max) or (min >= math.huge)
122
+ or (min ~= min) or (max ~= max) -- NaN
123
+ or (min < 0) or (max <= 0) or (min > max) then
124
+ error( sfmt( "Unrealistic time arguments (%s, %s)"
125
+ , qtostring( min )
126
+ , qtostring( max )
127
+ )
128
+ , 0
129
+ )
130
+ end
131
+ self.min_replays = min
132
+ self.max_replays = max
133
+ end
134
+ Action.generic_call = class( Action.generic )
135
+ Action.generic_call.can_return = true
136
+ function Action.generic_call:get_returnvalue ()
137
+ if self.has_returnvalue then
138
+ return self.returnvalue:unpack()
139
+ end
140
+ end
141
+ function Action.generic_call:set_returnvalue (...)
142
+ self.returnvalue = Argv:new(...)
143
+ self.has_returnvalue = true
144
+ end
145
+ function Action.generic_call:match (q)
146
+ if not Action.generic.match( self, q ) then return false end
147
+ if not self.argv:equal( q.argv ) then return false end
148
+ return true
149
+ end
150
+ function Action.generic_call:new (m, ...)
151
+ local a = Action.generic.new( self, m )
152
+ a.argv = Argv:new(...)
153
+ return a
154
+ end
155
+ -- concrete
156
+ Action.call = class( Action.generic_call )
157
+ function Action.call:match (q)
158
+ if not Action.generic_call.match( self, q ) then return false end
159
+ if self.key ~= q.key then return false end
160
+ return true
161
+ end
162
+ function Action.call:new (m, key, ...)
163
+ local a = Action.generic_call.new( self, m, ... )
164
+ a.key = key
165
+ return a
166
+ end
167
+ function Action.call:tostring ()
168
+ if self.has_returnvalue then
169
+ return sfmt( "call %s(%s) => %s"
170
+ , tostring(self.key)
171
+ , self.argv:tostring()
172
+ , self.returnvalue:tostring()
173
+ )
174
+ else
175
+ return sfmt( "call %s(%s)"
176
+ , tostring(self.key)
177
+ , self.argv:tostring()
178
+ )
179
+ end
180
+ end
181
+ Action.index = class( Action.generic )
182
+ Action.index.can_return = true
183
+ function Action.index:get_returnvalue ()
184
+ return self.returnvalue
185
+ end
186
+ function Action.index:set_returnvalue (v)
187
+ self.returnvalue = v
188
+ self.has_returnvalue = true
189
+ end
190
+ function Action.index:match (q)
191
+ if not Action.generic.match( self, q ) then return false end
192
+ if self.key ~= q.key then return false end
193
+ return true
194
+ end
195
+ function Action.index:new (m, key)
196
+ local a = Action.generic.new( self, m )
197
+ a.key = key
198
+ return a
199
+ end
200
+ function Action.index:tostring ()
201
+ local key = 'index '..tostring( self.key )
202
+ if self.has_returnvalue then
203
+ return sfmt( "index %s => %s"
204
+ , tostring( self.key )
205
+ , qtostring( self.returnvalue )
206
+ )
207
+ elseif self.is_callable then
208
+ return sfmt( "index %s()"
209
+ , tostring( self.key )
210
+ )
211
+ else
212
+ return sfmt( "index %s"
213
+ , tostring( self.key )
214
+ )
215
+ end
216
+ end
217
+ Action.newindex = class( Action.generic )
218
+ function Action.newindex:match (q)
219
+ if not Action.generic.match( self, q ) then return false end
220
+ if self.key ~= q.key then return false end
221
+ if not value_equal( self.val, q.val )
222
+ and self.val ~= Argv.ANYARG
223
+ and q.val ~= Argv.ANYARG then return false end
224
+ return true
225
+ end
226
+ function Action.newindex:new (m, key, val)
227
+ local a = Action.generic.new( self, m )
228
+ a.key = key
229
+ a.val = val
230
+ return a
231
+ end
232
+ function Action.newindex:tostring ()
233
+ return sfmt( "newindex %s = %s"
234
+ , tostring(self.key)
235
+ , qtostring(self.val)
236
+ )
237
+ end
238
+ Action.selfcall = class( Action.generic_call )
239
+ function Action.selfcall:match (q)
240
+ return Action.generic_call.match( self, q )
241
+ end
242
+ function Action.selfcall:new (m, ...)
243
+ local a = Action.generic_call.new( self, m, ... )
244
+ return a
245
+ end
246
+ function Action.selfcall:tostring ()
247
+ if self.has_returnvalue then
248
+ return sfmt( "selfcall (%s) => %s"
249
+ , self.argv:tostring()
250
+ , self.returnvalue:tostring()
251
+ )
252
+ else
253
+ return sfmt( "selfcall (%s)"
254
+ , self.argv:tostring()
255
+ )
256
+ end
257
+ end
258
+ Argv = class()
259
+ Argv.ANYARGS = newproxy() local ANYARGS = Argv.ANYARGS
260
+ Argv.ANYARG = newproxy() local ANYARG = Argv.ANYARG
261
+ function Argv:equal (other)
262
+ local a1, n1 = self.v, self.len
263
+ local a2, n2 = other.v, other.len
264
+ if n1-1 <= n2 and a1[n1] == ANYARGS then
265
+ n1 = n1-1
266
+ n2 = n1
267
+ elseif n2-1 <= n1 and a2[n2] == ANYARGS then
268
+ n2 = n2-1
269
+ n1 = n2
270
+ end
271
+ if n1 ~= n2 then
272
+ return false
273
+ end
274
+ for i = 1, n1 do
275
+ local v1, v2 = a1[i], a2[i]
276
+ if not value_equal(v1,v2) and v1 ~= ANYARG and v2 ~= ANYARG then
277
+ return false
278
+ end
279
+ end
280
+ return true
281
+ end
282
+ function Argv:new (...)
283
+ local av = object( self )
284
+ av.v = {...}
285
+ av.len = select('#',...)
286
+ for i = 1, av.len - 1 do
287
+ if av.v[i] == Argv.ANYARGS then
288
+ error( "ANYARGS not at end.", 0 )
289
+ end
290
+ end
291
+ return av
292
+ end
293
+ function Argv:tostring ()
294
+ local res = {}
295
+ local function w (v)
296
+ res[#res+1] = qtostring( v )
297
+ end
298
+ local av, ac = self.v, self.len
299
+ for i = 1, ac do
300
+ if av[i] == Argv.ANYARG then
301
+ res[#res+1] = 'ANYARG'
302
+ elseif av[i] == Argv.ANYARGS then
303
+ res[#res+1] = 'ANYARGS'
304
+ else
305
+ w( av[i] )
306
+ end
307
+ if i < ac then
308
+ res[#res+1] = ',' -- can not use qtostring in w()
309
+ end
310
+ end
311
+ return table.concat( res )
312
+ end
313
+ function Argv:unpack ()
314
+ return unpack( self.v, 1, self.len )
315
+ end
316
+ Callable = {}
317
+ Callable.generic = class()
318
+ Callable.record = class( Callable.generic )
319
+ Callable.replay = class( Callable.generic )
320
+ function Callable.generic:new ( index_action )
321
+ local f = object( self )
322
+ f.action = index_action
323
+ return f
324
+ end
325
+ function Callable.record:__call (...)
326
+ local index_action = self.action
327
+ local m = index_action.mock
328
+ local mc = mock_controller_map[m]
329
+ assert( mc.is_recording, "client uses cached callable from recording" )
330
+ mc:make_callable( index_action )
331
+ mc:add_action( Action.call:new( m, index_action.key, ... ))
332
+ end
333
+ function Callable.replay:__call (...)
334
+ local index_action = self.action
335
+ local m = index_action.mock
336
+ local mc = mock_controller_map[m]
337
+ local call_action = mc:lookup( Action.call:new( m, index_action.key, ... ))
338
+ mc:replay_action( call_action )
339
+ if call_action.throws_error then
340
+ error( call_action.errorvalue, 2 )
341
+ end
342
+ return call_action:get_returnvalue()
343
+ end
344
+ Controller = class()
345
+ -- Exported methods
346
+ function Controller:close (...)
347
+ if not self.is_recording then
348
+ error( "Can not insert close in replay mode.", 2 )
349
+ end
350
+ local action = self:get_last_action()
351
+ for _, close in ipairs{ ... } do
352
+ action:add_close( close )
353
+ end
354
+ return self -- for chaining
355
+ end
356
+ function Controller:depend (...)
357
+ if not self.is_recording then
358
+ error( "Can not add dependency in replay mode.", 2 )
359
+ end
360
+ local action = self:get_last_action()
361
+ for _, dependency in ipairs{ ... } do
362
+ action:add_depend( dependency )
363
+ end
364
+ return self -- for chaining
365
+ end
366
+ function Controller:error (value)
367
+ if not self.is_recording then
368
+ error( "Error called during replay.", 2 )
369
+ end
370
+ local action = self:get_last_action()
371
+ if action.has_returnvalue or action.throws_error then
372
+ error( "Returns and/or Error called twice for same action.", 2 )
373
+ end
374
+ action.throws_error = true
375
+ action.errorvalue = value
376
+ return self -- for chaining
377
+ end
378
+ function Controller:label (...)
379
+ if not self.is_recording then
380
+ error( "Can not add labels in replay mode.", 2 )
381
+ end
382
+ local action = self:get_last_action()
383
+ for _, label in ipairs{ ... } do
384
+ action:add_label( label )
385
+ end
386
+ return self -- for chaining
387
+ end
388
+ function Controller:mock ()
389
+ if not self.is_recording then
390
+ error( "New mock during replay.", 2 )
391
+ end
392
+ local m = object( Mock.record )
393
+ mock_controller_map[m] = self
394
+ return m
395
+ end
396
+ function Controller:new ()
397
+ local mc = object( self )
398
+ mc.actionlist = {}
399
+ mc.is_recording = true
400
+ return mc
401
+ end
402
+ function Controller:replay ()
403
+ if not self.is_recording then
404
+ error( "Replay called twice.", 2 )
405
+ end
406
+ self.is_recording = false
407
+ for m, mc in pairs( mock_controller_map ) do
408
+ if mc == self then
409
+ setmetatable( m, Mock.replay )
410
+ end
411
+ end
412
+ self:update_dependencies()
413
+ self:assert_no_dependency_cycles()
414
+ end
415
+ function Controller:returns (...)
416
+ if not self.is_recording then
417
+ error( "Returns called during replay.", 2 )
418
+ end
419
+ local action = self:get_last_action()
420
+ assert( not action.is_callable, "lemock internal error" )
421
+ if not action.can_return then
422
+ error( "Previous action can not return anything.", 2 )
423
+ end
424
+ if action.has_returnvalue or action.throws_error then
425
+ error( "Returns and/or Error called twice for same action.", 2 )
426
+ end
427
+ action:set_returnvalue(...)
428
+ return self -- for chaining
429
+ end
430
+ function Controller:times (min, max)
431
+ if not self.is_recording then
432
+ error( "Can not set times in replay mode.", 0 )
433
+ end
434
+ self:get_last_action():set_times( min, max )
435
+ return self -- for chaining
436
+ end
437
+ -- convenience functions
438
+ function Controller:anytimes() return self:times( 0, math.huge ) end
439
+ function Controller:atleastonce() return self:times( 1, math.huge ) end
440
+ function Controller:verify ()
441
+ if self.is_recording then
442
+ error( "Verify called during record.", 2 )
443
+ end
444
+ for a in self:actions() do
445
+ a:assert_satisfied()
446
+ end
447
+ end
448
+ -- Protected methods
449
+ function Controller:actions (q)
450
+ local l = self.actionlist
451
+ local i = 0
452
+ return function ()
453
+ i = i + 1
454
+ return l[i]
455
+ end
456
+ end
457
+ function Controller:add_action (a)
458
+ assert( a ~= nil, "lemock internal error" ) -- breaks array property
459
+ table.insert( self.actionlist, a )
460
+ end
461
+ function Controller:assert_no_dependency_cycles ()
462
+ local function is_in_path (label, path)
463
+ if not path then return false end -- is root
464
+ for _, l in ipairs( path ) do
465
+ if l == label then return true end
466
+ end
467
+ if path.prev then return is_in_path( label, path.prev ) end
468
+ return false
469
+ end
470
+ local function can_block (action, node)
471
+ for _, label in ipairs( node ) do
472
+ if action:has_label( label ) then return true end
473
+ end
474
+ return false
475
+ end
476
+ local function step (action, path)
477
+ local new_head
478
+ for label in action:depends() do
479
+ if is_in_path( label, path ) then
480
+ error( "Detected dependency cycle", 0 )
481
+ end
482
+ -- only create table if needed to reduce garbage
483
+ if not new_head then new_head = { prev=path } end
484
+ new_head[#new_head+1] = label
485
+ end
486
+ return new_head
487
+ end
488
+ local function search_depth_first (path)
489
+ for action in self:actions() do
490
+ if can_block( action, path ) then
491
+ local new_head = step( action, path )
492
+ if new_head then
493
+ search_depth_first( new_head )
494
+ end
495
+ end
496
+ end
497
+ end
498
+ for action in self:actions() do
499
+ local root = step( action, nil )
500
+ if root then search_depth_first( root ) end
501
+ end
502
+ end
503
+ function Controller:close_actions( ... ) -- takes iterator
504
+ for label in ... do
505
+ for candidate in self:actions() do
506
+ if candidate:has_label( label ) then
507
+ if not candidate:is_satisfied() then
508
+ error( "Closes unsatisfied action: "..candidate:tostring(), 0 )
509
+ end
510
+ candidate.is_closed = true
511
+ end
512
+ end
513
+ end
514
+ end
515
+ function Controller:get_last_action ()
516
+ local l = self.actionlist
517
+ if #l == 0 then
518
+ error( "No action is recorded yet.", 0 )
519
+ end
520
+ return l[#l]
521
+ end
522
+ function Controller:lookup (actual)
523
+ for action in self:actions() do
524
+ if action:match( actual ) then
525
+ return action
526
+ end
527
+ end
528
+ local expected = {}
529
+ for _, a in ipairs( self.actionlist ) do
530
+ if a:is_expected() and not a.is_callable then
531
+ expected[#expected+1] = a:tostring()
532
+ end
533
+ end
534
+ table.sort( expected )
535
+ if #expected == 0 then
536
+ expected[1] = "(Nothing)"
537
+ end
538
+ error( sfmt( "Unexpected action %s, expected:\n%s\n"
539
+ , actual:tostring()
540
+ , table.concat(expected,'\n')
541
+ )
542
+ , 0
543
+ )
544
+ end
545
+ function Controller:make_callable (action)
546
+ if action.has_returnvalue then
547
+ error( "Can not call "..action.key..". It has a returnvalue.", 0 )
548
+ end
549
+ action.is_callable = true
550
+ action.min_replays = 0
551
+ action.max_replays = math.huge
552
+ end
553
+ function Controller:new ()
554
+ local mc = object( self )
555
+ mc.actionlist = {}
556
+ mc.is_recording = true
557
+ return mc
558
+ end
559
+ function Controller:replay_action ( action )
560
+ assert( action:is_expected(), "lemock internal error" )
561
+ assert( action.replay_count < action.max_replays, "lemock internal error" )
562
+ local was_satisfied = action:is_satisfied()
563
+ action.replay_count = action.replay_count + 1
564
+ if not was_satisfied and action.labellist and action:is_satisfied() then
565
+ self:update_dependencies()
566
+ end
567
+ if action.closelist then
568
+ self:close_actions( action:closes() )
569
+ end
570
+ end
571
+ function Controller:update_dependencies ()
572
+ local blocked = {}
573
+ for action in self:actions() do
574
+ for label in action:blocks() do
575
+ blocked[label] = true
576
+ end
577
+ end
578
+ local function is_blocked (action)
579
+ for label in action:depends() do
580
+ if blocked[label] then return true end
581
+ end
582
+ return false
583
+ end
584
+ for action in self:actions() do
585
+ action.is_blocked = is_blocked( action )
586
+ end
587
+ end
588
+ Mock = { record={}, replay={} } -- no self-referencing __index!
589
+ function Mock.record:__index (key)
590
+ local mc = mock_controller_map[self]
591
+ local action = Action.index:new( self, key )
592
+ mc:add_action( action )
593
+ return Callable.record:new( action )
594
+ end
595
+ function Mock.record:__newindex (key, val)
596
+ local mc = mock_controller_map[self]
597
+ mc:add_action( Action.newindex:new( self, key, val ))
598
+ end
599
+ function Mock.record:__call (...)
600
+ local mc = mock_controller_map[self]
601
+ mc:add_action( Action.selfcall:new( self, ... ))
602
+ end
603
+ function Mock.replay:__index (key)
604
+ local mc = mock_controller_map[self]
605
+ local index_action = mc:lookup( Action.index:new( self, key ))
606
+ mc:replay_action( index_action )
607
+ if index_action.throws_error then
608
+ error( index_action.errorvalue, 2 )
609
+ end
610
+ if index_action.is_callable then
611
+ return Callable.replay:new( index_action )
612
+ else
613
+ return index_action:get_returnvalue()
614
+ end
615
+ end
616
+ function Mock.replay:__newindex (key, val)
617
+ local mc = mock_controller_map[self]
618
+ local newindex_action = mc:lookup( Action.newindex:new( self, key, val ))
619
+ mc:replay_action( newindex_action )
620
+ if newindex_action.throws_error then
621
+ error( newindex_action.errorvalue, 2 )
622
+ end
623
+ end
624
+ function Mock.replay:__call (...)
625
+ local mc = mock_controller_map[self]
626
+ local selfcall_action = mc:lookup( Action.selfcall:new( self, ... ))
627
+ mc:replay_action( selfcall_action )
628
+ if selfcall_action.throws_error then
629
+ error( selfcall_action.errorvalue, 2 )
630
+ end
631
+ return selfcall_action:get_returnvalue()
632
+ end
633
+ function controller ()
634
+ local exported_methods = {
635
+ 'anytimes',
636
+ 'atleastonce',
637
+ 'close',
638
+ 'depend',
639
+ 'error',
640
+ 'label',
641
+ 'mock',
642
+ 'new',
643
+ 'replay',
644
+ 'returns',
645
+ 'times',
646
+ 'verify',
647
+ }
648
+ local mc = Controller:new()
649
+ local wrapper = {}
650
+ for _, method in ipairs( exported_methods ) do
651
+ wrapper[ method ] = function (self, ...)
652
+ return mc[ method ]( mc, ... )
653
+ end
654
+ end
655
+ wrapper.ANYARG = Argv.ANYARG
656
+ wrapper.ANYARGS = Argv.ANYARGS
657
+ return wrapper
658
+ end
659
+ return _M