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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +69 -0
- data/Rakefile +1 -0
- data/lib/rufus/lua/win.rb +18 -0
- data/lib/rufus/lua/win/version.rb +7 -0
- data/rufus-lua-win.gemspec +23 -0
- data/vendor/lua/bin/liblua.dll +0 -0
- data/vendor/lua/lib/lua/LuaXml.lua +119 -0
- data/vendor/lua/lib/lua/alien.lua +250 -0
- data/vendor/lua/lib/lua/alien/core.dll +0 -0
- data/vendor/lua/lib/lua/alien/struct.dll +0 -0
- data/vendor/lua/lib/lua/base.lua +536 -0
- data/vendor/lua/lib/lua/bin.lua +20 -0
- data/vendor/lua/lib/lua/bit.dll +0 -0
- data/vendor/lua/lib/lua/cdlua.dll +0 -0
- data/vendor/lua/lib/lua/cdluacontextplus.dll +0 -0
- data/vendor/lua/lib/lua/cdluagl.dll +0 -0
- data/vendor/lua/lib/lua/cdluaim.dll +0 -0
- data/vendor/lua/lib/lua/cdluapdf.dll +0 -0
- data/vendor/lua/lib/lua/copas.lua +543 -0
- data/vendor/lua/lib/lua/coxpcall.lua +57 -0
- data/vendor/lua/lib/lua/date.lua +745 -0
- data/vendor/lua/lib/lua/debug_ext.lua +84 -0
- data/vendor/lua/lib/lua/debug_init.lua +2 -0
- data/vendor/lua/lib/lua/des56.dll +0 -0
- data/vendor/lua/lib/lua/dist/config.lua +109 -0
- data/vendor/lua/lib/lua/dist/constraints.lua +271 -0
- data/vendor/lua/lib/lua/dist/depends.lua +601 -0
- data/vendor/lua/lib/lua/dist/git.lua +307 -0
- data/vendor/lua/lib/lua/dist/init.lua +278 -0
- data/vendor/lua/lib/lua/dist/manifest.lua +225 -0
- data/vendor/lua/lib/lua/dist/package.lua +583 -0
- data/vendor/lua/lib/lua/dist/sys.lua +367 -0
- data/vendor/lua/lib/lua/dist/utils.lua +130 -0
- data/vendor/lua/lib/lua/ex.dll +0 -0
- data/vendor/lua/lib/lua/fstable.lua +116 -0
- data/vendor/lua/lib/lua/getopt.lua +273 -0
- data/vendor/lua/lib/lua/git.lua +5 -0
- data/vendor/lua/lib/lua/git/core.dll +0 -0
- data/vendor/lua/lib/lua/git/objects.lua +121 -0
- data/vendor/lua/lib/lua/git/pack.lua +316 -0
- data/vendor/lua/lib/lua/git/protocol.lua +188 -0
- data/vendor/lua/lib/lua/git/repo.lua +283 -0
- data/vendor/lua/lib/lua/git/util.lua +233 -0
- data/vendor/lua/lib/lua/gzio.dll +0 -0
- data/vendor/lua/lib/lua/gzip.lua +81 -0
- data/vendor/lua/lib/lua/iconv.dll +0 -0
- data/vendor/lua/lib/lua/imlua.dll +0 -0
- data/vendor/lua/lib/lua/imlua_fftw.dll +0 -0
- data/vendor/lua/lib/lua/imlua_jp2.dll +0 -0
- data/vendor/lua/lib/lua/imlua_process.dll +0 -0
- data/vendor/lua/lib/lua/imlua_process_omp.dll +0 -0
- data/vendor/lua/lib/lua/io_ext.lua +115 -0
- data/vendor/lua/lib/lua/iuplua.dll +0 -0
- data/vendor/lua/lib/lua/iuplua_mglplot.dll +0 -0
- data/vendor/lua/lib/lua/iuplua_pplot.dll +0 -0
- data/vendor/lua/lib/lua/iupluacd.dll +0 -0
- data/vendor/lua/lib/lua/iupluacontrols.dll +0 -0
- data/vendor/lua/lib/lua/iupluagl.dll +0 -0
- data/vendor/lua/lib/lua/iupluaim.dll +0 -0
- data/vendor/lua/lib/lua/iupluaimglib.dll +0 -0
- data/vendor/lua/lib/lua/iupluatuio.dll +0 -0
- data/vendor/lua/lib/lua/lanes-keeper.lua +302 -0
- data/vendor/lua/lib/lua/lanes.lua +591 -0
- data/vendor/lua/lib/lua/lanes/core.dll +0 -0
- data/vendor/lua/lib/lua/lcs.lua +55 -0
- data/vendor/lua/lib/lua/lemock.lua +659 -0
- data/vendor/lua/lib/lua/lfs.dll +0 -0
- data/vendor/lua/lib/lua/list.lua +375 -0
- data/vendor/lua/lib/lua/logging.lua +189 -0
- data/vendor/lua/lib/lua/logging/console.lua +22 -0
- data/vendor/lua/lib/lua/logging/email.lua +44 -0
- data/vendor/lua/lib/lua/logging/file.lua +55 -0
- data/vendor/lua/lib/lua/logging/rolling_file.lua +81 -0
- data/vendor/lua/lib/lua/logging/socket.lua +35 -0
- data/vendor/lua/lib/lua/logging/sql.lua +64 -0
- data/vendor/lua/lib/lua/loop/base.lua +68 -0
- data/vendor/lua/lib/lua/loop/cached.lua +312 -0
- data/vendor/lua/lib/lua/loop/collection/MapWithArrayOfKeys.lua +64 -0
- data/vendor/lua/lib/lua/loop/collection/ObjectCache.lua +39 -0
- data/vendor/lua/lib/lua/loop/collection/OrderedSet.lua +164 -0
- data/vendor/lua/lib/lua/loop/collection/PriorityQueue.lua +86 -0
- data/vendor/lua/lib/lua/loop/collection/UnorderedArray.lua +32 -0
- data/vendor/lua/lib/lua/loop/collection/UnorderedArraySet.lua +56 -0
- data/vendor/lua/lib/lua/loop/compiler/Arguments.lua +108 -0
- data/vendor/lua/lib/lua/loop/compiler/Conditional.lua +50 -0
- data/vendor/lua/lib/lua/loop/compiler/Expression.lua +215 -0
- data/vendor/lua/lib/lua/loop/component/base.lua +221 -0
- data/vendor/lua/lib/lua/loop/component/contained.lua +71 -0
- data/vendor/lua/lib/lua/loop/component/dynamic.lua +223 -0
- data/vendor/lua/lib/lua/loop/component/intercepted.lua +354 -0
- data/vendor/lua/lib/lua/loop/component/wrapped.lua +195 -0
- data/vendor/lua/lib/lua/loop/debug/Inspector.lua +521 -0
- data/vendor/lua/lib/lua/loop/debug/Matcher.lua +192 -0
- data/vendor/lua/lib/lua/loop/debug/Verbose.lua +266 -0
- data/vendor/lua/lib/lua/loop/debug/Viewer.lua +200 -0
- data/vendor/lua/lib/lua/loop/multiple.lua +105 -0
- data/vendor/lua/lib/lua/loop/object/Exception.lua +57 -0
- data/vendor/lua/lib/lua/loop/object/Publisher.lua +43 -0
- data/vendor/lua/lib/lua/loop/object/Wrapper.lua +39 -0
- data/vendor/lua/lib/lua/loop/scoped.lua +585 -0
- data/vendor/lua/lib/lua/loop/serial/FileStream.lua +48 -0
- data/vendor/lua/lib/lua/loop/serial/Serializer.lua +291 -0
- data/vendor/lua/lib/lua/loop/serial/SocketStream.lua +51 -0
- data/vendor/lua/lib/lua/loop/serial/StringStream.lua +47 -0
- data/vendor/lua/lib/lua/loop/simple.lua +75 -0
- data/vendor/lua/lib/lua/loop/table.lua +71 -0
- data/vendor/lua/lib/lua/loop/thread/CoSocket.lua +416 -0
- data/vendor/lua/lib/lua/loop/thread/IOScheduler.lua +170 -0
- data/vendor/lua/lib/lua/loop/thread/Scheduler.lua +327 -0
- data/vendor/lua/lib/lua/loop/thread/SocketScheduler.lua +88 -0
- data/vendor/lua/lib/lua/loop/thread/Timer.lua +54 -0
- data/vendor/lua/lib/lua/lpeg.dll +0 -0
- data/vendor/lua/lib/lua/ltn12.lua +292 -0
- data/vendor/lua/lib/lua/luaXML_lib.dll +0 -0
- data/vendor/lua/lib/lua/luacurl.dll +0 -0
- data/vendor/lua/lib/lua/luadoc/config.lua +34 -0
- data/vendor/lua/lib/lua/luadoc/doclet/debug.lua +46 -0
- data/vendor/lua/lib/lua/luadoc/doclet/formatter.lua +84 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html.lua +289 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/file.lp +113 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/function.lp +64 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/index.lp +70 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/luadoc.css +286 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/menu.lp +55 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/module.lp +109 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/table.lp +15 -0
- data/vendor/lua/lib/lua/luadoc/doclet/raw.lua +12 -0
- data/vendor/lua/lib/lua/luadoc/init.lua +58 -0
- data/vendor/lua/lib/lua/luadoc/lp.lua +130 -0
- data/vendor/lua/lib/lua/luadoc/taglet/standard.lua +495 -0
- data/vendor/lua/lib/lua/luadoc/taglet/standard/tags.lua +171 -0
- data/vendor/lua/lib/lua/luadoc/util.lua +233 -0
- data/vendor/lua/lib/lua/luagl.dll +0 -0
- data/vendor/lua/lib/lua/luaglu.dll +0 -0
- data/vendor/lua/lib/lua/luaidl.lua +113 -0
- data/vendor/lua/lib/lua/luaidl/lex.lua +793 -0
- data/vendor/lua/lib/lua/luaidl/pre.lua +149 -0
- data/vendor/lua/lib/lua/luaidl/sin.lua +3631 -0
- data/vendor/lua/lib/lua/luarocks/add.lua +108 -0
- data/vendor/lua/lib/lua/luarocks/admin_remove.lua +87 -0
- data/vendor/lua/lib/lua/luarocks/build.lua +330 -0
- data/vendor/lua/lib/lua/luarocks/build/builtin.lua +253 -0
- data/vendor/lua/lib/lua/luarocks/build/cmake.lua +54 -0
- data/vendor/lua/lib/lua/luarocks/build/command.lua +32 -0
- data/vendor/lua/lib/lua/luarocks/build/make.lua +92 -0
- data/vendor/lua/lib/lua/luarocks/cache.lua +85 -0
- data/vendor/lua/lib/lua/luarocks/cfg.lua +449 -0
- data/vendor/lua/lib/lua/luarocks/command_line.lua +163 -0
- data/vendor/lua/lib/lua/luarocks/deps.lua +654 -0
- data/vendor/lua/lib/lua/luarocks/dir.lua +69 -0
- data/vendor/lua/lib/lua/luarocks/download.lua +90 -0
- data/vendor/lua/lib/lua/luarocks/fetch.lua +321 -0
- data/vendor/lua/lib/lua/luarocks/fetch/cvs.lua +44 -0
- data/vendor/lua/lib/lua/luarocks/fetch/git.lua +81 -0
- data/vendor/lua/lib/lua/luarocks/fetch/git_file.lua +17 -0
- data/vendor/lua/lib/lua/luarocks/fetch/hg.lua +54 -0
- data/vendor/lua/lib/lua/luarocks/fetch/sscm.lua +42 -0
- data/vendor/lua/lib/lua/luarocks/fetch/svn.lua +53 -0
- data/vendor/lua/lib/lua/luarocks/fs.lua +40 -0
- data/vendor/lua/lib/lua/luarocks/fs/lua.lua +676 -0
- data/vendor/lua/lib/lua/luarocks/fs/unix.lua +88 -0
- data/vendor/lua/lib/lua/luarocks/fs/unix/tools.lua +325 -0
- data/vendor/lua/lib/lua/luarocks/fs/win32.lua +107 -0
- data/vendor/lua/lib/lua/luarocks/fs/win32/tools.lua +334 -0
- data/vendor/lua/lib/lua/luarocks/help.lua +101 -0
- data/vendor/lua/lib/lua/luarocks/index.lua +172 -0
- data/vendor/lua/lib/lua/luarocks/install.lua +151 -0
- data/vendor/lua/lib/lua/luarocks/list.lua +35 -0
- data/vendor/lua/lib/lua/luarocks/loader.lua +228 -0
- data/vendor/lua/lib/lua/luarocks/make.lua +71 -0
- data/vendor/lua/lib/lua/luarocks/make_manifest.lua +34 -0
- data/vendor/lua/lib/lua/luarocks/manif.lua +360 -0
- data/vendor/lua/lib/lua/luarocks/manif_core.lua +75 -0
- data/vendor/lua/lib/lua/luarocks/new_version.lua +141 -0
- data/vendor/lua/lib/lua/luarocks/pack.lua +205 -0
- data/vendor/lua/lib/lua/luarocks/path.lua +315 -0
- data/vendor/lua/lib/lua/luarocks/persist.lua +173 -0
- data/vendor/lua/lib/lua/luarocks/refresh_cache.lua +30 -0
- data/vendor/lua/lib/lua/luarocks/remove.lua +135 -0
- data/vendor/lua/lib/lua/luarocks/rep.lua +313 -0
- data/vendor/lua/lib/lua/luarocks/require.lua +6 -0
- data/vendor/lua/lib/lua/luarocks/search.lua +399 -0
- data/vendor/lua/lib/lua/luarocks/show.lua +138 -0
- data/vendor/lua/lib/lua/luarocks/site_config.lua +23 -0
- data/vendor/lua/lib/lua/luarocks/tools/patch.lua +712 -0
- data/vendor/lua/lib/lua/luarocks/tools/tar.lua +144 -0
- data/vendor/lua/lib/lua/luarocks/tools/zip.lua +245 -0
- data/vendor/lua/lib/lua/luarocks/type_check.lua +267 -0
- data/vendor/lua/lib/lua/luarocks/unpack.lua +151 -0
- data/vendor/lua/lib/lua/luarocks/util.lua +420 -0
- data/vendor/lua/lib/lua/luarocks/validate.lua +164 -0
- data/vendor/lua/lib/lua/luars232.dll +0 -0
- data/vendor/lua/lib/lua/luasql/mysql.dll +0 -0
- data/vendor/lua/lib/lua/luasql/postgres.dll +0 -0
- data/vendor/lua/lib/lua/luasql/sqlite3.dll +0 -0
- data/vendor/lua/lib/lua/luaunit.lua +601 -0
- data/vendor/lua/lib/lua/lxp.dll +0 -0
- data/vendor/lua/lib/lua/lxp/lom.lua +60 -0
- data/vendor/lua/lib/lua/math_ext.lua +27 -0
- data/vendor/lua/lib/lua/mbox.lua +53 -0
- data/vendor/lua/lib/lua/md5.lua +19 -0
- data/vendor/lua/lib/lua/md5/core.dll +0 -0
- data/vendor/lua/lib/lua/metalua.lua +0 -0
- data/vendor/lua/lib/lua/metalua/ast_to_string.mlua +553 -0
- data/vendor/lua/lib/lua/metalua/base.lua +104 -0
- data/vendor/lua/lib/lua/metalua/bytecode.lua +0 -0
- data/vendor/lua/lib/lua/metalua/clopts.mlua +204 -0
- data/vendor/lua/lib/lua/metalua/compiler.lua +3 -0
- data/vendor/lua/lib/lua/metalua/dollar.mlua +24 -0
- data/vendor/lua/lib/lua/metalua/extension/H-runtime.mlua +216 -0
- data/vendor/lua/lib/lua/metalua/extension/H.mlua +22 -0
- data/vendor/lua/lib/lua/metalua/extension/anaphoric.mlua +54 -0
- data/vendor/lua/lib/lua/metalua/extension/clist.mlua +149 -0
- data/vendor/lua/lib/lua/metalua/extension/continue.mlua +53 -0
- data/vendor/lua/lib/lua/metalua/extension/localin.mlua +2 -0
- data/vendor/lua/lib/lua/metalua/extension/log.mlua +39 -0
- data/vendor/lua/lib/lua/metalua/extension/match.mlua +374 -0
- data/vendor/lua/lib/lua/metalua/extension/ternary.mlua +10 -0
- data/vendor/lua/lib/lua/metalua/extension/trycatch.mlua +189 -0
- data/vendor/lua/lib/lua/metalua/extension/types-runtime.mlua +159 -0
- data/vendor/lua/lib/lua/metalua/extension/types.mlua +352 -0
- data/vendor/lua/lib/lua/metalua/extension/withdo.mlua +30 -0
- data/vendor/lua/lib/lua/metalua/extension/xglobal-runtime.lua +41 -0
- data/vendor/lua/lib/lua/metalua/extension/xglobal.mlua +20 -0
- data/vendor/lua/lib/lua/metalua/extension/xloop.mlua +100 -0
- data/vendor/lua/lib/lua/metalua/extension/xmatch.mlua +216 -0
- data/vendor/lua/lib/lua/metalua/metaloop.mlua +76 -0
- data/vendor/lua/lib/lua/metalua/mlc.lua +0 -0
- data/vendor/lua/lib/lua/metalua/mlc_xcall.lua +119 -0
- data/vendor/lua/lib/lua/metalua/mlp.lua +0 -0
- data/vendor/lua/lib/lua/metalua/package2.lua +101 -0
- data/vendor/lua/lib/lua/metalua/runtime.lua +3 -0
- data/vendor/lua/lib/lua/metalua/string2.lua +44 -0
- data/vendor/lua/lib/lua/metalua/table2.lua +372 -0
- data/vendor/lua/lib/lua/metalua/walk.mlua +304 -0
- data/vendor/lua/lib/lua/metalua/walk/bindings.mlua +41 -0
- data/vendor/lua/lib/lua/metalua/walk/id.mlua +186 -0
- data/vendor/lua/lib/lua/metalua/walk/scope.lua +54 -0
- data/vendor/lua/lib/lua/mime.lua +87 -0
- data/vendor/lua/lib/lua/mime/core.dll +0 -0
- data/vendor/lua/lib/lua/mobdebug.lua +1484 -0
- data/vendor/lua/lib/lua/modules.lua +16 -0
- data/vendor/lua/lib/lua/object.lua +56 -0
- data/vendor/lua/lib/lua/oil/Exception.lua +26 -0
- data/vendor/lua/lib/lua/oil/arch.lua +27 -0
- data/vendor/lua/lib/lua/oil/arch/basic/client.lua +29 -0
- data/vendor/lua/lib/lua/oil/arch/basic/common.lua +13 -0
- data/vendor/lua/lib/lua/oil/arch/basic/server.lua +27 -0
- data/vendor/lua/lib/lua/oil/arch/cooperative/common.lua +10 -0
- data/vendor/lua/lib/lua/oil/arch/cooperative/server.lua +16 -0
- data/vendor/lua/lib/lua/oil/arch/corba/client.lua +39 -0
- data/vendor/lua/lib/lua/oil/arch/corba/common.lua +58 -0
- data/vendor/lua/lib/lua/oil/arch/corba/intercepted/client.lua +9 -0
- data/vendor/lua/lib/lua/oil/arch/corba/intercepted/server.lua +9 -0
- data/vendor/lua/lib/lua/oil/arch/corba/server.lua +35 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/byref.lua +18 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/client.lua +19 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/common.lua +18 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/server.lua +19 -0
- data/vendor/lua/lib/lua/oil/arch/typed/client.lua +27 -0
- data/vendor/lua/lib/lua/oil/arch/typed/common.lua +9 -0
- data/vendor/lua/lib/lua/oil/arch/typed/server.lua +18 -0
- data/vendor/lua/lib/lua/oil/assert.lua +87 -0
- data/vendor/lua/lib/lua/oil/builder.lua +45 -0
- data/vendor/lua/lib/lua/oil/builder/basic/client.lua +31 -0
- data/vendor/lua/lib/lua/oil/builder/basic/common.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/basic/server.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/cooperative/common.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/cooperative/server.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/corba/client.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/corba/common.lua +24 -0
- data/vendor/lua/lib/lua/oil/builder/corba/gencode.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/corba/intercepted/client.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/corba/intercepted/server.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/corba/server.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/lua/client.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/lua/server.lua +12 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/byref.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/client.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/common.lua +14 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/server.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/typed/client.lua +16 -0
- data/vendor/lua/lib/lua/oil/builder/typed/server.lua +12 -0
- data/vendor/lua/lib/lua/oil/compat.lua +846 -0
- data/vendor/lua/lib/lua/oil/component.lua +1 -0
- data/vendor/lua/lib/lua/oil/corba/giop.lua +301 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Codec.lua +1568 -0
- data/vendor/lua/lib/lua/oil/corba/giop/CodecGen.lua +589 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Exception.lua +25 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Indexer.lua +63 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Listener.lua +343 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Messenger.lua +228 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Referrer.lua +180 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Requester.lua +462 -0
- data/vendor/lua/lib/lua/oil/corba/idl.lua +597 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Compiler.lua +133 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Importer.lua +235 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Indexer.lua +95 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Registry.lua +1821 -0
- data/vendor/lua/lib/lua/oil/corba/idl/ir.lua +847 -0
- data/vendor/lua/lib/lua/oil/corba/idl/sysex.lua +21 -0
- data/vendor/lua/lib/lua/oil/corba/iiop/Profiler.lua +200 -0
- data/vendor/lua/lib/lua/oil/corba/intercepted/Listener.lua +158 -0
- data/vendor/lua/lib/lua/oil/corba/intercepted/Requester.lua +181 -0
- data/vendor/lua/lib/lua/oil/corba/services/event.lua +126 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/ConsumerAdmin.lua +50 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/EventFactory.lua +15 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/EventQueue.lua +37 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushConsumer.lua +75 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushSupplier.lua +62 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/SingleDeferredDispatcher.lua +60 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/SingleSynchronousDispatcher.lua +39 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/SupplierAdmin.lua +50 -0
- data/vendor/lua/lib/lua/oil/corba/services/naming.lua +436 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Acceptor.lua +268 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Channels.lua +121 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Connector.lua +147 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Dispatcher.lua +99 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies.lua +86 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/asynchronous.lua +56 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/protected.lua +17 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/synchronous.lua +17 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/utils.lua +29 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Receiver.lua +110 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Servants.lua +207 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Sockets.lua +44 -0
- data/vendor/lua/lib/lua/oil/kernel/cooperative/Receiver.lua +139 -0
- data/vendor/lua/lib/lua/oil/kernel/intercepted/Listener.lua +47 -0
- data/vendor/lua/lib/lua/oil/kernel/intercepted/Requester.lua +58 -0
- data/vendor/lua/lib/lua/oil/kernel/lua/Dispatcher.lua +76 -0
- data/vendor/lua/lib/lua/oil/kernel/lua/Proxies.lua +69 -0
- data/vendor/lua/lib/lua/oil/kernel/typed/Dispatcher.lua +91 -0
- data/vendor/lua/lib/lua/oil/kernel/typed/Proxies.lua +153 -0
- data/vendor/lua/lib/lua/oil/kernel/typed/Servants.lua +137 -0
- data/vendor/lua/lib/lua/oil/ludo/Codec.lua +66 -0
- data/vendor/lua/lib/lua/oil/ludo/CodecByRef.lua +103 -0
- data/vendor/lua/lib/lua/oil/ludo/Listener.lua +151 -0
- data/vendor/lua/lib/lua/oil/ludo/Referrer.lua +72 -0
- data/vendor/lua/lib/lua/oil/ludo/Requester.lua +107 -0
- data/vendor/lua/lib/lua/oil/oo.lua +1 -0
- data/vendor/lua/lib/lua/oil/port.lua +1 -0
- data/vendor/lua/lib/lua/oil/properties.lua +57 -0
- data/vendor/lua/lib/lua/oil/verbose.lua +133 -0
- data/vendor/lua/lib/lua/package_ext.lua +15 -0
- data/vendor/lua/lib/lua/parser.lua +268 -0
- data/vendor/lua/lib/lua/pl/Date.lua +555 -0
- data/vendor/lua/lib/lua/pl/List.lua +613 -0
- data/vendor/lua/lib/lua/pl/Map.lua +113 -0
- data/vendor/lua/lib/lua/pl/MultiMap.lua +62 -0
- data/vendor/lua/lib/lua/pl/OrderedMap.lua +151 -0
- data/vendor/lua/lib/lua/pl/Set.lua +153 -0
- data/vendor/lua/lib/lua/pl/app.lua +165 -0
- data/vendor/lua/lib/lua/pl/array2d.lua +501 -0
- data/vendor/lua/lib/lua/pl/class.lua +180 -0
- data/vendor/lua/lib/lua/pl/comprehension.lua +286 -0
- data/vendor/lua/lib/lua/pl/config.lua +176 -0
- data/vendor/lua/lib/lua/pl/data.lua +606 -0
- data/vendor/lua/lib/lua/pl/dir.lua +475 -0
- data/vendor/lua/lib/lua/pl/file.lua +70 -0
- data/vendor/lua/lib/lua/pl/func.lua +376 -0
- data/vendor/lua/lib/lua/pl/init.lua +68 -0
- data/vendor/lua/lib/lua/pl/input.lua +173 -0
- data/vendor/lua/lib/lua/pl/lapp.lua +407 -0
- data/vendor/lua/lib/lua/pl/lexer.lua +456 -0
- data/vendor/lua/lib/lua/pl/luabalanced.lua +264 -0
- data/vendor/lua/lib/lua/pl/operator.lua +201 -0
- data/vendor/lua/lib/lua/pl/path.lua +398 -0
- data/vendor/lua/lib/lua/pl/permute.lua +63 -0
- data/vendor/lua/lib/lua/pl/platf/luajava.lua +101 -0
- data/vendor/lua/lib/lua/pl/pretty.lua +285 -0
- data/vendor/lua/lib/lua/pl/seq.lua +551 -0
- data/vendor/lua/lib/lua/pl/sip.lua +344 -0
- data/vendor/lua/lib/lua/pl/strict.lua +70 -0
- data/vendor/lua/lib/lua/pl/stringio.lua +158 -0
- data/vendor/lua/lib/lua/pl/stringx.lua +440 -0
- data/vendor/lua/lib/lua/pl/tablex.lua +817 -0
- data/vendor/lua/lib/lua/pl/template.lua +103 -0
- data/vendor/lua/lib/lua/pl/test.lua +135 -0
- data/vendor/lua/lib/lua/pl/text.lua +243 -0
- data/vendor/lua/lib/lua/pl/utils.lua +550 -0
- data/vendor/lua/lib/lua/pl/xml.lua +689 -0
- data/vendor/lua/lib/lua/profiler.dll +0 -0
- data/vendor/lua/lib/lua/re.lua +248 -0
- data/vendor/lua/lib/lua/rex_onig.dll +0 -0
- data/vendor/lua/lib/lua/rex_pcre.dll +0 -0
- data/vendor/lua/lib/lua/rex_posix.dll +0 -0
- data/vendor/lua/lib/lua/rings.dll +0 -0
- data/vendor/lua/lib/lua/serialize.lua +193 -0
- data/vendor/lua/lib/lua/set.lua +149 -0
- data/vendor/lua/lib/lua/socket.lua +133 -0
- data/vendor/lua/lib/lua/socket/core.dll +0 -0
- data/vendor/lua/lib/lua/socket/ftp.lua +281 -0
- data/vendor/lua/lib/lua/socket/http.lua +350 -0
- data/vendor/lua/lib/lua/socket/smtp.lua +251 -0
- data/vendor/lua/lib/lua/socket/tp.lua +123 -0
- data/vendor/lua/lib/lua/socket/url.lua +297 -0
- data/vendor/lua/lib/lua/ssl.dll +0 -0
- data/vendor/lua/lib/lua/ssl.lua +93 -0
- data/vendor/lua/lib/lua/ssl/https.lua +138 -0
- data/vendor/lua/lib/lua/stable.lua +28 -0
- data/vendor/lua/lib/lua/std.lua +16 -0
- data/vendor/lua/lib/lua/strbuf.lua +32 -0
- data/vendor/lua/lib/lua/strict.lua +45 -0
- data/vendor/lua/lib/lua/string_ext.lua +274 -0
- data/vendor/lua/lib/lua/table_ext.lua +117 -0
- data/vendor/lua/lib/lua/tar.lua +262 -0
- data/vendor/lua/lib/lua/task.dll +0 -0
- data/vendor/lua/lib/lua/tree.lua +81 -0
- data/vendor/lua/lib/lua/unicode.dll +0 -0
- data/vendor/lua/lib/lua/verbose_require.lua +11 -0
- data/vendor/lua/lib/lua/vstruct.lua +86 -0
- data/vendor/lua/lib/lua/vstruct/ast.lua +192 -0
- data/vendor/lua/lib/lua/vstruct/ast/Bitpack.lua +33 -0
- data/vendor/lua/lib/lua/vstruct/ast/Generator.lua +174 -0
- data/vendor/lua/lib/lua/vstruct/ast/IO.lua +45 -0
- data/vendor/lua/lib/lua/vstruct/ast/List.lua +56 -0
- data/vendor/lua/lib/lua/vstruct/ast/Name.lua +20 -0
- data/vendor/lua/lib/lua/vstruct/ast/Repeat.lua +23 -0
- data/vendor/lua/lib/lua/vstruct/ast/Root.lua +19 -0
- data/vendor/lua/lib/lua/vstruct/ast/Table.lua +65 -0
- data/vendor/lua/lib/lua/vstruct/cursor.lua +81 -0
- data/vendor/lua/lib/lua/vstruct/io.lua +45 -0
- data/vendor/lua/lib/lua/vstruct/io/a.lua +24 -0
- data/vendor/lua/lib/lua/vstruct/io/b.lua +28 -0
- data/vendor/lua/lib/lua/vstruct/io/bigendian.lua +21 -0
- data/vendor/lua/lib/lua/vstruct/io/c.lua +25 -0
- data/vendor/lua/lib/lua/vstruct/io/defaults.lua +24 -0
- data/vendor/lua/lib/lua/vstruct/io/endianness.lua +41 -0
- data/vendor/lua/lib/lua/vstruct/io/f.lua +129 -0
- data/vendor/lua/lib/lua/vstruct/io/hostendian.lua +21 -0
- data/vendor/lua/lib/lua/vstruct/io/i.lua +42 -0
- data/vendor/lua/lib/lua/vstruct/io/littleendian.lua +21 -0
- data/vendor/lua/lib/lua/vstruct/io/m.lua +62 -0
- data/vendor/lua/lib/lua/vstruct/io/p.lua +23 -0
- data/vendor/lua/lib/lua/vstruct/io/s.lua +27 -0
- data/vendor/lua/lib/lua/vstruct/io/seekb.lua +18 -0
- data/vendor/lua/lib/lua/vstruct/io/seekf.lua +18 -0
- data/vendor/lua/lib/lua/vstruct/io/seekto.lua +18 -0
- data/vendor/lua/lib/lua/vstruct/io/u.lua +54 -0
- data/vendor/lua/lib/lua/vstruct/io/x.lua +34 -0
- data/vendor/lua/lib/lua/vstruct/io/z.lua +63 -0
- data/vendor/lua/lib/lua/vstruct/lexer.lua +100 -0
- data/vendor/lua/lib/lua/vstruct/pack.lua +142 -0
- data/vendor/lua/lib/lua/vstruct/test.lua +47 -0
- data/vendor/lua/lib/lua/vstruct/test/basic.lua +73 -0
- data/vendor/lua/lib/lua/vstruct/test/common.lua +100 -0
- data/vendor/lua/lib/lua/vstruct/test/fp-bigendian.lua +56 -0
- data/vendor/lua/lib/lua/vstruct/test/fp-littleendian.lua +56 -0
- data/vendor/lua/lib/lua/vstruct/test/struct-test-gen.lua +1230 -0
- data/vendor/lua/lib/lua/vstruct/unpack.lua +126 -0
- data/vendor/lua/lib/lua/wx.dll +0 -0
- data/vendor/lua/lib/lua/xml.lua +75 -0
- data/vendor/lua/lib/lua/zip.dll +0 -0
- data/vendor/lua/lib/lua/zlib.dll +0 -0
- metadata +529 -0
Binary file
|
@@ -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
|