import { fromContents } from "../../lib-js/spec-directory"
import { mockCompiler } from "../fixtures/mock-compiler"
import TestCase from "../../lib-js/test-case"
import { SassResult } from "../../lib-js/test-case/util"
describe("TestCase::actual()", () => {
async function getResults(contents: string): Promise<SassResult> {
const dir = await fromContents(contents.trim())
const test = await TestCase.create(dir, "sass-mock", mockCompiler(dir))
return test.actual()
}
it("works for output case", async () => {
const contents = `
<===> input.scss
stdout: OUTPUT
status: 0
<===> output.css
OUTPUT
`
expect(await getResults(contents)).toEqual({
output: "OUTPUT",
isSuccess: true,
})
})
it("works for error case", async () => {
const contents = `
<===> input.scss
stderr: ERROR
status: 1
<===> output.css
OUTPUT
`
expect(await getResults(contents)).toEqual({
error: "ERROR",
isSuccess: false,
})
})
it("works for warning case", async () => {
const contents = `
<===> input.scss
stdout: OUTPUT
stderr: WARNING
status: 0
<===> output.css
OUTPUT
`
expect(await getResults(contents)).toEqual({
output: "OUTPUT",
warning: "WARNING",
isSuccess: true,
})
})
it("errors if multiple inputs defined in the directory", async () => {
const contents = `
<===> input.scss
stdout: OUTPUT
status: 0
<===> input.sass
stdout: OUTPUT
status: 0
<===> output.css
OUTPUT
`
expect(() => getResults(contents)).rejects.toThrow()
})
describe("command args", () => {
it("passes precision argument to the compiler", async () => {
const contents = `
<===> options.yml
:precision: 6
<===> input.scss
stdout: OUTPUT
stderr: WARNING
status: 0
<===> output.css
OUTPUT
`.trim()
const compile = jest.fn(async () => ({
stdout: "",
stderr: "",
status: 0,
}))
const compiler = { compile, shutdown() {} }
const dir = await fromContents(contents.trim())
await TestCase.create(dir, "sass-mock", compiler)
expect(compile).toHaveBeenCalledWith(
expect.anything(),
expect.arrayContaining(["--precision", "6"])
)
})
})
})