78 lines
2.4 KiB
TypeScript
78 lines
2.4 KiB
TypeScript
import {
|
|
assertEquals,
|
|
assertRejects,
|
|
assertThrows,
|
|
} from "https://deno.land/std@0.224.0/assert/mod.ts";
|
|
import { DependencyManager } from "./dependency-manager.ts";
|
|
|
|
// Test case for registering a module
|
|
Deno.test("DependencyManager: register a module", () => {
|
|
const manager = new DependencyManager();
|
|
const provider = () => "dependency";
|
|
manager.register("identifier", provider);
|
|
assertEquals(
|
|
manager.resolve("identifier"),
|
|
Promise.resolve("dependency"),
|
|
);
|
|
});
|
|
|
|
// Test case for resolving a module
|
|
Deno.test("DependencyManager: resolve a module", async () => {
|
|
const manager = new DependencyManager();
|
|
const provider = () => "dependency";
|
|
manager.register("identifier", provider);
|
|
const result = await manager.resolve("identifier");
|
|
assertEquals(result, "dependency");
|
|
});
|
|
|
|
// Test case for resolving an async module
|
|
Deno.test("DependencyManager: resolve an async module", async () => {
|
|
const manager = new DependencyManager();
|
|
const provider = () => {
|
|
return new Promise((resolve) =>
|
|
setTimeout(() => resolve("dependency"), 100)
|
|
);
|
|
};
|
|
manager.register("identifier", provider);
|
|
const result = await manager.resolve("identifier");
|
|
assertEquals(result, "dependency");
|
|
});
|
|
|
|
// Test case for handling circular dependencies
|
|
Deno.test("DependencyManager: circular dependency detection", async () => {
|
|
const manager = new DependencyManager();
|
|
const providerA = async () => await manager.resolve("B");
|
|
const providerB = async () => await manager.resolve("A");
|
|
|
|
manager.register("A", providerA);
|
|
manager.register("B", providerB);
|
|
|
|
await assertRejects(
|
|
() => manager.resolve("A"),
|
|
Error,
|
|
"Circular dependency detected for module A.",
|
|
);
|
|
});
|
|
|
|
// Test case for handling duplicate module registration
|
|
Deno.test("DependencyManager: duplicate module registration", () => {
|
|
const manager = new DependencyManager();
|
|
const provider = () => "dependency";
|
|
manager.register("identifier", provider);
|
|
assertThrows(
|
|
() => manager.register("identifier", provider),
|
|
Error,
|
|
"Module identifier is already registered.",
|
|
);
|
|
});
|
|
|
|
// Test case for handling unresolved modules
|
|
Deno.test("DependencyManager: resolve an unregistered module", async () => {
|
|
const manager = new DependencyManager();
|
|
await assertRejects(
|
|
() => manager.resolve("unregistered-identifier"),
|
|
Error,
|
|
"Module unregistered-identifier is not registered.",
|
|
);
|
|
});
|