import { code, Output, refkey } from "@alloy-js/core";
import { describe, expect, it } from "vitest";
import * as jv from "../src/components/index.js";
import { TestPackage } from "./utils.js";
it("declares basic empty function", () => {
expect(
{code`
class Test {
${(
System.out.println("Test");
)}
}
`}
,
).toRenderTo(`
package me.test.code;
class Test {
public void testMethod() {
System.out.println("Test");
}
}
`);
});
it("declares bodyless function", () => {
expect(
{code`
class Test {
${()}
}
`}
,
).toRenderTo(`
package me.test.code;
class Test {
public void testMethod();
}
`);
});
describe("can throw errors", () => {
it("of generic Exception", () => {
expect(
{code`
class Test {
${()}
}
`}
,
).toRenderTo(`
package me.test.code;
class Test {
public void testMethod() throws Exception;
}
`);
});
it("of custom Exception", () => {
expect(
,
).toRenderTo({
"me/test/code/Test.java": `
package me.test.code;
import me.test.code.errors.CustomError;
class Test {
public void testMethod() throws CustomError;
}
`,
"me/test/code/errors/CustomError.java": expect.any(String),
});
});
});
it("declares return type", () => {
expect(
{code`
class Test {
${(
System.out.println("Test");
return "Test";
)}
}
`}
,
).toRenderTo(`
package me.test.code;
class Test {
public String testMethod() {
System.out.println("Test");
return "Test";
}
}
`);
});
it("declares parameters", () => {
expect(
,
).toRenderTo({
"me/test/code/Model.java": expect.any(String),
"me/test/code/imports/Test.java": `
package me.test.code.imports;
import me.test.code.Model;
public class Test {
public void testMethod(Model myModel, String name) {
System.out.println("Test");
}
}
`,
});
});
it("defines generics", () => {
expect(
,
).toRenderTo({
"me/test/code/Model.java": expect.any(String),
"me/test/code/imports/Test.java": `
package me.test.code.imports;
import me.test.code.Model;
public class Test {
public void testMethod() {
System.out.println("Test");
}
}
`,
});
});