@fluidframework/task-manager 2.0.0-rc.2.0.2 → 2.0.0-rc.3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/api-report/task-manager.api.md +5 -5
- package/dist/interfaces.d.ts +3 -3
- package/dist/interfaces.js.map +1 -1
- package/dist/legacy.d.ts +17 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/public.d.ts +12 -0
- package/dist/taskManager.d.ts +4 -3
- package/dist/taskManager.d.ts.map +1 -1
- package/dist/taskManager.js +22 -22
- package/dist/taskManager.js.map +1 -1
- package/dist/taskManagerFactory.d.ts +1 -1
- package/dist/taskManagerFactory.d.ts.map +1 -1
- package/dist/taskManagerFactory.js +1 -1
- package/dist/taskManagerFactory.js.map +1 -1
- package/internal.d.ts +11 -0
- package/legacy.d.ts +11 -0
- package/lib/interfaces.d.ts +3 -3
- package/lib/interfaces.js.map +1 -1
- package/lib/legacy.d.ts +17 -0
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/public.d.ts +12 -0
- package/lib/taskManager.d.ts +4 -3
- package/lib/taskManager.d.ts.map +1 -1
- package/lib/taskManager.js +4 -4
- package/lib/taskManager.js.map +1 -1
- package/lib/taskManagerFactory.d.ts +1 -1
- package/lib/taskManagerFactory.d.ts.map +1 -1
- package/lib/taskManagerFactory.js +1 -1
- package/lib/taskManagerFactory.js.map +1 -1
- package/package.json +36 -47
- package/src/interfaces.ts +3 -3
- package/src/packageVersion.ts +1 -1
- package/src/taskManager.ts +11 -13
- package/src/taskManagerFactory.ts +4 -3
- package/api-extractor-cjs.json +0 -8
- package/dist/task-manager-alpha.d.ts +0 -27
- package/dist/task-manager-beta.d.ts +0 -29
- package/dist/task-manager-public.d.ts +0 -29
- package/dist/task-manager-untrimmed.d.ts +0 -335
- package/lib/task-manager-alpha.d.ts +0 -27
- package/lib/task-manager-beta.d.ts +0 -29
- package/lib/task-manager-public.d.ts +0 -29
- package/lib/task-manager-untrimmed.d.ts +0 -335
- package/lib/test/dirname.cjs +0 -16
- package/lib/test/dirname.cjs.map +0 -1
- package/lib/test/taskManager.fuzz.spec.js +0 -203
- package/lib/test/taskManager.fuzz.spec.js.map +0 -1
- package/lib/test/taskManager.spec.js +0 -845
- package/lib/test/taskManager.spec.js.map +0 -1
- package/lib/test/types/validateTaskManagerPrevious.generated.js +0 -12
- package/lib/test/types/validateTaskManagerPrevious.generated.js.map +0 -1
- /package/{dist → lib}/tsdoc-metadata.json +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"taskManager.spec.js","sourceRoot":"","sources":["../../src/test/taskManager.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"assert\";\nimport {\n\tMockFluidDataStoreRuntime,\n\tMockContainerRuntimeFactory,\n\tMockContainerRuntimeFactoryForReconnection,\n\tMockContainerRuntimeForReconnection,\n\tMockStorage,\n} from \"@fluidframework/test-runtime-utils\";\nimport { AttachState, ReadOnlyInfo } from \"@fluidframework/container-definitions\";\nimport { TaskManager } from \"../taskManager.js\";\nimport { TaskManagerFactory } from \"../taskManagerFactory.js\";\nimport { ITaskManager } from \"../interfaces.js\";\n\nfunction createConnectedTaskManager(id: string, runtimeFactory: MockContainerRuntimeFactory) {\n\t// Create and connect a TaskManager.\n\tconst dataStoreRuntime = new MockFluidDataStoreRuntime();\n\truntimeFactory.createContainerRuntime(dataStoreRuntime);\n\tconst services = {\n\t\tdeltaConnection: dataStoreRuntime.createDeltaConnection(),\n\t\tobjectStorage: new MockStorage(),\n\t};\n\n\tconst taskManager = new TaskManager(id, dataStoreRuntime, TaskManagerFactory.Attributes);\n\ttaskManager.connect(services);\n\treturn taskManager;\n}\n\nfunction createDetachedTaskManager(\n\tid: string,\n\truntimeFactory: MockContainerRuntimeFactory,\n): { taskManager: TaskManager; attach: () => Promise<void> } {\n\t// Create a detached TaskManager.\n\tconst dataStoreRuntime = new MockFluidDataStoreRuntime({ attachState: AttachState.Detached });\n\truntimeFactory.createContainerRuntime(dataStoreRuntime);\n\tconst clientId = dataStoreRuntime.clientId;\n\n\tconst taskManager = new TaskManager(id, dataStoreRuntime, TaskManagerFactory.Attributes);\n\tconst attach = async () => {\n\t\tconst services = {\n\t\t\tdeltaConnection: dataStoreRuntime.createDeltaConnection(),\n\t\t\tobjectStorage: new MockStorage(),\n\t\t};\n\n\t\t// Manually trigger a summarize (should be done automatically when attaching normally)\n\t\tawait taskManager.summarize();\n\n\t\tdataStoreRuntime.setAttachState(AttachState.Attached);\n\t\ttaskManager.connect(services);\n\n\t\t// Ensure clientId is set after attach (might be forced undefined in some tests)\n\t\tdataStoreRuntime.clientId = clientId;\n\t};\n\n\treturn { taskManager, attach };\n}\n\ndescribe(\"TaskManager\", () => {\n\tdescribe(\"Connected state\", () => {\n\t\tlet taskManager1: ITaskManager;\n\t\tlet taskManager2: ITaskManager;\n\t\tlet containerRuntimeFactory: MockContainerRuntimeFactory;\n\n\t\tbeforeEach(() => {\n\t\t\tcontainerRuntimeFactory = new MockContainerRuntimeFactory();\n\t\t\ttaskManager1 = createConnectedTaskManager(\"taskManager1\", containerRuntimeFactory);\n\t\t\ttaskManager2 = createConnectedTaskManager(\"taskManager2\", containerRuntimeFactory);\n\t\t});\n\n\t\tit(\"Can create a connected TaskManager\", () => {\n\t\t\tassert.ok(taskManager1, \"Could not create a task manager\");\n\t\t\tassert.ok(taskManager1.isAttached(), \"TaskManager should be attached\");\n\t\t\tassert.ok((taskManager1 as TaskManager).connected, \"TaskManager should be connected\");\n\t\t});\n\n\t\tdescribe(\"Volunteering for a task\", () => {\n\t\t\tit(\"Can volunteer for a task\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst isAssigned = await volunteerTaskP;\n\t\t\t\tassert.ok(isAssigned, \"Should resolve true\");\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\t\t\t});\n\n\t\t\tit(\"Can wait for a task\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\t\t\t\tconst volunteerTaskP2 = taskManager2.volunteerForTask(taskId);\n\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Task manager 1 should not be assigned\");\n\t\t\t\tassert.ok(taskManager2.queued(taskId), \"Task manager 2 should be queued\");\n\t\t\t\tassert.ok(!taskManager2.assigned(taskId), \"Task manager 2 should not be assigned\");\n\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst isAssigned1 = await volunteerTaskP1;\n\t\t\t\tassert.ok(isAssigned1, \"Should resolve true\");\n\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t\tassert.ok(taskManager2.queued(taskId), \"Task manager 2 should be queued\");\n\t\t\t\tassert.ok(!taskManager2.assigned(taskId), \"Task manager 2 should not be assigned\");\n\n\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst isAssigned2 = await volunteerTaskP2;\n\t\t\t\tassert.ok(isAssigned2, \"Should resolve true\");\n\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Task manager 1 should not be assigned\");\n\t\t\t\tassert.ok(taskManager2.queued(taskId), \"Task manager 2 should be queued\");\n\t\t\t\tassert.ok(taskManager2.assigned(taskId), \"Task manager 2 should not be assigned\");\n\t\t\t});\n\n\t\t\tit(\"Rejects the promise if abandon before ack\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\t// Will reject due to exiting the queue without first acquiring task\n\t\t\t\t// Promise should be settled already prior to processing messages\n\t\t\t\tawait assert.rejects(volunteerTaskP);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t});\n\n\t\t\tit(\"Rejects the promise if abandon after ack but before acquire\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\t\t\t\tconst volunteerTaskP2 = taskManager2.volunteerForTask(taskId);\n\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Task manager 1 should not be assigned\");\n\t\t\t\tassert.ok(taskManager2.queued(taskId), \"Task manager 2 should be queued\");\n\t\t\t\tassert.ok(!taskManager2.assigned(taskId), \"Task manager 2 should not be assigned\");\n\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst isAssigned = await volunteerTaskP1;\n\t\t\t\tassert.ok(isAssigned, \"Should resolve true\");\n\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t\tassert.ok(taskManager2.queued(taskId), \"Task manager 2 should be queued\");\n\t\t\t\tassert.ok(!taskManager2.assigned(taskId), \"Task manager 2 should not be assigned\");\n\n\t\t\t\ttaskManager2.abandon(taskId);\n\t\t\t\t// Will reject due to exiting the queue without first acquiring task\n\t\t\t\t// Promise should be settled already prior to processing messages\n\t\t\t\tawait assert.rejects(volunteerTaskP2);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassert.ok(!taskManager2.queued(taskId), \"Should not be queued\");\n\t\t\t\tassert.ok(!taskManager2.assigned(taskId), \"Should not be assigned\");\n\t\t\t});\n\n\t\t\tit(\"Can abandon and immediately attempt to reacquire a task\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst isAssigned = await volunteerTaskP;\n\t\t\t\tassert.ok(isAssigned, \"Should resolve true\");\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\n\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\tconst revolunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst isAssigned2 = await revolunteerTaskP;\n\t\t\t\tassert.ok(isAssigned2, \"Should resolve true\");\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\t\t\t});\n\n\t\t\tit(\"Can attempt to volunteer for task twice and abandon twice (after ack)\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst isAssigned1 = await volunteerTaskP1;\n\t\t\t\tassert.ok(isAssigned1, \"Should resolve true\");\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\n\t\t\t\tconst volunteerTaskP2 = taskManager1.volunteerForTask(taskId);\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst isAssigned2 = await volunteerTaskP2;\n\t\t\t\tassert.ok(isAssigned2, \"Should resolve true\");\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\n\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\n\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t});\n\n\t\t\tit(\"Can attempt to lock task twice and abandon twice (before ack)\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\n\t\t\t\tconst volunteerTaskP2 = taskManager1.volunteerForTask(taskId);\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst isAssigned1 = await volunteerTaskP1;\n\t\t\t\tassert.ok(isAssigned1, \"Should resolve true\");\n\t\t\t\tconst isAssigned2 = await volunteerTaskP2;\n\t\t\t\tassert.ok(isAssigned2, \"Should resolve true\");\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\n\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t});\n\n\t\t\tit(\"Can volunteer for a task immediately after it was completed\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tawait volunteerTaskP;\n\n\t\t\t\ttaskManager2.subscribeToTask(taskId);\n\t\t\t\ttaskManager1.complete(taskId);\n\t\t\t\tconst volunteerTaskP2 = taskManager1.volunteerForTask(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tawait volunteerTaskP2;\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"taskManager1 should be assigned\");\n\t\t\t\tassert.ok(!taskManager2.queued(taskId), \"taskManager 2 should not be assigned\");\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"Subscribing to a task\", () => {\n\t\t\tit(\"Can subscribe to a task\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Task manager 1 should not be assigned\");\n\t\t\t\tassert.ok(taskManager1.subscribed(taskId), \"Task manager 1 should be subscribed\");\n\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t\tassert.ok(taskManager1.subscribed(taskId), \"Task manager 1 should be subscribed\");\n\t\t\t});\n\n\t\t\tit(\"Can abandon a subscribed task\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Task manager 1 should not be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Task manager 1 should not be assigned\");\n\t\t\t\tassert.ok(\n\t\t\t\t\t!taskManager1.subscribed(taskId),\n\t\t\t\t\t\"Task manager 1 should not be subscribed\",\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"Can subscribe and wait for a task\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t\ttaskManager2.subscribeToTask(taskId);\n\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Task manager 1 should not be assigned\");\n\t\t\t\tassert.ok(taskManager2.queued(taskId), \"Task manager 2 should be queued\");\n\t\t\t\tassert.ok(!taskManager2.assigned(taskId), \"Task manager 2 should not be assigned\");\n\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t\tassert.ok(taskManager2.queued(taskId), \"Task manager 2 should be queued\");\n\t\t\t\tassert.ok(!taskManager2.assigned(taskId), \"Task manager 2 should not be assigned\");\n\n\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassert.ok(taskManager2.assigned(taskId), \"Task manager 2 should be assigned\");\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"Completing tasks\", () => {\n\t\t\tit(\"Can complete a task\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tawait volunteerTaskP;\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\n\t\t\t\ttaskManager1.complete(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t});\n\n\t\t\tit(\"Rejects the promise if you try to complete without being assigned\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\t\t\t\tvoid taskManager2.volunteerForTask(taskId);\n\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tawait volunteerTaskP1;\n\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t\tassert.ok(taskManager2.queued(taskId), \"Task manager 2 should be queued\");\n\t\t\t\tassert.ok(!taskManager2.assigned(taskId), \"Task manager 2 should not be assigned\");\n\n\t\t\t\tassert.throws(() => {\n\t\t\t\t\ttaskManager2.complete(taskId);\n\t\t\t\t}, \"Should throw error\");\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t});\n\n\t\t\tit(\"Can complete a task and remove other clients from queue\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\t\t\t\tconst volunteerTaskP2 = taskManager2.volunteerForTask(taskId);\n\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst isAssigned1 = await volunteerTaskP1;\n\t\t\t\tassert.ok(isAssigned1, \"Should resolve true\");\n\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t\tassert.ok(taskManager2.queued(taskId), \"Task manager 2 should be queued\");\n\t\t\t\tassert.ok(!taskManager2.assigned(taskId), \"Task manager 2 should not be assigned\");\n\n\t\t\t\ttaskManager1.complete(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst isAssigned2 = await volunteerTaskP2;\n\t\t\t\tassert.ok(!isAssigned2, \"Should resolve false\");\n\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Task manager 1 should not be queued\");\n\t\t\t\tassert.ok(!taskManager2.queued(taskId), \"Task manager 2 should not be queued\");\n\t\t\t});\n\n\t\t\tit(\"Can complete a task and remove other subscribed clients from queue\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t\ttaskManager2.subscribeToTask(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t\tassert.ok(taskManager2.queued(taskId), \"Task manager 2 should be queued\");\n\t\t\t\tassert.ok(!taskManager2.assigned(taskId), \"Task manager 2 should not be assigned\");\n\n\t\t\t\ttaskManager1.complete(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Task manager 1 should not be queued\");\n\t\t\t\tassert.ok(!taskManager2.queued(taskId), \"Task manager 2 should not be queued\");\n\t\t\t});\n\n\t\t\tit(\"Can emit completed event\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\t\t\t\ttaskManager2.subscribeToTask(taskId);\n\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tawait volunteerTaskP1;\n\n\t\t\t\tlet taskManager1EventFired = false;\n\t\t\t\tlet taskManager2EventFired = false;\n\t\t\t\ttaskManager1.on(\"completed\", (completedTaskId: string) => {\n\t\t\t\t\tassert.ok(completedTaskId === taskId, \"taskId should match\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager1EventFired,\n\t\t\t\t\t\t\"Should only fire completed event once on taskManager1\",\n\t\t\t\t\t);\n\t\t\t\t\ttaskManager1EventFired = true;\n\t\t\t\t});\n\t\t\t\ttaskManager2.on(\"completed\", (completedTaskId: string) => {\n\t\t\t\t\tassert.ok(completedTaskId === taskId, \"taskId should match\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager2EventFired,\n\t\t\t\t\t\t\"Should only fire completed event once on taskManager2\",\n\t\t\t\t\t);\n\t\t\t\t\ttaskManager2EventFired = true;\n\t\t\t\t});\n\t\t\t\ttaskManager1.complete(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassert.ok(\n\t\t\t\t\ttaskManager1EventFired,\n\t\t\t\t\t\"Should have raised completed event on taskManager1\",\n\t\t\t\t);\n\t\t\t\tassert.ok(\n\t\t\t\t\ttaskManager2EventFired,\n\t\t\t\t\t\"Should have raised completed event on taskManager2\",\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"Can complete a task with a pending volunteer op\", async () => {\n\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tawait volunteerTaskP1;\n\n\t\t\t\tlet taskManager1EventFired = false;\n\t\t\t\tlet taskManager2EventFired = false;\n\t\t\t\ttaskManager1.on(\"completed\", (completedTaskId: string) => {\n\t\t\t\t\tassert.ok(completedTaskId === taskId, \"taskId should match\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager1EventFired,\n\t\t\t\t\t\t\"Should only fire completed event once on taskManager1\",\n\t\t\t\t\t);\n\t\t\t\t\ttaskManager1EventFired = true;\n\t\t\t\t});\n\t\t\t\ttaskManager2.on(\"completed\", (completedTaskId: string) => {\n\t\t\t\t\tassert.ok(completedTaskId === taskId, \"taskId should match\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager2EventFired,\n\t\t\t\t\t\t\"Should only fire completed event once on taskManager2\",\n\t\t\t\t\t);\n\t\t\t\t\ttaskManager2EventFired = true;\n\t\t\t\t});\n\n\t\t\t\tconst volunteerTaskP2 = taskManager2.volunteerForTask(taskId);\n\t\t\t\ttaskManager1.complete(taskId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tawait volunteerTaskP2;\n\n\t\t\t\tassert.ok(\n\t\t\t\t\ttaskManager1EventFired,\n\t\t\t\t\t\"Should have raised completed event on taskManager1\",\n\t\t\t\t);\n\t\t\t\tassert.ok(\n\t\t\t\t\ttaskManager2EventFired,\n\t\t\t\t\t\"Should have raised completed event on taskManager2\",\n\t\t\t\t);\n\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Task manager 1 should not be queued\");\n\t\t\t\tassert.ok(!taskManager2.queued(taskId), \"Task manager 2 should not be queued\");\n\t\t\t});\n\t\t});\n\t});\n\n\t// Note: Since read/write modes are not yet implemented in mocks, tests are limited to simulate these scenarios.\n\tdescribe(\"Read/Write Mode\", () => {\n\t\tlet taskManager1: ITaskManager;\n\t\tlet containerRuntimeFactory: MockContainerRuntimeFactoryForReconnection;\n\t\tlet containerRuntime1: MockContainerRuntimeForReconnection;\n\n\t\tconst setReadOnlyInfo = (readOnlyInfo: ReadOnlyInfo) => {\n\t\t\t(taskManager1 as any).runtime.deltaManager.readOnlyInfo = readOnlyInfo;\n\t\t\t// Force connection to simulate read mode (TaskManager considered the client disconnected in read mode)\n\t\t\tcontainerRuntime1.connected = readOnlyInfo.readonly === false;\n\t\t};\n\n\t\tbeforeEach(() => {\n\t\t\tcontainerRuntimeFactory = new MockContainerRuntimeFactoryForReconnection();\n\t\t\tconst dataStoreRuntime1 = new MockFluidDataStoreRuntime();\n\t\t\tcontainerRuntime1 = containerRuntimeFactory.createContainerRuntime(dataStoreRuntime1);\n\t\t\tconst services1 = {\n\t\t\t\tdeltaConnection: dataStoreRuntime1.createDeltaConnection(),\n\t\t\t\tobjectStorage: new MockStorage(),\n\t\t\t};\n\t\t\ttaskManager1 = new TaskManager(\n\t\t\t\t\"task-manager-1\",\n\t\t\t\tdataStoreRuntime1,\n\t\t\t\tTaskManagerFactory.Attributes,\n\t\t\t);\n\t\t\ttaskManager1.connect(services1);\n\t\t});\n\n\t\tit(\"Immediately rejects attempts to volunteer in read mode\", async () => {\n\t\t\tconst taskId = \"taskId\";\n\t\t\tsetReadOnlyInfo({\n\t\t\t\treadonly: true,\n\t\t\t\tpermissions: false,\n\t\t\t\tforced: false,\n\t\t\t\tstorageOnly: false,\n\t\t\t});\n\n\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\tawait assert.rejects(volunteerTaskP);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t});\n\n\t\tit(\"Immediately rejects attempts to volunteer with read-only permissions\", async () => {\n\t\t\tconst taskId = \"taskId\";\n\t\t\tsetReadOnlyInfo({\n\t\t\t\treadonly: true,\n\t\t\t\tpermissions: true,\n\t\t\t\tforced: false,\n\t\t\t\tstorageOnly: false,\n\t\t\t});\n\n\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\tawait assert.rejects(volunteerTaskP);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t});\n\n\t\tit(\"Can subscribe while in read mode\", async () => {\n\t\t\tconst taskId = \"taskId\";\n\t\t\tsetReadOnlyInfo({\n\t\t\t\treadonly: true,\n\t\t\t\tpermissions: false,\n\t\t\t\tforced: false,\n\t\t\t\tstorageOnly: false,\n\t\t\t});\n\n\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\tassert.ok(taskManager1.subscribed(taskId), \"Should be subscribed\");\n\n\t\t\tsetReadOnlyInfo({ readonly: false });\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\t\t\tassert.ok(taskManager1.subscribed(taskId), \"Should be subscribed\");\n\t\t});\n\n\t\tit(\"Immediately rejects attempts to subscribe with read-only permissions\", async () => {\n\t\t\tconst taskId = \"taskId\";\n\t\t\tsetReadOnlyInfo({\n\t\t\t\treadonly: true,\n\t\t\t\tpermissions: true,\n\t\t\t\tforced: false,\n\t\t\t\tstorageOnly: false,\n\t\t\t});\n\n\t\t\tassert.throws(() => {\n\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t}, \"Should throw error if subscribing with read-only permissions\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\tassert.ok(!taskManager1.subscribed(taskId), \"Should not be subscribed\");\n\t\t});\n\t});\n\n\tdescribe(\"Detached/Attach\", () => {\n\t\tlet taskManager1: TaskManager;\n\t\tlet attachTaskManager1: () => Promise<void>;\n\t\t// let taskManager2: ITaskManager;\n\t\t// let attachTaskManager2: () => void;\n\t\tlet containerRuntimeFactory: MockContainerRuntimeFactory;\n\t\tconst placeholderClientId = \"placeholder\";\n\n\t\tbeforeEach(() => {\n\t\t\tcontainerRuntimeFactory = new MockContainerRuntimeFactory();\n\t\t\tconst createResponse1 = createDetachedTaskManager(\n\t\t\t\t\"taskManager1\",\n\t\t\t\tcontainerRuntimeFactory,\n\t\t\t);\n\t\t\ttaskManager1 = createResponse1.taskManager;\n\t\t\tattachTaskManager1 = createResponse1.attach;\n\t\t});\n\n\t\tit(\"Can create a detached TaskManager and attach later\", async () => {\n\t\t\tassert.ok(!taskManager1.isAttached(), \"taskManager1 should be detached\");\n\t\t\tawait attachTaskManager1();\n\t\t\tassert.ok(taskManager1.isAttached(), \"taskManager1 should be attached\");\n\t\t});\n\n\t\tdescribe(\"Behavior before attach\", () => {\n\t\t\tdescribe(\"Volunteering for a task\", () => {\n\t\t\t\tit(\"Can volunteer for a task before attach\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait volunteerTaskP;\n\t\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\t\t\t\t});\n\n\t\t\t\tit(\"Can volunteer and abandon a task before attach\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait volunteerTaskP;\n\t\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\t\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"Subscribing to a task\", () => {\n\t\t\t\tit(\"Can subscribe to a task before attach\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should be subscribed\",\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\tit(\"Can abandon a subscribed task before attach\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Task manager 1 should not be queued\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager1.assigned(taskId),\n\t\t\t\t\t\t\"Task manager 1 should not be assigned\",\n\t\t\t\t\t);\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should not be subscribed\",\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"Completing tasks\", () => {\n\t\t\t\tit(\"Can complete a task before attach\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait volunteerTaskP;\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\n\t\t\t\t\ttaskManager1.complete(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t});\n\n\t\t\t\tit(\"Can emit completed event before attach\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait volunteerTaskP1;\n\n\t\t\t\t\tlet taskManager1EventFired = false;\n\t\t\t\t\ttaskManager1.once(\"completed\", (completedTaskId: string) => {\n\t\t\t\t\t\tassert.ok(completedTaskId === taskId, \"taskId should match\");\n\t\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t\t!taskManager1EventFired,\n\t\t\t\t\t\t\t\"Should only fire completed event once on taskManager1\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\ttaskManager1EventFired = true;\n\t\t\t\t\t});\n\t\t\t\t\ttaskManager1.complete(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1EventFired,\n\t\t\t\t\t\t\"Should have raised completed event on taskManager1\",\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"Behavior after attaching\", () => {\n\t\t\tdescribe(\"Volunteering for a task\", () => {\n\t\t\t\tit(\"Will keep task assignment after attaching if clientId is defined\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait volunteerTaskP;\n\t\t\t\t\tawait attachTaskManager1();\n\t\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\t\t\t\t});\n\n\t\t\t\tit(\"Will lose task assignment after attaching if clientId is undefined\", async () => {\n\t\t\t\t\t(taskManager1 as any).runtime.clientId = undefined;\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait volunteerTaskP;\n\t\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\t\t\t\t\tassert.strictEqual(\n\t\t\t\t\t\t(taskManager1 as any).taskQueues.get(taskId)?.[0],\n\t\t\t\t\t\tplaceholderClientId,\n\t\t\t\t\t\t\"taskQueue should have placeholder clientId\",\n\t\t\t\t\t);\n\n\t\t\t\t\tlet taskManager1EventFired = false;\n\t\t\t\t\ttaskManager1.on(\"lost\", (completedTaskId: string) => {\n\t\t\t\t\t\tassert.ok(completedTaskId === taskId, \"taskId should match\");\n\t\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t\t!taskManager1EventFired,\n\t\t\t\t\t\t\t\"Should only fire lost event once on taskManager1\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\ttaskManager1EventFired = true;\n\t\t\t\t\t});\n\t\t\t\t\tawait attachTaskManager1();\n\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1EventFired,\n\t\t\t\t\t\t\"Should have raised lost event on taskManager1\",\n\t\t\t\t\t);\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t(taskManager1 as any).taskQueues.size === 0,\n\t\t\t\t\t\t\"taskQueue should be empty\",\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"Subscribing to a task\", () => {\n\t\t\t\tit(\"Can subscribe to a task and stay assigned/subscribed after attach\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait attachTaskManager1();\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should be subscribed\",\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\tit(\"Can subscribe to a task and stay subscribed after attach if clientId was undefined\", async () => {\n\t\t\t\t\t(taskManager1 as any).runtime.clientId = undefined;\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tlet taskManager1EventFired = false;\n\t\t\t\t\ttaskManager1.on(\"lost\", (completedTaskId: string) => {\n\t\t\t\t\t\tassert.ok(completedTaskId === taskId, \"taskId should match\");\n\t\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t\t!taskManager1EventFired,\n\t\t\t\t\t\t\t\"Should only fire lost event once on taskManager1\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\ttaskManager1EventFired = true;\n\t\t\t\t\t});\n\n\t\t\t\t\tawait attachTaskManager1();\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager1.assigned(taskId),\n\t\t\t\t\t\t\"Task manager 1 should not be assigned\",\n\t\t\t\t\t);\n\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1EventFired,\n\t\t\t\t\t\t\"Should have raised lost event on taskManager1\",\n\t\t\t\t\t);\n\t\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should be subscribed\",\n\t\t\t\t\t);\n\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t(taskManager1 as any).taskQueues.get(taskId)?.length !== 0,\n\t\t\t\t\t\t\"taskQueue should not be empty\",\n\t\t\t\t\t);\n\t\t\t\t\tassert.notStrictEqual(\n\t\t\t\t\t\t(taskManager1 as any).taskQueues.get(taskId)?.[0],\n\t\t\t\t\t\tplaceholderClientId,\n\t\t\t\t\t\t\"taskQueue should not have placeholder clientId\",\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\t// todo AB#7310\n\t\t\t\tit.skip(\"Can abandon a subscribed task after attach\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait attachTaskManager1();\n\t\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Task manager 1 should not be queued\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager1.assigned(taskId),\n\t\t\t\t\t\t\"Task manager 1 should not be assigned\",\n\t\t\t\t\t);\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should not be subscribed\",\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"Completing tasks\", () => {\n\t\t\t\tit(\"Can complete a task after attach\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait volunteerTaskP;\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\t\t\t\t\tawait attachTaskManager1();\n\t\t\t\t\ttaskManager1.complete(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t});\n\n\t\t\t\tit(\"Can emit completed event after attach\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait volunteerTaskP1;\n\t\t\t\t\tawait attachTaskManager1();\n\t\t\t\t\tlet taskManager1EventFired = false;\n\t\t\t\t\ttaskManager1.on(\"completed\", (completedTaskId: string) => {\n\t\t\t\t\t\tassert.ok(completedTaskId === taskId, \"taskId should match\");\n\t\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t\t!taskManager1EventFired,\n\t\t\t\t\t\t\t\"Should only fire completed event once on taskManager1\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\ttaskManager1EventFired = true;\n\t\t\t\t\t});\n\t\t\t\t\ttaskManager1.complete(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1EventFired,\n\t\t\t\t\t\t\"Should have raised completed event on taskManager1\",\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"Disconnect/Reconnect\", () => {\n\t\tlet containerRuntimeFactory: MockContainerRuntimeFactoryForReconnection;\n\t\tlet containerRuntime1: MockContainerRuntimeForReconnection;\n\t\tlet containerRuntime2: MockContainerRuntimeForReconnection;\n\t\tlet taskManager1: TaskManager;\n\t\tlet taskManager2: TaskManager;\n\n\t\tbeforeEach(async () => {\n\t\t\tcontainerRuntimeFactory = new MockContainerRuntimeFactoryForReconnection();\n\n\t\t\t// Create the first TaskManager.\n\t\t\tconst dataStoreRuntime1 = new MockFluidDataStoreRuntime();\n\t\t\tcontainerRuntime1 = containerRuntimeFactory.createContainerRuntime(dataStoreRuntime1);\n\t\t\tconst services1 = {\n\t\t\t\tdeltaConnection: dataStoreRuntime1.createDeltaConnection(),\n\t\t\t\tobjectStorage: new MockStorage(),\n\t\t\t};\n\t\t\ttaskManager1 = new TaskManager(\n\t\t\t\t\"task-manager-1\",\n\t\t\t\tdataStoreRuntime1,\n\t\t\t\tTaskManagerFactory.Attributes,\n\t\t\t);\n\t\t\ttaskManager1.connect(services1);\n\n\t\t\t// Create the second TaskManager.\n\t\t\tconst dataStoreRuntime2 = new MockFluidDataStoreRuntime();\n\t\t\tcontainerRuntime2 = containerRuntimeFactory.createContainerRuntime(dataStoreRuntime2);\n\t\t\tconst services2 = {\n\t\t\t\tdeltaConnection: dataStoreRuntime2.createDeltaConnection(),\n\t\t\t\tobjectStorage: new MockStorage(),\n\t\t\t};\n\t\t\ttaskManager2 = new TaskManager(\n\t\t\t\t\"task-manager-2\",\n\t\t\t\tdataStoreRuntime2,\n\t\t\t\tTaskManagerFactory.Attributes,\n\t\t\t);\n\t\t\ttaskManager2.connect(services2);\n\t\t});\n\n\t\tit(\"Can create a TaskManager while disconnected\", () => {\n\t\t\tcontainerRuntime1.connected = false;\n\t\t\tassert.ok(taskManager1, \"Could not create a task manager\");\n\t\t\tassert.ok(taskManager1.isAttached(), \"TaskManager should be attached\");\n\t\t\tassert.ok(!taskManager1.connected, \"TaskManager should be disconnected\");\n\t\t});\n\n\t\tdescribe(\"Behavior transitioning to disconnect\", () => {\n\t\t\tdescribe(\"Volunteering for a task\", () => {\n\t\t\t\tit(\"Disconnect while assigned: Raises a lost event and loses the task assignment\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tconst isAssigned = await volunteerTaskP;\n\t\t\t\t\tassert.ok(isAssigned, \"Should resolve true\");\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\n\t\t\t\t\tlet lostRaised = false;\n\t\t\t\t\ttaskManager1.once(\"lost\", () => {\n\t\t\t\t\t\tlostRaised = true;\n\t\t\t\t\t});\n\n\t\t\t\t\tcontainerRuntime1.connected = false;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t\tassert.ok(lostRaised, \"Should have raised a lost event\");\n\t\t\t\t});\n\n\t\t\t\tit(\"Disconnect while queued: Rejects the volunteerForTask promise and exits the queue\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tconst volunteerTaskP2 = taskManager2.volunteerForTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tconst isAssigned = await volunteerTaskP1;\n\t\t\t\t\tassert.ok(isAssigned, \"Should resolve true\");\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 Should be assigned\");\n\t\t\t\t\tassert.ok(taskManager2.queued(taskId), \"Task manager 2 should be queued\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager2.assigned(taskId),\n\t\t\t\t\t\t\"Task manager 2 should not be assigned\",\n\t\t\t\t\t);\n\n\t\t\t\t\tcontainerRuntime2.connected = false;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait assert.rejects(volunteerTaskP2, \"Should have rejected the P2 promise\");\n\t\t\t\t\tassert.ok(!taskManager2.queued(taskId), \"Task manager 2 should not be queued\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager2.assigned(taskId),\n\t\t\t\t\t\t\"Task manager 2 should not be assigned\",\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\tit(\"Disconnect while queued: Removed from the queue for other clients\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP1 = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\ttaskManager2.subscribeToTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait volunteerTaskP1;\n\t\t\t\t\tconst clientId1 = containerRuntime1.clientId;\n\t\t\t\t\tconst clientId2 = containerRuntime2.clientId;\n\n\t\t\t\t\tassert.deepEqual(\n\t\t\t\t\t\t(taskManager1 as any).taskQueues.get(taskId),\n\t\t\t\t\t\t[clientId1, clientId2],\n\t\t\t\t\t\t\"Task queue should have both clients\",\n\t\t\t\t\t);\n\n\t\t\t\t\tcontainerRuntime2.connected = false;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\t\tassert.deepEqual(\n\t\t\t\t\t\t(taskManager1 as any).taskQueues.get(taskId),\n\t\t\t\t\t\t[clientId1],\n\t\t\t\t\t\t\"Task queue should only have client 1\",\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\tit(\"Disconnect while pending: Rejects the volunteerForTask promise\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tcontainerRuntime1.connected = false;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait assert.rejects(volunteerTaskP, \"Should have rejected the promise\");\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"Subscribing to a task\", () => {});\n\n\t\t\tdescribe(\"Completing tasks\", () => {});\n\t\t});\n\n\t\tdescribe(\"Behavior while disconnected\", () => {\n\t\t\tdescribe(\"Volunteering for a task\", () => {\n\t\t\t\tit(\"Immediately rejects attempts to lock task and throws on abandon\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tcontainerRuntime1.connected = false;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t\tawait assert.rejects(volunteerTaskP);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"Subscribing to a task\", () => {\n\t\t\t\tit(\"Can subscribe while disconnected\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tcontainerRuntime1.connected = false;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should be subscribed\",\n\t\t\t\t\t);\n\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should be subscribed\",\n\t\t\t\t\t);\n\n\t\t\t\t\tcontainerRuntime1.connected = true;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Should be queued\");\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Should be assigned\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should be subscribed\",\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\tit(\"Can abandon subscription while disconnected\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tcontainerRuntime1.connected = false;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t\t\ttaskManager1.abandon(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\t\tcontainerRuntime1.connected = true;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should not be subscribed\",\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"Completing tasks\", () => {\n\t\t\t\tit(\"Immediately throws on attempt to complete task\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tcontainerRuntime1.connected = false;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\t\tassert.throws(() => {\n\t\t\t\t\t\ttaskManager1.complete(taskId);\n\t\t\t\t\t}, \"Should throw error\");\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"Behavior transitioning to connected\", () => {\n\t\t\tdescribe(\"Volunteering for a task\", () => {\n\t\t\t\tit(\"Does not re-attempt to enter the queue for un-ack'd ops\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\tconst volunteerTaskP = taskManager1.volunteerForTask(taskId);\n\t\t\t\t\tcontainerRuntime1.connected = false;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tawait assert.rejects(volunteerTaskP, \"Should have rejected the promise\");\n\t\t\t\t\tcontainerRuntime1.connected = true;\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Should not be queued\");\n\t\t\t\t\tassert.ok(!taskManager1.assigned(taskId), \"Should not be assigned\");\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"Subscribing to a task\", () => {\n\t\t\t\tit(\"Does re-attempt to enter the queue when subscribed\", async () => {\n\t\t\t\t\tconst taskId = \"taskId\";\n\t\t\t\t\ttaskManager1.subscribeToTask(taskId);\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\t\tcontainerRuntime1.connected = false;\n\n\t\t\t\t\tassert.ok(!taskManager1.queued(taskId), \"Task manager 1 should not be queued\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager1.assigned(taskId),\n\t\t\t\t\t\t\"Task manager 1 should not be assigned\",\n\t\t\t\t\t);\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should be subscribed\",\n\t\t\t\t\t);\n\n\t\t\t\t\tcontainerRuntime1.connected = true;\n\n\t\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\t!taskManager1.assigned(taskId),\n\t\t\t\t\t\t\"Task manager 1 should not be assigned\",\n\t\t\t\t\t);\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should be subscribed\",\n\t\t\t\t\t);\n\n\t\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\t\tassert.ok(taskManager1.queued(taskId), \"Task manager 1 should be queued\");\n\t\t\t\t\tassert.ok(taskManager1.assigned(taskId), \"Task manager 1 should be assigned\");\n\t\t\t\t\tassert.ok(\n\t\t\t\t\t\ttaskManager1.subscribed(taskId),\n\t\t\t\t\t\t\"Task manager 1 should be subscribed\",\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"Completing tasks\", () => {});\n\t\t});\n\t});\n});\n"]}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
use_current_InterfaceDeclaration_ITaskManager(get_old_InterfaceDeclaration_ITaskManager());
|
|
2
|
-
use_old_InterfaceDeclaration_ITaskManager(get_current_InterfaceDeclaration_ITaskManager());
|
|
3
|
-
use_current_InterfaceDeclaration_ITaskManagerEvents(get_old_InterfaceDeclaration_ITaskManagerEvents());
|
|
4
|
-
use_old_InterfaceDeclaration_ITaskManagerEvents(get_current_InterfaceDeclaration_ITaskManagerEvents());
|
|
5
|
-
use_current_TypeAliasDeclaration_TaskEventListener(get_old_TypeAliasDeclaration_TaskEventListener());
|
|
6
|
-
use_old_TypeAliasDeclaration_TaskEventListener(get_current_TypeAliasDeclaration_TaskEventListener());
|
|
7
|
-
use_current_ClassDeclaration_TaskManager(get_old_ClassDeclaration_TaskManager());
|
|
8
|
-
use_old_ClassDeclaration_TaskManager(
|
|
9
|
-
// @ts-expect-error compatibility expected to be broken
|
|
10
|
-
get_current_ClassDeclaration_TaskManager());
|
|
11
|
-
export {};
|
|
12
|
-
//# sourceMappingURL=validateTaskManagerPrevious.generated.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validateTaskManagerPrevious.generated.js","sourceRoot":"","sources":["../../../src/test/types/validateTaskManagerPrevious.generated.ts"],"names":[],"mappings":"AAgCA,6CAA6C,CACzC,yCAAyC,EAAE,CAAC,CAAC;AAWjD,yCAAyC,CACrC,6CAA6C,EAAE,CAAC,CAAC;AAWrD,mDAAmD,CAC/C,+CAA+C,EAAE,CAAC,CAAC;AAWvD,+CAA+C,CAC3C,mDAAmD,EAAE,CAAC,CAAC;AAW3D,kDAAkD,CAC9C,8CAA8C,EAAE,CAAC,CAAC;AAWtD,8CAA8C,CAC1C,kDAAkD,EAAE,CAAC,CAAC;AAW1D,wCAAwC,CACpC,oCAAoC,EAAE,CAAC,CAAC;AAW5C,oCAAoC;AAChC,uDAAuD;AACvD,wCAAwC,EAAE,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n/*\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.\n * Generated by fluid-type-test-generator in @fluidframework/build-tools.\n */\nimport type * as old from \"@fluidframework/task-manager-previous\";\nimport type * as current from \"../../index.js\";\n\n\n// See 'build-tools/src/type-test-generator/compatibility.ts' for more information.\ntype TypeOnly<T> = T extends number\n\t? number\n\t: T extends string\n\t? string\n\t: T extends boolean | bigint | symbol\n\t? T\n\t: {\n\t\t\t[P in keyof T]: TypeOnly<T[P]>;\n\t };\n\n/*\n* Validate forward compat by using old type in place of current type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"InterfaceDeclaration_ITaskManager\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_InterfaceDeclaration_ITaskManager():\n TypeOnly<old.ITaskManager>;\ndeclare function use_current_InterfaceDeclaration_ITaskManager(\n use: TypeOnly<current.ITaskManager>): void;\nuse_current_InterfaceDeclaration_ITaskManager(\n get_old_InterfaceDeclaration_ITaskManager());\n\n/*\n* Validate back compat by using current type in place of old type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"InterfaceDeclaration_ITaskManager\": {\"backCompat\": false}\n*/\ndeclare function get_current_InterfaceDeclaration_ITaskManager():\n TypeOnly<current.ITaskManager>;\ndeclare function use_old_InterfaceDeclaration_ITaskManager(\n use: TypeOnly<old.ITaskManager>): void;\nuse_old_InterfaceDeclaration_ITaskManager(\n get_current_InterfaceDeclaration_ITaskManager());\n\n/*\n* Validate forward compat by using old type in place of current type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"InterfaceDeclaration_ITaskManagerEvents\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_InterfaceDeclaration_ITaskManagerEvents():\n TypeOnly<old.ITaskManagerEvents>;\ndeclare function use_current_InterfaceDeclaration_ITaskManagerEvents(\n use: TypeOnly<current.ITaskManagerEvents>): void;\nuse_current_InterfaceDeclaration_ITaskManagerEvents(\n get_old_InterfaceDeclaration_ITaskManagerEvents());\n\n/*\n* Validate back compat by using current type in place of old type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"InterfaceDeclaration_ITaskManagerEvents\": {\"backCompat\": false}\n*/\ndeclare function get_current_InterfaceDeclaration_ITaskManagerEvents():\n TypeOnly<current.ITaskManagerEvents>;\ndeclare function use_old_InterfaceDeclaration_ITaskManagerEvents(\n use: TypeOnly<old.ITaskManagerEvents>): void;\nuse_old_InterfaceDeclaration_ITaskManagerEvents(\n get_current_InterfaceDeclaration_ITaskManagerEvents());\n\n/*\n* Validate forward compat by using old type in place of current type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"TypeAliasDeclaration_TaskEventListener\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_TypeAliasDeclaration_TaskEventListener():\n TypeOnly<old.TaskEventListener>;\ndeclare function use_current_TypeAliasDeclaration_TaskEventListener(\n use: TypeOnly<current.TaskEventListener>): void;\nuse_current_TypeAliasDeclaration_TaskEventListener(\n get_old_TypeAliasDeclaration_TaskEventListener());\n\n/*\n* Validate back compat by using current type in place of old type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"TypeAliasDeclaration_TaskEventListener\": {\"backCompat\": false}\n*/\ndeclare function get_current_TypeAliasDeclaration_TaskEventListener():\n TypeOnly<current.TaskEventListener>;\ndeclare function use_old_TypeAliasDeclaration_TaskEventListener(\n use: TypeOnly<old.TaskEventListener>): void;\nuse_old_TypeAliasDeclaration_TaskEventListener(\n get_current_TypeAliasDeclaration_TaskEventListener());\n\n/*\n* Validate forward compat by using old type in place of current type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"ClassDeclaration_TaskManager\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_ClassDeclaration_TaskManager():\n TypeOnly<old.TaskManager>;\ndeclare function use_current_ClassDeclaration_TaskManager(\n use: TypeOnly<current.TaskManager>): void;\nuse_current_ClassDeclaration_TaskManager(\n get_old_ClassDeclaration_TaskManager());\n\n/*\n* Validate back compat by using current type in place of old type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"ClassDeclaration_TaskManager\": {\"backCompat\": false}\n*/\ndeclare function get_current_ClassDeclaration_TaskManager():\n TypeOnly<current.TaskManager>;\ndeclare function use_old_ClassDeclaration_TaskManager(\n use: TypeOnly<old.TaskManager>): void;\nuse_old_ClassDeclaration_TaskManager(\n // @ts-expect-error compatibility expected to be broken\n get_current_ClassDeclaration_TaskManager());\n"]}
|
|
File without changes
|