rufus-lua-win 5.1.5

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.
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