| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import { describe, expect, test } from "bun:test"
- import {
- disposeIfDisposable,
- getHoveredLinkText,
- getSpeechRecognitionCtor,
- hasSetOption,
- isDisposable,
- setOptionIfSupported,
- } from "./runtime-adapters"
- describe("runtime adapters", () => {
- test("detects and disposes disposable values", () => {
- let count = 0
- const value = {
- dispose: () => {
- count += 1
- },
- }
- expect(isDisposable(value)).toBe(true)
- disposeIfDisposable(value)
- expect(count).toBe(1)
- })
- test("ignores non-disposable values", () => {
- expect(isDisposable({ dispose: "nope" })).toBe(false)
- expect(() => disposeIfDisposable({ dispose: "nope" })).not.toThrow()
- })
- test("sets options only when setter exists", () => {
- const calls: Array<[string, unknown]> = []
- const value = {
- setOption: (key: string, next: unknown) => {
- calls.push([key, next])
- },
- }
- expect(hasSetOption(value)).toBe(true)
- setOptionIfSupported(value, "fontFamily", "Berkeley Mono")
- expect(calls).toEqual([["fontFamily", "Berkeley Mono"]])
- expect(() => setOptionIfSupported({}, "fontFamily", "Berkeley Mono")).not.toThrow()
- })
- test("reads hovered link text safely", () => {
- expect(getHoveredLinkText({ currentHoveredLink: { text: "https://example.com" } })).toBe("https://example.com")
- expect(getHoveredLinkText({ currentHoveredLink: { text: 1 } })).toBeUndefined()
- expect(getHoveredLinkText(null)).toBeUndefined()
- })
- test("resolves speech recognition constructor with webkit precedence", () => {
- // oxlint-disable-next-line no-extraneous-class
- class SpeechCtor {}
- // oxlint-disable-next-line no-extraneous-class
- class WebkitCtor {}
- const ctor = getSpeechRecognitionCtor({
- SpeechRecognition: SpeechCtor,
- webkitSpeechRecognition: WebkitCtor,
- })
- expect(ctor).toBe(WebkitCtor)
- })
- test("returns undefined when no valid speech constructor exists", () => {
- expect(getSpeechRecognitionCtor({ SpeechRecognition: "nope" })).toBeUndefined()
- expect(getSpeechRecognitionCtor(undefined)).toBeUndefined()
- })
- })
|