Path: blob/main/tests/smoke/run/run-script.test.ts
12921 views
import { basename, join } from "../../../src/deno_ral/path.ts";1import { ensureDirSync } from "../../../src/deno_ral/fs.ts";2import { assert, assertEquals } from "testing/asserts";3import { execProcess } from "../../../src/core/process.ts";4import { quartoDevCmd } from "../../utils.ts";5import { unitTest } from "../../test.ts";6import { EOL } from "fs/eol";7import { lines } from "../../../src/core/text.ts";89const workingDir = Deno.makeTempDirSync();1011ensureDirSync(workingDir);1213const ensureStreams = (name: string, script: string, stdout: string, stderr: string) => {14unitTest(name, async () => {15const result = await execProcess({16cmd: quartoDevCmd(),17args: [18"run",19basename(script),20],21// disable logging here to allow for checking the output22env: {23"QUARTO_LOG_LEVEL": "CRITICAL",24}25},26undefined,27undefined,28undefined,29true30);31assert(result.success);32assertEquals((result.stdout ?? "").replaceAll("\r", ""), stdout);33assertEquals((result.stderr ?? "").replaceAll("\r", ""), stderr);34},35{36teardown: () => {37try {38Deno.removeSync(basename(script));39} catch (_e) {40// ignore41}42return Promise.resolve();43},44cwd: () => {45return workingDir;46}47})48}4950const testRunCmd = (name: string, script: string) => {51unitTest(name, async () => {52const result = await execProcess({53cmd: quartoDevCmd(),54args: [55"run",56basename(script),57]58});59assert(result.success);60},61{62teardown: () => {63try {64Deno.removeSync(basename(script));65} catch (_e) {66// ignore67}68return Promise.resolve();69},70cwd: () => {71return workingDir;72}73});74}7576// Run Lua Script77const luaScript = join(workingDir, "test.lua");78Deno.writeTextFileSync(luaScript, "print('Hello, world!')");79testRunCmd("run-lua-script", luaScript);8081// Run ts script82const tsScript = join(workingDir, "test.ts");83Deno.writeTextFileSync(tsScript, "console.log('Hello, world!')");84testRunCmd("run-ts-script", tsScript);8586// Run Python script87const pyScript = join(workingDir, "test.py");88Deno.writeTextFileSync(pyScript, "print('Hello, world!')");89testRunCmd("run-py-script", pyScript);9091// Run R script92const rScript = join(workingDir, "test.R");93Deno.writeTextFileSync(rScript, "print('Hello, world!')");94testRunCmd("run-r-script", rScript);9596// check stream outputs9798// in R99const rScript2 = join(workingDir, "test2.R");100Deno.writeTextFileSync(rScript2, "cat('write stdout\\n', file = stdout()); cat('write stderr\\n', file = stderr())");101ensureStreams("run-r-script-stdout-stderr", rScript2, "write stdout\n", "write stderr\n");102103// in Python104const pyScript2 = join(workingDir, "test2.py");105Deno.writeTextFileSync(pyScript2, "import sys; print('write stdout'); print('write stderr', file = sys.stderr)");106ensureStreams("run-py-script-stdout-stderr", pyScript2, "write stdout\n", "write stderr\n");107108// in Deno TS109const tsScript2 = join(workingDir, "test2.ts");110Deno.writeTextFileSync(tsScript2, "console.log('write stdout'); console.error('write stderr')");111ensureStreams("run-ts-script-stdout-stderr", tsScript2, "write stdout\n", "write stderr\n");112113// in Lua114const luaScript2 = join(workingDir, "test2.lua");115Deno.writeTextFileSync(luaScript2, "print('write stdout'); io.stderr:write('write stderr\\n')");116ensureStreams("run-lua-script-stdout-stderr", luaScript2, "write stdout\n\n", "write stderr\n"); // don't know why there is an extra newline117118