input-automation.test.ts•5.75 kB
import { describe, it, beforeEach, afterEach } from 'node:test'
import assert from 'node:assert'
import { WindowManager } from '../../managers/window-manager.js'
import { CursorInstanceManager } from '../../managers/cursor-instance-manager.js'
import { InputAutomationService } from '../../services/input-automation/input-service.js'
import { sleep } from '../../utils/sleep.js'
describe('Input Automation Integration Tests', () => {
let windowManager: WindowManager
let cursorManager: CursorInstanceManager
let inputService: InputAutomationService
let testWindow: any
beforeEach(async () => {
windowManager = WindowManager.getInstance()
cursorManager = CursorInstanceManager.getInstance()
inputService = InputAutomationService.getInstance()
// Start a test Cursor instance
await cursorManager.startNewInstance()
await sleep(2000) // Wait for window to be ready
// Get the window reference
const windows = await windowManager.findCursorWindows()
assert(windows.length > 0, 'No Cursor windows found')
testWindow = windows[0]
// Focus the window
await windowManager.focusWindow(testWindow)
await sleep(500)
})
afterEach(async () => {
// Clean up test instance
await cursorManager.closeAllInstances()
})
describe('Text Input Scenarios', () => {
it('should handle complex text input', async () => {
// Type a complex text with special characters
const testText = 'Hello, World! 123 #$%^&*'
await inputService.typeText(testText)
await sleep(500)
// Select all text (Cmd+A or Ctrl+A)
if (process.platform === 'darwin') {
await inputService.sendKeys(['command', 'a'])
} else {
await inputService.sendKeys(['control', 'a'])
}
await sleep(500)
// Copy text (Cmd+C or Ctrl+C)
if (process.platform === 'darwin') {
await inputService.sendKeys(['command', 'c'])
} else {
await inputService.sendKeys(['control', 'c'])
}
await sleep(500)
})
it('should handle rapid text input', async () => {
// Type multiple lines rapidly
const lines = [
'First line of text',
'Second line of text',
'Third line of text'
]
for (const line of lines) {
await inputService.typeText(line)
await inputService.sendKeys(['enter'])
await sleep(100) // Minimal delay between lines
}
})
})
describe('Keyboard Navigation', () => {
it('should handle arrow key navigation', async () => {
// Type some text
await inputService.typeText('Navigation test')
await sleep(500)
// Move cursor with arrow keys
for (let i = 0; i < 5; i++) {
await inputService.sendKeys(['left'])
await sleep(100)
}
// Select text with shift+arrow
for (let i = 0; i < 3; i++) {
await inputService.sendKeys(['shift', 'right'])
await sleep(100)
}
})
it('should handle word navigation', async () => {
// Type text with multiple words
await inputService.typeText('Word by word navigation test')
await sleep(500)
// Navigate word by word
if (process.platform === 'darwin') {
await inputService.sendKeys(['alt', 'left'])
} else {
await inputService.sendKeys(['control', 'left'])
}
await sleep(100)
// Select word by word
if (process.platform === 'darwin') {
await inputService.sendKeys(['shift', 'alt', 'right'])
} else {
await inputService.sendKeys(['shift', 'control', 'right'])
}
await sleep(100)
})
})
describe('Mouse Interaction', () => {
it('should handle click and drag', async () => {
// Type some text
await inputService.typeText('Click and drag test')
await sleep(500)
// Get window position
const windowBounds = await windowManager.getWindowBounds(testWindow)
// Calculate relative coordinates within the window
const startX = windowBounds.x + 100
const startY = windowBounds.y + 100
const endX = startX + 200
const endY = startY
// Perform click and drag
await inputService.moveMouse(startX, startY)
await sleep(100)
await inputService.mouseClick('left')
await sleep(100)
await inputService.mouseDrag(startX, startY, endX, endY)
await sleep(100)
})
it('should handle double click', async () => {
// Type a word
await inputService.typeText('DoubleClickTest')
await sleep(500)
// Get window position
const windowBounds = await windowManager.getWindowBounds(testWindow)
// Calculate click position
const clickX = windowBounds.x + 100
const clickY = windowBounds.y + 100
// Perform double click
await inputService.moveMouse(clickX, clickY)
await sleep(100)
await inputService.mouseDoubleClick('left')
await sleep(100)
})
})
})