@specs-feup/clava
Version:
A C/C++ source-to-source compiler written in Typescript
94 lines (73 loc) • 3.16 kB
text/typescript
import { jest } from "@jest/globals";
import fs from "fs";
import path from "path";
import ClangPlugin from "./ClangPlugin.js";
describe("ClangPlugin", () => {
describe("validateClangExecutable", () => {
it("should return the clang executable name when given a valid command", async () => {
const executableName = "clang -o main main.c";
await expect(
ClangPlugin.validateClangExecutable(executableName)
).resolves.toBeUndefined();
});
it("should throw an error when given an invalid command", async () => {
const executableName = "gcc -o main main.c";
await expect(
ClangPlugin.validateClangExecutable(executableName)
).rejects.toThrow("Could not find clang executable");
});
});
/*
describe("getClangVersionNumberFromExecutable", () => {
it("should return the clang version number when given a valid clang executable", async () => {
const clangExecutable = "clang++-14";
const expectedVersionNumber = "14.0.6";
const actualVersionNumber =
await ClangPlugin.getClangVersionNumberFromExecutable(clangExecutable);
expect(actualVersionNumber).toBe(expectedVersionNumber);
});
it("should throw an error when given an invalid clang executable", async () => {
const clangExecutable = "invalid-clang-executable";
await expect(
ClangPlugin.getClangVersionNumberFromExecutable(clangExecutable)
).rejects.toThrow("Invalid executable");
});
});
describe("getClangVersion", () => {
it("should return the clang version number when given a valid clang executable", async () => {
const clangExecutable = "clang-14";
const expectedVersion = "14.0.6";
const actualVersion = await ClangPlugin.getClangVersion(clangExecutable);
expect(actualVersion).toBe(expectedVersion);
});
it("should throw an error when given an invalid clang executable", async () => {
const clangExecutable = "gcc";
await expect(
ClangPlugin.getClangVersion(clangExecutable)
).rejects.toThrow("Could not find clang executable");
});
});
describe("getAvailablePlugins", () => {
it("should return a map of available clang plugins", async () => {
const projectDir = process.cwd();
const testDir = path.join(projectDir, "clang-plugin-binaries");
const expectedMap = {
"14.0.0": `${testDir}/ClangASTDumper_14.0.0.so`,
//"15.0.0": `${testDir}/ClangASTDumper_15.0.0.so`,
};
expect(ClangPlugin.clangPluginDir).toBe("clang-plugin-binaries");
expect(ClangPlugin.pluginNamePrefix).toBe("ClangASTDumper");
const actualMap = await ClangPlugin.getAvailablePlugins();
expect(actualMap).toEqual(expectedMap);
jest.restoreAllMocks();
});
it("should throw an error when the clang-plugin-binaries directory does not exist", async () => {
jest.spyOn(fs, "existsSync").mockClear().mockReturnValue(false);
await expect(ClangPlugin.getAvailablePlugins()).rejects.toThrow(
"Could not find 'clang-plugin-binaries' directory"
);
jest.restoreAllMocks();
});
});
*/
});