import { unitTest } from "../test.ts";
import { assert } from "testing/asserts";
import { isWindows } from "../../src/deno_ral/platform.ts";
import { join } from "../../src/deno_ral/path.ts";
import { dartCommand, dartSassInstallDir } from "../../src/core/dart-sass.ts";
unitTest(
"dartCommand - handles spaced paths on Windows (issue #13997)",
async () => {
const tempBase = Deno.makeTempDirSync({ prefix: "quarto_test_" });
const spacedSassDir = join(tempBase, "Program Files", "dart-sass");
const spacedProjectDir = join(tempBase, "My Project");
const sassInstallDir = dartSassInstallDir();
try {
Deno.mkdirSync(join(tempBase, "Program Files"), { recursive: true });
Deno.mkdirSync(spacedProjectDir, { recursive: true });
const junctionResult = await new Deno.Command("cmd", {
args: ["/c", "mklink", "/J", spacedSassDir, sassInstallDir],
}).output();
if (!junctionResult.success) {
const stderr = new TextDecoder().decode(junctionResult.stderr);
throw new Error(`Failed to create junction: ${stderr}`);
}
const inputScss = join(spacedProjectDir, "test style.scss");
const outputCss = join(spacedProjectDir, "test style.css");
Deno.writeTextFileSync(inputScss, "body { color: red; }");
const spacedSassPath = join(spacedSassDir, "sass.bat");
const result = await dartCommand([inputScss, outputCss], {
sassPath: spacedSassPath,
});
assert(
result === undefined || result === "",
"Sass compile should succeed (no stdout for file-to-file compilation)",
);
assert(
Deno.statSync(outputCss).isFile,
"Output CSS file should be created",
);
} finally {
try {
await new Deno.Command("cmd", {
args: ["/c", "rmdir", spacedSassDir],
}).output();
await Deno.remove(tempBase, { recursive: true });
} catch (e) {
console.debug("Test cleanup failed:", e);
}
}
},
{ ignore: !isWindows },
);