Roo-Code/webview-ui/src/utils/__tests__/sourceMapUtils.spec.ts
2025-08-28 11:18:45 -07:00

87 lines
3.1 KiB
TypeScript

import { parseStackTrace, applySourceMapsToStack, enhanceErrorWithSourceMaps } from "../sourceMapUtils"
// Mock console.debug to avoid cluttering test output
beforeEach(() => {
vi.spyOn(console, "debug").mockImplementation(() => {})
})
describe("sourceMapUtils", () => {
describe("parseStackTrace", () => {
// Note: parseStackTrace is now a compatibility function
test("should correctly parse a Chrome-style stack trace", async () => {
const stackTrace = `Error: Test error
at Function.execute (webpack:///./src/components/App.tsx:123:45)
at Object.next (webpack:///./node_modules/react/index.js:76:21)
at eval (webpack:///./src/utils/helpers.ts:89:10)`
const frames = await parseStackTrace(stackTrace)
// Verify it still returns an array of frame objects
expect(frames).toBeInstanceOf(Array)
expect(frames.length).toBeGreaterThan(0)
// Check that the first frame has the expected properties
const firstFrame = frames[0]
expect(firstFrame).toHaveProperty("functionName")
expect(firstFrame).toHaveProperty("fileName")
expect(firstFrame).toHaveProperty("lineNumber")
expect(firstFrame).toHaveProperty("columnNumber")
expect(firstFrame).toHaveProperty("source")
// Verify the first frame has the correct values
expect(firstFrame.fileName).toBe("webpack:///./src/components/App.tsx")
expect(firstFrame.lineNumber).toBe(123)
expect(firstFrame.columnNumber).toBe(45)
})
test("should return empty array for empty stack", async () => {
expect(await parseStackTrace("")).toEqual([])
expect(await parseStackTrace(undefined as unknown as string)).toEqual([])
})
})
describe("applySourceMapsToStack", () => {
test("should return original stack when source maps cannot be applied", async () => {
const stackTrace = `Error: Test error
at Function.execute (webpack:///./src/components/App.tsx:123:45)`
const result = await applySourceMapsToStack(stackTrace)
// For now, we expect it to return the original stack
// since we haven't implemented actual source map application
expect(result).toBe(stackTrace)
})
test("should handle empty stack", async () => {
const emptyStack = ""
const result = await applySourceMapsToStack(emptyStack)
expect(result).toBe(emptyStack)
})
})
describe("enhanceErrorWithSourceMaps", () => {
test("should add sourceMappedStack property to error", async () => {
const error = new Error("Test error")
error.stack = `Error: Test error
at Function.execute (webpack:///./src/components/App.tsx:123:45)`
// Mock the applySourceMapsToStack function
vi.spyOn(global.console, "error").mockImplementation(() => {})
const enhancedError = await enhanceErrorWithSourceMaps(error)
expect(enhancedError).toBe(error) // Should return the same error object
expect("sourceMappedStack" in enhancedError).toBe(true)
})
test("should handle errors without stack", async () => {
const error = new Error("Test error")
error.stack = undefined
const enhancedError = await enhanceErrorWithSourceMaps(error)
expect(enhancedError).toBe(error)
expect("sourceMappedStack" in enhancedError).toBe(false)
})
})
})