function run(done, expectedResult, expectedLogs) {
				let calls = 0;
				const paths = [];
				const logs = [];
				const yield_ = ({ path }) => paths.push(path);
				const fileDependencies = new Set();
				const contextDependencies = new Set();
				const missingDependencies = new Set();
				/** @type {ResolveContext} */
				const context = {
					yield: yield_,
					fileDependencies,
					contextDependencies,
					missingDependencies,
					log: (l) => logs.push(l),
				};

				resolver.resolve({}, fixtures, "index/a", context, (err, result) => {
					calls++;
					expect(calls).toBe(1);
					expect(err).toBeNull();
					expect(result).toBeUndefined();
					expect(paths).toEqual(makeFixturePaths(expectedResult));
					expect(contextifyDependencies(fileDependencies)).toEqual([
						"",
						"/a",
						"/a/foo",
						"/a/foo/a",
						"/c/foo/package.json",
					]);
					expect(contextifyDependencies(missingDependencies)).toEqual([
						"/a/foo/a",
						"/a/foo/a.js",
						"/a/foo/package.json",
						"/a/package.json",
						"/c/foo/a",
						"/c/foo/a.js",
						"/package.json",
					]);
					expect([...contextDependencies].sort()).toEqual([]);
					expect(beatifyLogs(logs)).toEqual(expectedLogs);

					done();
				});
			}
@param {(err?: null) => void} done done
@param {(string | false)[]} expectedResult expected result
@param {string[]} expectedLogs expected logs