summaryrefslogtreecommitdiff
path: root/lib/lua-repl/t/plugin-feature-tests.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lib/lua-repl/t/plugin-feature-tests.lua')
-rw-r--r--lib/lua-repl/t/plugin-feature-tests.lua132
1 files changed, 132 insertions, 0 deletions
diff --git a/lib/lua-repl/t/plugin-feature-tests.lua b/lib/lua-repl/t/plugin-feature-tests.lua
new file mode 100644
index 00000000..4c74a4c1
--- /dev/null
+++ b/lib/lua-repl/t/plugin-feature-tests.lua
@@ -0,0 +1,132 @@
+-- vim:foldmethod=marker
+local repl = require 'repl'
+local utils = require 'test-utils'
+pcall(require, 'luarocks.loader')
+require 'Test.More'
+
+plan(19)
+
+do -- basic tests {{{
+ local clone = repl:clone()
+
+ clone:loadplugin(function()
+ features = 'foo'
+ end)
+
+ ok(clone:hasfeature 'foo')
+ ok(not clone:hasfeature 'bar')
+ ok(not clone:hasfeature 'baz')
+
+ clone:loadplugin(function()
+ features = { 'bar', 'baz' }
+ end)
+
+ ok(clone:hasfeature 'foo')
+ ok(clone:hasfeature 'bar')
+ ok(clone:hasfeature 'baz')
+end -- }}}
+
+do -- requirefeature {{{
+ local clone = repl:clone()
+
+ clone:loadplugin(function()
+ features = 'foo'
+ end)
+
+ clone:requirefeature 'foo'
+
+ local line_no
+ local _, err = pcall(function()
+ line_no = utils.next_line_number()
+ clone:requirefeature 'bar'
+ end)
+
+ like(err, tostring(line_no) .. ': required feature "bar" not present')
+end -- }}}
+
+do -- conflicts {{{
+ local clone = repl:clone()
+ local line_no
+
+ clone:loadplugin(function()
+ features = 'foo'
+ end)
+
+ local _, err = pcall(function()
+ line_no = utils.next_line_number()
+ clone:loadplugin(function()
+ features = 'foo'
+ end)
+ end)
+ like(err, tostring(line_no) .. ': feature "foo" already present')
+
+ -- XXX what about methods injected into the object?
+end -- }}}
+
+do -- clone:hasfeature {{{
+ local child = repl:clone()
+
+ child:loadplugin(function()
+ features = 'foo'
+ end)
+
+ local grandchild = child:clone()
+
+ ok(not repl:hasfeature 'foo')
+ ok(child:hasfeature 'foo')
+ ok(grandchild:hasfeature 'foo')
+
+ child:loadplugin(function()
+ features = 'bar'
+ end)
+
+ ok(not repl:hasfeature 'bar')
+ ok(child:hasfeature 'bar')
+ ok(not grandchild:hasfeature 'bar')
+end -- }}}
+
+do -- iffeature tests {{{
+ local clone = repl:clone()
+ local has_run
+
+ clone:iffeature('foo', function()
+ has_run = true
+ end)
+
+ ok(not has_run)
+
+ clone:loadplugin(function()
+ features = 'foo'
+ end)
+
+ ok(has_run)
+
+ has_run = false
+
+ clone:iffeature('foo', function()
+ has_run = true
+ end)
+
+ ok(has_run)
+end -- }}}
+
+do -- iffeature multiple times {{{
+ local clone = repl:clone()
+ local has_run
+ local has_run2
+
+ clone:iffeature('foo', function()
+ has_run = true
+ end)
+
+ clone:iffeature('foo', function()
+ has_run2 = true
+ end)
+
+ clone:loadplugin(function()
+ features = 'foo'
+ end)
+
+ ok(has_run)
+ ok(has_run2)
+end -- }}}