Permalink
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
setup-buildx-action/__tests__/context.test.ts
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
127 lines (106 sloc)
4.22 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import {beforeEach, describe, expect, it, jest} from '@jest/globals'; | |
import * as fs from 'fs'; | |
import * as os from 'os'; | |
import * as path from 'path'; | |
import * as context from '../src/context'; | |
jest.spyOn(context, 'tmpDir').mockImplementation((): string => { | |
const tmpDir = path.join('/tmp/.docker-setup-buildx-jest').split(path.sep).join(path.posix.sep); | |
if (!fs.existsSync(tmpDir)) { | |
fs.mkdirSync(tmpDir, {recursive: true}); | |
} | |
return tmpDir; | |
}); | |
jest.spyOn(context, 'tmpNameSync').mockImplementation((): string => { | |
return path.join('/tmp/.docker-setup-buildx-jest', '.tmpname-jest').split(path.sep).join(path.posix.sep); | |
}); | |
describe('getInputList', () => { | |
it('handles single line correctly', async () => { | |
await setInput('foo', 'bar'); | |
const res = await context.getInputList('foo'); | |
expect(res).toEqual(['bar']); | |
}); | |
it('handles multiple lines correctly', async () => { | |
setInput('foo', 'bar\nbaz'); | |
const res = await context.getInputList('foo'); | |
expect(res).toEqual(['bar', 'baz']); | |
}); | |
it('remove empty lines correctly', async () => { | |
setInput('foo', 'bar\n\nbaz'); | |
const res = await context.getInputList('foo'); | |
expect(res).toEqual(['bar', 'baz']); | |
}); | |
it('handles comma correctly', async () => { | |
setInput('foo', 'bar,baz'); | |
const res = await context.getInputList('foo'); | |
expect(res).toEqual(['bar', 'baz']); | |
}); | |
it('remove empty result correctly', async () => { | |
setInput('foo', 'bar,baz,'); | |
const res = await context.getInputList('foo'); | |
expect(res).toEqual(['bar', 'baz']); | |
}); | |
it('handles different new lines correctly', async () => { | |
setInput('foo', 'bar\r\nbaz'); | |
const res = await context.getInputList('foo'); | |
expect(res).toEqual(['bar', 'baz']); | |
}); | |
it('handles different new lines and comma correctly', async () => { | |
setInput('foo', 'bar\r\nbaz,bat'); | |
const res = await context.getInputList('foo'); | |
expect(res).toEqual(['bar', 'baz', 'bat']); | |
}); | |
it('handles multiple lines and ignoring comma correctly', async () => { | |
setInput('driver-opts', 'image=moby/buildkit:master\nnetwork=host'); | |
const res = await context.getInputList('driver-opts', true); | |
expect(res).toEqual(['image=moby/buildkit:master', 'network=host']); | |
}); | |
it('handles different new lines and ignoring comma correctly', async () => { | |
setInput('driver-opts', 'image=moby/buildkit:master\r\nnetwork=host'); | |
const res = await context.getInputList('driver-opts', true); | |
expect(res).toEqual(['image=moby/buildkit:master', 'network=host']); | |
}); | |
}); | |
describe('asyncForEach', () => { | |
it('executes async tasks sequentially', async () => { | |
const testValues = [1, 2, 3, 4, 5]; | |
const results: number[] = []; | |
await context.asyncForEach(testValues, async value => { | |
results.push(value); | |
}); | |
expect(results).toEqual(testValues); | |
}); | |
}); | |
describe('setOutput', () => { | |
beforeEach(() => { | |
process.stdout.write = jest.fn() as typeof process.stdout.write; | |
}); | |
// eslint-disable-next-line jest/expect-expect | |
it('setOutput produces the correct command', () => { | |
context.setOutput('some output', 'some value'); | |
assertWriteCalls([`::set-output name=some output::some value${os.EOL}`]); | |
}); | |
// eslint-disable-next-line jest/expect-expect | |
it('setOutput handles bools', () => { | |
context.setOutput('some output', false); | |
assertWriteCalls([`::set-output name=some output::false${os.EOL}`]); | |
}); | |
// eslint-disable-next-line jest/expect-expect | |
it('setOutput handles numbers', () => { | |
context.setOutput('some output', 1.01); | |
assertWriteCalls([`::set-output name=some output::1.01${os.EOL}`]); | |
}); | |
}); | |
// See: https://github.com/actions/toolkit/blob/master/packages/core/src/core.ts#L67 | |
function getInputName(name: string): string { | |
return `INPUT_${name.replace(/ /g, '_').toUpperCase()}`; | |
} | |
function setInput(name: string, value: string): void { | |
process.env[getInputName(name)] = value; | |
} | |
// Assert that process.stdout.write calls called only with the given arguments. | |
function assertWriteCalls(calls: string[]): void { | |
expect(process.stdout.write).toHaveBeenCalledTimes(calls.length); | |
for (let i = 0; i < calls.length; i++) { | |
expect(process.stdout.write).toHaveBeenNthCalledWith(i + 1, calls[i]); | |
} | |
} |