import type { Props } from "@alloy-js/core"; import { refkey } from "@alloy-js/core"; import { describe, expect, it } from "vitest"; import { FunctionType } from "../src/components/FunctionType.jsx"; import * as ts from "../src/components/index.js"; import type { ParameterDescriptor } from "../src/components/index.js"; import { TestFile } from "./utils.js"; it("render basic", () => { expect( , ).toRenderTo(` () => void `); }); it("render in interface", () => { expect( } /> , ).toRenderTo(` interface Foo { foo: () => void } `); }); describe("marking it as async", () => { it("no return type change to Promise", () => { expect( , ).toRenderTo(` () => Promise `); }); it("explicit returnType change to Promise", () => { expect( , ).toRenderTo(` () => Promise `); }); it("component returnType change to Promise", () => { function Foo(_props?: Props) { return <>Foo; } expect( } /> , ).toRenderTo(` () => Promise `); }); }); it("supports parameters by element", () => { const decl = ( a, b ); expect({decl}).toRenderTo(` (a, b) => void `); }); it("supports type parameters by descriptor object", () => { const decl = ( ); expect({decl}).toRenderTo(` () => void `); }); it("supports type parameters by descriptor array", () => { const decl = ; expect({decl}).toRenderTo(` () => void `); }); it("supports type parameters by element", () => { const decl = ( a, b ); expect({decl}).toRenderTo(` () => void `); }); describe("symbols", () => { it("create optional parameters", () => { const paramDesc: ParameterDescriptor = { name: "foo", refkey: refkey(), type: "any", optional: true, }; const decl = ; expect({decl}).toRenderTo(` (foo?: any) => void `); }); it("create rest parameters", () => { const paramDesc: ParameterDescriptor = { name: "foo", refkey: refkey(), type: "any[]", rest: true, }; const decl = ; expect({decl}).toRenderTo(` (...foo: any[]) => void `); }); });