"use strict";

const path = require("path");
const ProfilingPlugin = require("../lib/debug/ProfilingPlugin");

describe("Profiling Plugin", () => {
	it("should persist the passed output path", () => {
		const outputPath = path.join(__dirname, "invest_in_doge_coin");
		const plugin = new ProfilingPlugin({
			outputPath
		});
		expect(plugin.options.outputPath).toBe(outputPath);
	});

	it("should handle no options", () => {
		expect(() => {
			// eslint-disable-next-line no-new
			new ProfilingPlugin();
		}).not.toThrow();
	});

	it("should handle when unable to require the inspector", () => {
		const profiler = new ProfilingPlugin.Profiler();
		return profiler.startProfiling();
	});

	it("should handle when unable to start a profiling session", () => {
		const profiler = new ProfilingPlugin.Profiler({
			Session() {
				throw new Error("Sean Larkin was here.");
			}
		});

		return profiler.startProfiling();
	});

	it("handles sending a profiling message when no session", () => {
		const profiler = new ProfilingPlugin.Profiler();
		return profiler.sendCommand("randy", "is awesome");
	});

	it("handles destroying when no session", () => {
		const profiler = new ProfilingPlugin.Profiler();
		return profiler.destroy();
	});
});
