aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/test.lua
diff options
context:
space:
mode:
authorGravatar mitchell <70453897+667e-11@users.noreply.github.com>2020-05-25 21:16:01 -0400
committerGravatar mitchell <70453897+667e-11@users.noreply.github.com>2020-05-25 21:16:01 -0400
commitf2374c4aba53fa462dc88d4104e10d8cb97e61ba (patch)
tree5e5a9d26a5ad8915c0e12187dd059b1109fcf22d /test/test.lua
parenteffc636745e8d9c680c3acf42e8e25eed10cd903 (diff)
Allow views to be used as buffers and update API.
This allows for a superficial separation of buffer- and view-specific Scintilla functionality. buffers and views can now be used interchangeably for the most part, and the APIs are guidance, not hard requirements. User scripts do not require any modification and will continue to function normally.
Diffstat (limited to 'test/test.lua')
-rw-r--r--test/test.lua98
1 files changed, 74 insertions, 24 deletions
diff --git a/test/test.lua b/test/test.lua
index b27329fa..319a7e16 100644
--- a/test/test.lua
+++ b/test/test.lua
@@ -190,8 +190,8 @@ local function check_localizations(filename, L)
print(string.format('Processing file "%s"', filename:gsub(_HOME, '')))
local count = 0
for line in io.lines(filename) do
- local id = line:match([=[_L%[['"]([^'"]+)['"]%]]=])
- if id and assert(L[id], 'locale missing id "%s"', id) then
+ for id in line:gmatch([=[_L%[['"]([^'"]+)['"]%]]=]) do
+ assert(L[id], 'locale missing id "%s"', id)
count = count + 1
end
end
@@ -208,8 +208,8 @@ local function load_extra_localizations(filename, L)
local count = 0
for line in io.lines(filename) do
if line:find('_L%b[]%s*=') then
- local id = line:match([=[_L%[['"]([^'"]+)['"]%]%s*=]=])
- if id and assert(not L[id], 'duplicate locale id "%s"', id) then
+ for id in line:gmatch([=[_L%[['"]([^'"]+)['"]%]%s*=]=]) do
+ assert(not L[id], 'duplicate locale id "%s"', id)
L[id], count = true, count + 1
end
end
@@ -1020,17 +1020,17 @@ function test_ui_buffer_switch_save_restore_properties()
local filename = _HOME .. '/test/ui/test.lua'
io.open_file(filename)
buffer:goto_pos(10)
- buffer:fold_line(
- buffer:line_from_position(buffer.current_pos), buffer.FOLDACTION_CONTRACT)
- buffer.view_eol = true
- buffer.margin_width_n[INDEX(1)] = 0 -- hide line numbers
+ view:fold_line(
+ buffer:line_from_position(buffer.current_pos), view.FOLDACTION_CONTRACT)
+ view.view_eol = true
+ view.margin_width_n[INDEX(1)] = 0 -- hide line numbers
view:goto_buffer(-1)
- assert(buffer.margin_width_n[INDEX(1)] > 0, 'line numbers are still hidden')
+ assert(view.margin_width_n[INDEX(1)] > 0, 'line numbers are still hidden')
view:goto_buffer(1)
assert_equal(buffer.current_pos, 10)
- assert_equal(buffer.fold_expanded[buffer:line_from_position(buffer.current_pos)], false)
- assert_equal(buffer.view_eol, true)
- assert_equal(buffer.margin_width_n[INDEX(1)], 0)
+ assert_equal(view.fold_expanded[buffer:line_from_position(buffer.current_pos)], false)
+ assert_equal(view.view_eol, true)
+ assert_equal(view.margin_width_n[INDEX(1)], 0)
buffer:close()
end
@@ -1146,7 +1146,7 @@ function test_command_entry_run_lua_abbreviated_env()
run_lua_command('auto_c_active')
assert(buffer:get_text():find('false%s*$'), 'buffer:auto_c_active() result not false')
run_lua_command('view_eol=true')
- assert_equal(buffer.view_eol, true)
+ assert_equal(view.view_eol, true)
-- view get/set.
if #_VIEWS > 1 then view:unsplit() end
run_lua_command('split')
@@ -2278,15 +2278,15 @@ function test_menu_menu_functions()
local use_tabs = buffer.use_tabs
textadept.menu.menubar[_L['Buffer']][_L['Indentation']][_L['Toggle Use Tabs']][2]()
assert(buffer.use_tabs ~= use_tabs, 'use tabs not toggled')
- local view_eol = buffer.view_eol
+ local view_eol = view.view_eol
textadept.menu.menubar[_L['Buffer']][_L['Toggle View EOL']][2]()
- assert(buffer.view_eol ~= view_eol, 'view EOL not toggled')
- local wrap_mode = buffer.wrap_mode
+ assert(view.view_eol ~= view_eol, 'view EOL not toggled')
+ local wrap_mode = view.wrap_mode
textadept.menu.menubar[_L['Buffer']][_L['Toggle Wrap Mode']][2]()
- assert(buffer.wrap_mode ~= wrap_mode, 'wrap mode not toggled')
- local view_whitespace = buffer.view_ws
+ assert(view.wrap_mode ~= wrap_mode, 'wrap mode not toggled')
+ local view_whitespace = view.view_ws
textadept.menu.menubar[_L['Buffer']][_L['Toggle View Whitespace']][2]()
- assert(buffer.view_ws ~= view_whitespace, 'view whitespace not toggled')
+ assert(view.view_ws ~= view_whitespace, 'view whitespace not toggled')
view:split()
ui.update()
local size = view.size
@@ -2298,10 +2298,10 @@ function test_menu_menu_functions()
buffer:set_text('if foo then\n bar\nend')
buffer:colourise(POS(1), -1)
textadept.menu.menubar[_L['View']][_L['Toggle Current Fold']][2]()
- assert_equal(buffer.fold_expanded[buffer:line_from_position(buffer.current_pos)], false)
- local indentation_guides = buffer.indentation_guides
+ assert_equal(view.fold_expanded[buffer:line_from_position(buffer.current_pos)], false)
+ local indentation_guides = view.indentation_guides
textadept.menu.menubar[_L['View']][_L['Toggle Show Indent Guides']][2]()
- assert(buffer.indentation_guides ~= indentation_guides, 'indentation guides not toggled')
+ assert(view.indentation_guides ~= indentation_guides, 'indentation guides not toggled')
local virtual_space = buffer.virtual_space_options
textadept.menu.menubar[_L['View']][_L['Toggle Virtual Space']][2]()
assert(buffer.virtual_space_options ~= virtual_space, 'virtual space not toggled')
@@ -2947,15 +2947,65 @@ function test_view_split_resize_unsplit()
end
function test_buffer_read_write_only_properties()
- assert_raises(function() buffer.all_lines_visible = false end, 'read-only property')
+ assert_raises(function() view.all_lines_visible = false end, 'read-only property')
assert_raises(function() return buffer.auto_c_fill_ups end, 'write-only property')
assert_raises(function() buffer.annotation_text = {} end, 'read-only property')
assert_raises(function() buffer.char_at[POS(1)] = string.byte(' ') end, 'read-only property')
- assert_raises(function() return buffer.marker_alpha[INDEX(1)] end, 'write-only property')
+ assert_raises(function() return view.marker_alpha[INDEX(1)] end, 'write-only property')
end
-- TODO: test init.lua's buffer settings
+-- Load buffer and view API from their respective LuaDoc files.
+local function load_buffer_view_props()
+ local buffer_props, view_props = {}, {}
+ for name, props in pairs{buffer = buffer_props, view = view_props} do
+ for line in io.lines(string.format('%s/core/.%s.luadoc', _HOME, name)) do
+ if line:find('@field') then
+ props[line:match('@field ([%w_]+)')] = true
+ elseif line:find('^function') then
+ props[line:match('^function ([%w_]+)')] = true
+ end
+ end
+ end
+ return buffer_props, view_props
+end
+
+local function check_property_usage(filename, buffer_props, view_props)
+ print(string.format('Processing file "%s"', filename:gsub(_HOME, '')))
+ local line_num, count = 1, 0
+ for line in io.lines(filename) do
+ for pos, id, prop in line:gmatch('()([%w_]+)[.:]([%w_]+)') do
+ if id == 'M' or id == 'f' or id == 'p' or id == 'lexer' or id == 'spawn_proc' then goto continue end
+ if id == 'textadept' and prop == 'MARK_BOOKMARK' then goto continue end
+ if (id == 'ui' or id == 'split') and prop == 'size' then goto continue end
+ if id == 'keys' and prop == 'home' then goto continue end
+ if id == 'Rout' and prop == 'save' then goto continue end
+ if id == 'detail' and (prop == 'filename' or prop == 'column') then goto continue end
+ if (id == 'placeholder' or id == 'ph') and prop == 'length' then goto continue end
+ if id == 'client' and prop == 'close' then goto continue end
+ if (id == 'Foo' or id == 'Array' or id == 'Server') and prop == 'new' then goto continue end
+ if buffer_props[prop] then
+ assert(id == 'buffer' or id == 'buf' or id == 'buffer1' or id == 'buffer2', 'line %d:%d: "%s" should be a buffer property', line_num, pos, prop)
+ count = count + 1
+ elseif view_props[prop] then
+ assert(id == 'view', 'line %d:%d: "%s" should be a view property', line_num, pos, prop)
+ count = count + 1
+ end
+ ::continue::
+ end
+ line_num = line_num + 1
+ end
+ print(string.format('Checked %d buffer/view property usages.', count))
+end
+
+function test_buffer_view_usage()
+ local buffer_props, view_props = load_buffer_view_props()
+ lfs.dir_foreach(_HOME, function(filename)
+ check_property_usage(filename, buffer_props, view_props)
+ end, {'.lua', '.luadoc', '!/lexers', '!/modules/lsp/dkjson.lua', '!/modules/lua/lua.luadoc', '!/modules/debugger/lua/mobdebug.lua', '!/modules/yaml/lyaml.lua', '!/scripts', '!/src'})
+end
+
--------------------------------------------------------------------------------
assert(not WIN32 and not OSX, 'Test suite currently only runs on Linux')