summaryrefslogtreecommitdiff
path: root/lua/99/test/visual_spec.lua
diff options
context:
space:
mode:
authorRamon Asuncion <asuncionbatista@gmail.com>2026-01-16 10:57:38 -0500
committerRamon Asuncion <asuncionbatista@gmail.com>2026-01-16 10:57:38 -0500
commit856396deee19c44a40cd3aa7220c2cf06c75dfa9 (patch)
tree3364c28eb27532de3cd42045671102e88cb9594f /lua/99/test/visual_spec.lua
parent90af8b6ba9e4a38e226d37284b85571b079e8b21 (diff)
parent980b6b7ab3497a9f2d2148d17f70b8de6e9db1a7 (diff)
downloada4-856396deee19c44a40cd3aa7220c2cf06c75dfa9.tar.xz
a4-856396deee19c44a40cd3aa7220c2cf06c75dfa9.zip
Merge upstream/master - add elixir support
Diffstat (limited to 'lua/99/test/visual_spec.lua')
-rw-r--r--lua/99/test/visual_spec.lua225
1 files changed, 111 insertions, 114 deletions
diff --git a/lua/99/test/visual_spec.lua b/lua/99/test/visual_spec.lua
index bb02567..c4b1394 100644
--- a/lua/99/test/visual_spec.lua
+++ b/lua/99/test/visual_spec.lua
@@ -13,159 +13,156 @@ local Point = require("99.geo").Point
--- @param end_col number
--- @return _99.test.Provider, number, _99.Range
local function setup(content, start_row, start_col, end_row, end_col)
- local p = test_utils.TestProvider.new()
- _99.setup({
- provider = p,
- logger = {
- error_cache_level = Levels.ERROR,
- },
- })
+ local p = test_utils.TestProvider.new()
+ _99.setup({
+ provider = p,
+ logger = {
+ error_cache_level = Levels.ERROR,
+ },
+ })
- local buffer = test_utils.create_file(content, "lua", start_row, start_col)
+ local buffer = test_utils.create_file(content, "lua", start_row, start_col)
- -- Create a range for the visual selection
- local start_point = Point:new(start_row, start_col)
- local end_point = Point:new(end_row, end_col)
- local range = Range:new(buffer, start_point, end_point)
+ -- Create a range for the visual selection
+ local start_point = Point:new(start_row, start_col)
+ local end_point = Point:new(end_row, end_col)
+ local range = Range:new(buffer, start_point, end_point)
- return p, buffer, range
+ return p, buffer, range
end
--- @param buffer number
--- @return string[]
local function r(buffer)
- return vim.api.nvim_buf_get_lines(buffer, 0, -1, false)
+ return vim.api.nvim_buf_get_lines(buffer, 0, -1, false)
end
local content = {
- "local function foo()",
- " -- TODO: implement",
- "end",
+ "local function foo()",
+ " -- TODO: implement",
+ "end",
}
describe("visual", function()
- it("should replace visual selection with AI response", function()
- local p, buffer, range = setup(content, 2, 1, 2, 23)
- local state = _99.__get_state()
- local visual_fn = require("99.ops.over-range")
+ it("should replace visual selection with AI response", function()
+ local p, buffer, range = setup(content, 2, 1, 2, 23)
+ local state = _99.__get_state()
+ local visual_fn = require("99.ops.over-range")
- local context =
- require("99.request-context").from_current_buffer(state, 100)
- visual_fn(context, range)
+ local context =
+ require("99.request-context").from_current_buffer(state, 100)
+ visual_fn(context, range)
- eq(1, state:active_request_count())
- eq(content, r(buffer))
+ eq(1, state:active_request_count())
+ eq(content, r(buffer))
- p:resolve("success", " return 'implemented!'")
- test_utils.next_frame()
+ p:resolve("success", " return 'implemented!'")
+ test_utils.next_frame()
- local expected_state = {
- "local function foo()",
- " return 'implemented!'",
- "end",
- }
- eq(expected_state, r(buffer))
- -- Note: Not checking active_request_count() == 0 due to logger bug with "id" key collision
- end)
+ local expected_state = {
+ "local function foo()",
+ " return 'implemented!'",
+ "end",
+ }
+ eq(expected_state, r(buffer))
+ -- Note: Not checking active_request_count() == 0 due to logger bug with "id" key collision
+ end)
- it("should handle multi-line replacement", function()
- local multi_line_content = {
- "local function bar()",
- " -- TODO: implement",
- " -- more comments",
- " -- even more",
- "end",
- }
- local p, buffer, range = setup(multi_line_content, 2, 1, 4, 17)
- local state = _99.__get_state()
- local visual_fn = require("99.ops.over-range")
+ it("should handle multi-line replacement", function()
+ local multi_line_content = {
+ "local function bar()",
+ " -- TODO: implement",
+ " -- more comments",
+ " -- even more",
+ "end",
+ }
+ local p, buffer, range = setup(multi_line_content, 2, 1, 4, 17)
+ local state = _99.__get_state()
+ local visual_fn = require("99.ops.over-range")
- local context =
- require("99.request-context").from_current_buffer(state, 200)
- visual_fn(context, range)
+ local context =
+ require("99.request-context").from_current_buffer(state, 200)
+ visual_fn(context, range)
- eq(1, state:active_request_count())
- eq(multi_line_content, r(buffer))
+ eq(1, state:active_request_count())
+ eq(multi_line_content, r(buffer))
- p:resolve(
- "success",
- " local x = 1\n local y = 2\n return x + y"
- )
- test_utils.next_frame()
+ p:resolve("success", " local x = 1\n local y = 2\n return x + y")
+ test_utils.next_frame()
- local expected_state = {
- "local function bar()",
- " local x = 1",
- " local y = 2",
- " return x + y",
- "end",
- }
- eq(expected_state, r(buffer))
- -- Note: Not checking active_request_count() == 0 due to logger bug with "id" key collision
- end)
+ local expected_state = {
+ "local function bar()",
+ " local x = 1",
+ " local y = 2",
+ " return x + y",
+ "end",
+ }
+ eq(expected_state, r(buffer))
+ -- Note: Not checking active_request_count() == 0 due to logger bug with "id" key collision
+ end)
- it("should cancel request when stop_all_requests is called", function()
- local p, buffer, range = setup(content, 2, 1, 2, 23)
- local visual_fn = require("99.ops.over-range")
- local state = _99.__get_state()
- local context =
- require("99.request-context").from_current_buffer(state, 300)
+ it("should cancel request when stop_all_requests is called", function()
+ local p, buffer, range = setup(content, 2, 1, 2, 23)
+ local visual_fn = require("99.ops.over-range")
+ local state = _99.__get_state()
+ local context =
+ require("99.request-context").from_current_buffer(state, 300)
- visual_fn(context, range)
+ visual_fn(context, range)
- eq(content, r(buffer))
+ eq(content, r(buffer))
- assert.is_false(p.request.request:is_cancelled())
- assert.is_not_nil(p.request)
- assert.is_not_nil(p.request.request)
+ assert.is_false(p.request.request:is_cancelled())
+ assert.is_not_nil(p.request)
+ assert.is_not_nil(p.request.request)
- _99.stop_all_requests()
- test_utils.next_frame()
+ _99.stop_all_requests()
+ test_utils.next_frame()
- assert.is_true(p.request.request:is_cancelled())
+ assert.is_true(p.request.request:is_cancelled())
- p:resolve("success", " return 'should not appear'")
- test_utils.next_frame()
+ p:resolve("success", " return 'should not appear'")
+ test_utils.next_frame()
- -- Buffer should remain unchanged after cancellation
- eq(content, r(buffer))
- end)
+ -- Buffer should remain unchanged after cancellation
+ eq(content, r(buffer))
+ end)
- it("should handle error cases with graceful failures", function()
- local p, buffer, range = setup(content, 2, 1, 2, 23)
- local visual_fn = require("99.ops.over-range")
- local state = _99.__get_state()
- local context =
- require("99.request-context").from_current_buffer(state, 400)
+ it("should handle error cases with graceful failures", function()
+ local p, buffer, range = setup(content, 2, 1, 2, 23)
+ local visual_fn = require("99.ops.over-range")
+ local state = _99.__get_state()
+ local context =
+ require("99.request-context").from_current_buffer(state, 400)
- visual_fn(context, range)
+ visual_fn(context, range)
- eq(content, r(buffer))
+ eq(content, r(buffer))
- p:resolve("failed", "Something went wrong")
- test_utils.next_frame()
+ p:resolve("failed", "Something went wrong")
+ test_utils.next_frame()
- -- Buffer should remain unchanged on failure
- eq(content, r(buffer))
- end)
+ -- Buffer should remain unchanged on failure
+ eq(content, r(buffer))
+ end)
- it("should handle cancelled status gracefully", function()
- local p, buffer, range = setup(content, 2, 1, 2, 23)
- local visual_fn = require("99.ops.over-range")
- local state = _99.__get_state()
- local context =
- require("99.request-context").from_current_buffer(state, 500)
+ it("should handle cancelled status gracefully", function()
+ local p, buffer, range = setup(content, 2, 1, 2, 23)
+ local visual_fn = require("99.ops.over-range")
+ local state = _99.__get_state()
+ local context =
+ require("99.request-context").from_current_buffer(state, 500)
- visual_fn(context, range)
+ visual_fn(context, range)
- eq(content, r(buffer))
+ eq(content, r(buffer))
- -- Manually cancel and resolve as cancelled
- p.request.request:cancel()
- p:resolve("cancelled", "Request was cancelled")
- test_utils.next_frame()
+ -- Manually cancel and resolve as cancelled
+ p.request.request:cancel()
+ p:resolve("cancelled", "Request was cancelled")
+ test_utils.next_frame()
- -- Buffer should remain unchanged on cancellation
- eq(content, r(buffer))
- end)
+ -- Buffer should remain unchanged on cancellation
+ eq(content, r(buffer))
+ end)
end)