diff options
| -rw-r--r-- | tests/query/injection_spec.lua | 63 | ||||
| -rw-r--r-- | tests/query/injections/yaml/bash-on-github-actions.yml | 32 |
2 files changed, 95 insertions, 0 deletions
diff --git a/tests/query/injection_spec.lua b/tests/query/injection_spec.lua new file mode 100644 index 000000000..abbd7a8ae --- /dev/null +++ b/tests/query/injection_spec.lua @@ -0,0 +1,63 @@ +require "nvim-treesitter.highlight" -- yes, this is necessary to set the hlmap +local highlighter = require "vim.treesitter.highlighter" +local utils = require "nvim-treesitter.utils" +local ts_utils = require "nvim-treesitter.ts_utils" +local parsers = require "nvim-treesitter.parsers" + +local function check_assertions(file) + local buf = vim.fn.bufadd(file) + vim.fn.bufload(file) + local lang = parsers.get_buf_lang(buf) + assert.same( + 1, + vim.fn.executable "highlight-assertions", + '"highlight-assertions" not executable!' + .. ' Get it via "cargo install --git https://github.com/theHamsta/highlight-assertions"' + ) + local assertions = vim.fn.json_decode( + vim.fn.system( + "highlight-assertions -p '" .. utils.get_parser_install_dir() .. "/" .. lang .. ".so'" .. " -s '" .. file .. "'" + ) + ) + local parser = parsers.get_parser(buf, lang) + + local self = highlighter.new(parser, {}) + + for _, assertion in ipairs(assertions) do + local row = assertion.position.row + local col = assertion.position.column + + local found = false + self.tree:for_each_tree(function(tstree, tree) + if not tstree then + return + end + + local root = tstree:root() + if ts_utils.is_in_node_range(root, row, col) and assertion.expected_capture_name == tree:lang() then + found = true + end + end, true) + assert.True( + found, + "Error in at " + .. file + .. ":" + .. (row + 1) + .. ":" + .. (col + 1) + .. ': expected "' + .. assertion.expected_capture_name + .. '" to be injected here!' + ) + end +end + +describe("injections", function() + local files = vim.fn.split(vim.fn.glob "tests/query/injections/**/*.*") + for _, file in ipairs(files) do + it(file, function() + check_assertions(file) + end) + end +end) diff --git a/tests/query/injections/yaml/bash-on-github-actions.yml b/tests/query/injections/yaml/bash-on-github-actions.yml new file mode 100644 index 000000000..ba56de193 --- /dev/null +++ b/tests/query/injections/yaml/bash-on-github-actions.yml @@ -0,0 +1,32 @@ +name: CI +on: + push: + branches: [master] + pull_request: + branches: [master] +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: '16' + - name: Install dependencies + run: npm ci + # ^ bash + - name: Run tests + run: npm test + # ^ bash + - name: Parse Petalisp + run: | + git submodule init + git submodule update + if (( $(node_modules/tree-sitter-cli/tree-sitter parse test/Petalisp/**/*.lisp -q | wc -l) > 2 )); then # There are 2 known failures (strings that are not format strings but use ~X syntax) + exit 1 + else + echo "Successfully parsed Petalisp" + fi + # ^ bash + - name: Run tests + run: npm test |
