项目文件夹

文件
wehub-resource-sync 9f2e1cd2af
Ruby / Ruby 4.0.5 (push) Failing after 5m13s
Ruby / Ruby 3.3.4 (push) Failing after 5m43s
Ruby / Ruby 2.6.8 (push) Failing after 16m2s
chore: import upstream snapshot with attribution
2026-07-13 12:33:07 +08:00

225 行
5.8 KiB
Ruby

# frozen_string_literal: true
require "spec_helper"
require "clacky/ui2/components/input_area"
RSpec.describe Clacky::UI2::Components::InputArea do
let(:input_area) { described_class.new(row: 20) }
describe "#insert_char" do
it "inserts character at cursor position" do
input_area.insert_char("H")
input_area.insert_char("i")
expect(input_area.input_buffer).to eq("Hi")
end
it "inserts at current cursor position" do
input_area.insert_char("A")
input_area.insert_char("C")
input_area.cursor_left
input_area.insert_char("B")
expect(input_area.input_buffer).to eq("ABC")
end
end
describe "#backspace" do
before do
"Hello".each_char { |c| input_area.insert_char(c) }
end
it "removes character before cursor" do
input_area.backspace
expect(input_area.input_buffer).to eq("Hell")
end
it "does nothing at start of buffer" do
input_area.cursor_home
input_area.backspace
expect(input_area.input_buffer).to eq("Hello")
end
it "updates cursor position" do
initial_pos = input_area.cursor_position
input_area.backspace
expect(input_area.cursor_position).to eq(initial_pos - 1)
end
end
describe "#delete_char" do
before do
"Hello".each_char { |c| input_area.insert_char(c) }
input_area.cursor_home
end
it "removes character at cursor position" do
input_area.delete_char
expect(input_area.input_buffer).to eq("ello")
end
it "does nothing at end of buffer" do
input_area.cursor_end
input_area.delete_char
expect(input_area.input_buffer).to eq("Hello")
end
end
describe "cursor movement" do
before do
"Hello".each_char { |c| input_area.insert_char(c) }
end
describe "#cursor_left" do
it "moves cursor left" do
initial_pos = input_area.cursor_position
input_area.cursor_left
expect(input_area.cursor_position).to eq(initial_pos - 1)
end
it "does not move below 0" do
input_area.cursor_home
input_area.cursor_left
expect(input_area.cursor_position).to eq(0)
end
end
describe "#cursor_right" do
it "moves cursor right" do
input_area.cursor_home
input_area.cursor_right
expect(input_area.cursor_position).to eq(1)
end
it "does not move beyond buffer length" do
input_area.cursor_right
expect(input_area.cursor_position).to eq(input_area.input_buffer.length)
end
end
describe "#cursor_home" do
it "moves cursor to start" do
input_area.cursor_home
expect(input_area.cursor_position).to eq(0)
end
end
describe "#cursor_end" do
it "moves cursor to end" do
input_area.cursor_home
input_area.cursor_end
expect(input_area.cursor_position).to eq(input_area.input_buffer.length)
end
end
end
describe "#submit" do
before do
"Test input".each_char { |c| input_area.insert_char(c) }
end
it "returns current input value" do
result = input_area.submit
expect(result[:text]).to eq("Test input")
expect(result[:files]).to eq([])
end
it "clears the buffer" do
input_area.submit
expect(input_area.input_buffer).to be_empty
end
it "resets cursor position" do
input_area.submit
expect(input_area.cursor_position).to eq(0)
end
it "adds to history" do
input_area.submit
input_area.history_prev
expect(input_area.input_buffer).to eq("Test input")
end
end
describe "#clear" do
it "clears buffer and resets cursor" do
"Test".each_char { |c| input_area.insert_char(c) }
input_area.clear
expect(input_area.input_buffer).to be_empty
expect(input_area.cursor_position).to eq(0)
end
end
describe "history navigation" do
before do
input_area.insert_char("F")
input_area.insert_char("i")
input_area.insert_char("r")
input_area.insert_char("s")
input_area.insert_char("t")
input_area.submit
input_area.insert_char("S")
input_area.insert_char("e")
input_area.insert_char("c")
input_area.insert_char("o")
input_area.insert_char("n")
input_area.insert_char("d")
input_area.submit
end
describe "#history_prev" do
it "loads previous history entry" do
input_area.history_prev
expect(input_area.input_buffer).to eq("Second")
end
it "can navigate multiple entries" do
input_area.history_prev
input_area.history_prev
expect(input_area.input_buffer).to eq("First")
end
it "stops at oldest entry" do
3.times { input_area.history_prev }
expect(input_area.input_buffer).to eq("First")
end
end
describe "#history_next" do
it "loads next history entry" do
2.times { input_area.history_prev }
input_area.history_next
expect(input_area.input_buffer).to eq("Second")
end
it "clears input when reaching end" do
input_area.history_prev
input_area.history_next
expect(input_area.input_buffer).to be_empty
end
end
end
describe "#current_content" do
it "returns prompt with input" do
"Test".each_char { |c| input_area.insert_char(c) }
expect(input_area.current_content).to include("Test")
expect(input_area.current_content).to include("[>>]")
end
it "returns empty string when buffer is empty" do
expect(input_area.current_content).to eq("")
end
end
describe "#empty?" do
it "returns true when buffer is empty" do
expect(input_area).to be_empty
end
it "returns false when buffer has content" do
input_area.insert_char("X")
expect(input_area).not_to be_empty
end
end
end