Skip to content

Commit

Permalink
Improve string split
Browse files Browse the repository at this point in the history
  • Loading branch information
Dave Hadka committed Jun 2, 2020
1 parent e561127 commit d60d2be
Show file tree
Hide file tree
Showing 8 changed files with 95 additions and 27 deletions.
37 changes: 37 additions & 0 deletions __tests__/actionUtils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,16 @@ import * as core from "@actions/core";

import { Events, Outputs, RefKey, State } from "../src/constants";
import * as actionUtils from "../src/utils/actionUtils";
import * as testUtils from "../src/utils/testUtils";

jest.mock("@actions/core");

beforeAll(() => {
jest.spyOn(core, "getInput").mockImplementation((name, options) => {
return jest.requireActual("@actions/core").getInput(name, options);
});
});

afterEach(() => {
delete process.env[Events.Key];
delete process.env[RefKey];
Expand Down Expand Up @@ -157,3 +164,33 @@ test("isValidEvent returns true for event that has a ref", () => {

expect(isValidEvent).toBe(true);
});

test("getInputAsArray returns empty array if not required and missing", () => {
expect(actionUtils.getInputAsArray("foo")).toEqual([]);
});

test("getInputAsArray throws error if required and missing", () => {
expect(() =>
actionUtils.getInputAsArray("foo", { required: true })
).toThrowError();
});

test("getInputAsArray handles single line correctly", () => {
testUtils.setInput("foo", "bar");
expect(actionUtils.getInputAsArray("foo")).toEqual(["bar"]);
});

test("getInputAsArray handles multiple lines correctly", () => {
testUtils.setInput("foo", "bar\nbaz");
expect(actionUtils.getInputAsArray("foo")).toEqual(["bar", "baz"]);
});

test("getInputAsArray handles different new lines correctly", () => {
testUtils.setInput("foo", "bar\r\nbaz");
expect(actionUtils.getInputAsArray("foo")).toEqual(["bar", "baz"]);
});

test("getInputAsArray handles empty lines correctly", () => {
testUtils.setInput("foo", "\n\nbar\n\nbaz\n\n");
expect(actionUtils.getInputAsArray("foo")).toEqual(["bar", "baz"]);
});
7 changes: 7 additions & 0 deletions __tests__/restore.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,13 @@ beforeAll(() => {
const actualUtils = jest.requireActual("../src/utils/actionUtils");
return actualUtils.isValidEvent();
});

jest.spyOn(actionUtils, "getInputAsArray").mockImplementation(
(name, options) => {
const actualUtils = jest.requireActual("../src/utils/actionUtils");
return actualUtils.getInputAsArray(name, options);
}
);
});

beforeEach(() => {
Expand Down
8 changes: 8 additions & 0 deletions __tests__/save.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,14 @@ beforeAll(() => {
return jest.requireActual("../src/utils/actionUtils").getCacheState();
});

jest.spyOn(actionUtils, "getInputAsArray").mockImplementation(
(name, options) => {
return jest
.requireActual("../src/utils/actionUtils")
.getInputAsArray(name, options);
}
);

jest.spyOn(actionUtils, "isExactKeyMatch").mockImplementation(
(key, cacheResult) => {
return jest
Expand Down
22 changes: 13 additions & 9 deletions dist/restore/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5306,7 +5306,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.isValidEvent = exports.logWarning = exports.getCacheState = exports.setOutputAndState = exports.setCacheHitOutput = exports.setCacheState = exports.isExactKeyMatch = void 0;
exports.getInputAsArray = exports.isValidEvent = exports.logWarning = exports.getCacheState = exports.setOutputAndState = exports.setCacheHitOutput = exports.setCacheState = exports.isExactKeyMatch = void 0;
const core = __importStar(__webpack_require__(470));
const constants_1 = __webpack_require__(694);
function isExactKeyMatch(key, cacheKey) {
Expand Down Expand Up @@ -5350,6 +5350,14 @@ function isValidEvent() {
return constants_1.RefKey in process.env && Boolean(process.env[constants_1.RefKey]);
}
exports.isValidEvent = isValidEvent;
function getInputAsArray(name, options) {
return core
.getInput(name, options)
.split("\n")
.map(s => s.trim())
.filter(x => x !== "");
}
exports.getInputAsArray = getInputAsArray;


/***/ }),
Expand Down Expand Up @@ -6835,14 +6843,10 @@ function run() {
}
const primaryKey = core.getInput(constants_1.Inputs.Key, { required: true });
core.saveState(constants_1.State.CachePrimaryKey, primaryKey);
const restoreKeys = core
.getInput(constants_1.Inputs.RestoreKeys)
.split("\n")
.filter(x => x !== "");
const cachePaths = core
.getInput(constants_1.Inputs.Path, { required: true })
.split("\n")
.filter(x => x !== "");
const restoreKeys = utils.getInputAsArray(constants_1.Inputs.RestoreKeys);
const cachePaths = utils.getInputAsArray(constants_1.Inputs.Path, {
required: true
});
try {
const cacheKey = yield cache.restoreCache(cachePaths, primaryKey, restoreKeys);
if (!cacheKey) {
Expand Down
17 changes: 12 additions & 5 deletions dist/save/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5306,7 +5306,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.isValidEvent = exports.logWarning = exports.getCacheState = exports.setOutputAndState = exports.setCacheHitOutput = exports.setCacheState = exports.isExactKeyMatch = void 0;
exports.getInputAsArray = exports.isValidEvent = exports.logWarning = exports.getCacheState = exports.setOutputAndState = exports.setCacheHitOutput = exports.setCacheState = exports.isExactKeyMatch = void 0;
const core = __importStar(__webpack_require__(470));
const constants_1 = __webpack_require__(694);
function isExactKeyMatch(key, cacheKey) {
Expand Down Expand Up @@ -5350,6 +5350,14 @@ function isValidEvent() {
return constants_1.RefKey in process.env && Boolean(process.env[constants_1.RefKey]);
}
exports.isValidEvent = isValidEvent;
function getInputAsArray(name, options) {
return core
.getInput(name, options)
.split("\n")
.map(s => s.trim())
.filter(x => x !== "");
}
exports.getInputAsArray = getInputAsArray;


/***/ }),
Expand Down Expand Up @@ -6600,10 +6608,9 @@ function run() {
core.info(`Cache hit occurred on the primary key ${primaryKey}, not saving cache.`);
return;
}
const cachePaths = core
.getInput(constants_1.Inputs.Path, { required: true })
.split("\n")
.filter(x => x !== "");
const cachePaths = utils.getInputAsArray(constants_1.Inputs.Path, {
required: true
});
try {
yield cache.saveCache(cachePaths, primaryKey);
}
Expand Down
13 changes: 4 additions & 9 deletions src/restore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,10 @@ async function run(): Promise<void> {
const primaryKey = core.getInput(Inputs.Key, { required: true });
core.saveState(State.CachePrimaryKey, primaryKey);

const restoreKeys = core
.getInput(Inputs.RestoreKeys)
.split("\n")
.filter(x => x !== "");

const cachePaths = core
.getInput(Inputs.Path, { required: true })
.split("\n")
.filter(x => x !== "");
const restoreKeys = utils.getInputAsArray(Inputs.RestoreKeys);
const cachePaths = utils.getInputAsArray(Inputs.Path, {
required: true
});

try {
const cacheKey = await cache.restoreCache(
Expand Down
7 changes: 3 additions & 4 deletions src/save.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,9 @@ async function run(): Promise<void> {
return;
}

const cachePaths = core
.getInput(Inputs.Path, { required: true })
.split("\n")
.filter(x => x !== "");
const cachePaths = utils.getInputAsArray(Inputs.Path, {
required: true
});

try {
await cache.saveCache(cachePaths, primaryKey);
Expand Down
11 changes: 11 additions & 0 deletions src/utils/actionUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,14 @@ export function logWarning(message: string): void {
export function isValidEvent(): boolean {
return RefKey in process.env && Boolean(process.env[RefKey]);
}

export function getInputAsArray(
name: string,
options?: core.InputOptions
): string[] {
return core
.getInput(name, options)
.split("\n")
.map(s => s.trim())
.filter(x => x !== "");
}

0 comments on commit d60d2be

Please sign in to comment.