diff --git a/src/loaders/forge/forge-environment-type.ts b/src/loaders/forge/forge-environment-type.ts new file mode 100644 index 0000000..755609a --- /dev/null +++ b/src/loaders/forge/forge-environment-type.ts @@ -0,0 +1,44 @@ +import { Enum, EnumOptions } from "@/utils/enum"; + +/** + * Represents the different physical sides that a Forge mod can run on. + */ +enum ForgeEnvironmentTypeValues { + /** + * Present on the client side. + */ + CLIENT = "CLIENT", + + /** + * Present on the dedicated server. + */ + SERVER = "SERVER", + + /** + * Present on both the client and server side. + */ + BOTH = "BOTH", +} + +/** + * Options for configuring the behavior of the `ForgeEnvironmentType` enum. + */ +const ForgeEnvironmentTypeOptions: EnumOptions = { + /** + * Ignore the case of the environment type string when parsing. + */ + ignoreCase: true, +}; + +/** + * Represents the different physical sides that a Forge mod can run on. + */ +export const ForgeEnvironmentType = Enum.create( + ForgeEnvironmentTypeValues, + ForgeEnvironmentTypeOptions, +); + +/** + * Represents the different physical sides that a Forge mod can run on. + */ +export type ForgeEnvironmentType = Enum; diff --git a/tests/unit/loaders/forge/forge-environment-type.spec.ts b/tests/unit/loaders/forge/forge-environment-type.spec.ts new file mode 100644 index 0000000..6f45077 --- /dev/null +++ b/tests/unit/loaders/forge/forge-environment-type.spec.ts @@ -0,0 +1,29 @@ +import { ForgeEnvironmentType } from "@/loaders/forge/forge-environment-type"; + +describe("ForgeEnvironmentType", () => { + describe("parse", () => { + test("parses all its own formatted values", () => { + for (const value of ForgeEnvironmentType.values()) { + expect(ForgeEnvironmentType.parse(ForgeEnvironmentType.format(value))).toBe(value); + } + }); + + test("parses all friendly names of its own values", () => { + for (const value of ForgeEnvironmentType.values()) { + expect(ForgeEnvironmentType.parse(ForgeEnvironmentType.friendlyNameOf(value))).toBe(value); + } + }); + + test("parses all its own formatted values in lowercase", () => { + for (const value of ForgeEnvironmentType.values()) { + expect(ForgeEnvironmentType.parse(ForgeEnvironmentType.format(value).toLowerCase())).toBe(value); + } + }); + + test("parses all its own formatted values in UPPERCASE", () => { + for (const value of ForgeEnvironmentType.values()) { + expect(ForgeEnvironmentType.parse(ForgeEnvironmentType.format(value).toUpperCase())).toBe(value); + } + }); + }); +});