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.", ); });