Fork of Tangara with customizations
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
tangara-fw/lib/lua-repl/t/plugin-before-tests.lua

201 lines
3.8 KiB

-- vim:foldmethod=marker
local repl = require 'repl'
pcall(require, 'luarocks.loader')
require 'Test.More'
local utils = require 'test-utils'
plan(26)
local clone = repl:clone()
do -- basic tests {{{
local with_plugin = clone:clone()
local has_called_normal
local has_called_before
function with_plugin:foo()
has_called_normal = true
end
with_plugin:loadplugin(function()
function before:foo()
has_called_before = true
ok(not has_called_normal)
end
end)
with_plugin:foo()
ok(has_called_normal)
ok(has_called_before)
local line_no
local _, err = pcall(function()
with_plugin:loadplugin(function()
line_no = utils.next_line_number()
function before:nonexistent()
end
end)
end)
like(err, string.format("%d: The 'nonexistent' method does not exist", line_no))
_, err = pcall(function()
with_plugin:loadplugin(function()
line_no = utils.next_line_number()
before.foo = 17
end)
end)
like(err, string.format('%d: 17 is not a function', line_no))
end -- }}}
do -- arguments tests {{{
local with_plugin = clone:clone()
local orig_args
local got_args
function with_plugin:foo(...)
orig_args = {
n = select('#', ...),
...,
}
end
with_plugin:loadplugin(function()
function before:foo(...)
got_args = {
n = select('#', ...),
...,
}
end
end)
with_plugin:foo()
is(got_args.n, 0)
utils.cmp_tables(orig_args, got_args)
with_plugin:foo(1, 2, 3)
is(got_args.n, 3)
is(got_args[1], 1)
is(got_args[2], 2)
is(got_args[3], 3)
utils.cmp_tables(orig_args, got_args)
with_plugin:foo(1, nil, nil, nil, 5)
is(got_args.n, 5)
is(got_args[1], 1)
is(got_args[2], nil)
is(got_args[3], nil)
is(got_args[4], nil)
is(got_args[5], 5)
utils.cmp_tables(orig_args, got_args)
end -- }}}
do -- exception tests {{{
local with_plugin = clone:clone()
local has_called_original
function with_plugin:foo()
has_called_original = true
end
with_plugin:loadplugin(function()
function before:foo()
error 'uh-oh'
end
end)
local _, err = pcall(with_plugin.foo, with_plugin)
like(err, 'uh%-oh')
ok(not has_called_original)
end -- }}}
do -- return value tests {{{
local with_plugin = clone:clone()
function with_plugin:foo()
return 17
end
function with_plugin:bar()
return 18, 19, 20
end
function with_plugin:baz()
return 1, nil, nil, nil, 5
end
with_plugin:loadplugin(function()
function before:foo()
return 18
end
function before:bar()
return 18
end
function before:baz()
end
end)
local result = with_plugin:foo()
is(result, 17)
local results = utils.gather_results(with_plugin:bar())
utils.cmp_tables(results, { n = 3, 18, 19, 20 })
results = utils.gather_results(with_plugin:baz())
utils.cmp_tables(results, { n = 5, 1, nil, nil, nil, 5 })
end -- }}}
do -- multiple advice, multiple plugins {{{
local with_plugin = clone:clone()
local calls = {}
function with_plugin:foo()
calls[#calls + 1] = 'original'
end
with_plugin:loadplugin(function()
function before:foo()
calls[#calls + 1] = 'first'
end
end)
with_plugin:loadplugin(function()
function before:foo()
calls[#calls + 1] = 'second'
end
end)
with_plugin:foo()
utils.cmp_tables(calls, { 'second', 'first', 'original' })
end -- }}}
do -- multiple advice, single plugin {{{
local with_plugin = clone:clone()
local calls = {}
function with_plugin:foo()
calls[#calls + 1] = 'original'
end
with_plugin:loadplugin(function()
function before:foo()
calls[#calls + 1] = 'first'
end
function before:foo()
calls[#calls + 1] = 'second'
end
end)
with_plugin:foo()
utils.cmp_tables(calls, { 'second', 'first', 'original' })
end -- }}}