diff options
| author | mitchell <unknown> | 2020-07-07 20:14:11 -0400 |
|---|---|---|
| committer | mitchell <unknown> | 2020-07-07 20:14:11 -0400 |
| commit | 329559b74b483576a74d5f87eebf951bd12b9200 (patch) | |
| tree | 4a200348748ccfdd27d1a3f8c0352758b9f9f4c8 /test/test_lexlua.lua | |
| parent | 5f930428f724eef7dd0be4706670039b89f3523e (diff) | |
| download | scintilla-mirror-329559b74b483576a74d5f87eebf951bd12b9200.tar.gz | |
lexlua: Added `lexer.colors` and `lexer.styles` tables for themes and lexers.
This allows for a more Lua table-oriented approach to defining and using colors
and styles, instead of manually manipulating Scintilla property strings.
Themes and lexers are still backwards compatible, as the underlying mechanisms
are still in place.
Diffstat (limited to 'test/test_lexlua.lua')
| -rw-r--r-- | test/test_lexlua.lua | 79 |
1 files changed, 75 insertions, 4 deletions
diff --git a/test/test_lexlua.lua b/test/test_lexlua.lua index cd27f4bed..602f480c7 100644 --- a/test/test_lexlua.lua +++ b/test/test_lexlua.lua @@ -30,8 +30,8 @@ function assert_default_styles(lex) assert(lex._TOKENSTYLES[style] == i, 'default styles out of order') end local predefined_styles = { - 'default', 'linenumber', 'bracelight', 'bracebad', 'controlchar', - 'indentguide', 'calltip', 'folddisplaytext' + 'default', 'line_number', 'brace_light', 'brace_bad', 'control_char', + 'indent_guide', 'call_tip', 'fold_display_text' } for i = 1, #predefined_styles do local style = predefined_styles[i] @@ -48,6 +48,7 @@ end function assert_style(lex, style_name, style) assert(lex._TOKENSTYLES[style_name], string.format("style '%s' does not exist", style_name)) + style = tostring(style) assert(lex._EXTRASTYLES[style_name] == style, string.format("'%s' ~= '%s'", lex._EXTRASTYLES[style_name], style)) end @@ -276,6 +277,17 @@ function test_add_style() assert_lex(lex, code, tokens) end +-- Tests adding different kinds of lexer styles. +function test_add_styles() + local lex = lexer.new('test') + lex:add_style('foo', lexer.STYLE_KEYWORD) + assert_style(lex, 'foo', lexer.STYLE_KEYWORD) + lex:add_style('bar', lexer.STYLE_KEYWORD .. {italics = true}) + assert_style(lex, 'bar', '$(style.keyword),italics') + lex:add_style('baz', 'fore:$(color.red)') -- legacy string + assert_style(lex, 'baz', 'fore:$(color.red)') +end + -- Tests a simple parent lexer embedding a simple child lexer. -- Ensures the child's custom styles are also copied over. function test_embed() @@ -606,8 +618,8 @@ function test_legacy() 'function', 'class', 'type', 'label', 'regex', 'embedded' } local predefined = { - 'default', 'linenumber', 'bracelight', 'bracebad', 'controlchar', - 'indentguide', 'calltip', 'folddisplaytext' + 'default', 'line_number', 'brace_light', 'brace_bad', 'control_char', + 'indent_guide', 'call_tip', 'fold_display_text' } local token_styles = {} for i = 1, #default do token_styles[default[i]] = i end @@ -1161,6 +1173,65 @@ function test_rhtml() assert_lex(rhtml, code, rhtml_tokens, initial_style) end +-- Tests that the `lexer.colors` table reads and writes properties with a +-- 'color.' prefix and supports 0xBBGGRR and '#RRGGBB' color formats. +function test_colors() + if not lexer.property then lexer.load('text') end -- creates lexer.property + + assert(lexer.colors.red == '') + assert(lexer.property['color.red'] == '') + lexer.colors.red = 0x0000FF + assert(lexer.colors.red == tostring(0x0000FF)) + assert(lexer.property['color.red'] == tostring(0x0000FF)) + lexer.colors.blue = '#0000FF' + assert(lexer.colors.blue == '#0000FF') + assert(lexer.property['color.blue'] == '#0000FF') + -- Verify legacy themes can set color properties directly. + lexer.property['color.green'] = '#00FF00' + assert(lexer.colors.green == '#00FF00') + assert(lexer.property['color.green'] == '#00FF00') +end + +-- Tests that the `lexer.styles` table reads and writes properties with a +-- 'style.' prefix and supports creating styles from existing styles and +-- property tables. +function test_styles() + if not lexer.property then lexer.load('text') end -- creates lexer.property + + assert(tostring(lexer.styles.default) == '$(style.default)') + assert(tostring(lexer.STYLE_DEFAULT) == '$(style.default)') -- legacy constant + assert(lexer.property['style.default'] == '') + + assert(tostring(lexer.styles.keyword) == '$(style.keyword)') + assert(lexer.property['style.keyword'] == '') + lexer.styles.keyword = {} + assert(tostring(lexer.styles.keyword) == '$(style.keyword)') + assert(lexer.property['style.keyword'] == '') + lexer.styles.keyword = lexer.styles.default + assert(tostring(lexer.styles.keyword) == '$(style.keyword)') + assert(lexer.property['style.keyword'] == '$(style.default)') + lexer.styles.keyword = {bold = true} + assert(tostring(lexer.styles.keyword) == '$(style.keyword)') + assert(lexer.property['style.keyword'] == 'bold') + lexer.colors.yellow = '#FFFF00' + lexer.styles.keyword = {fore = lexer.colors.yellow} + assert(lexer.property['style.keyword'] == 'fore:#FFFF00') + + lexer.styles.embedded = lexer.styles.keyword .. {italics = true} + assert(lexer.property['style.embedded'] == '$(style.keyword),italics') + assert(lexer.property['style.keyword'] == 'fore:#FFFF00') -- not modified + + -- Verify legacy styles work. + lexer.property['style.macro'] = lexer.STYLE_PREPROCESSOR + assert(lexer.property['style.macro'] == '$(style.preprocessor)') + lexer.property['style.addition'] = 'fore:$(color.green)' + assert(lexer.property['style.addition'] == 'fore:$(color.green)') + lexer.property['style.unknown'] = lexer.STYLE_IDENTIFIER .. ',italics' + assert(lexer.property['style.unknown'] == '$(style.identifier),,italics') + lexer.styles.unknown = lexer.STYLE_IDENTIFIER .. ',italics' + assert(lexer.property['style.unknown'] == '$(style.identifier),,italics') +end + -- Run tests. print('Starting test suite.') local tests = {} |
