Files
languageservices/actions-workflow-parser/src/workflows/yaml-object-reader.test.ts
T
2023-01-09 19:02:19 -05:00

96 lines
2.6 KiB
TypeScript

import {TemplateContext, TemplateValidationErrors} from "../templates/template-context";
import {TemplateToken} from "../templates/tokens";
import {TokenType} from "../templates/tokens/types";
import {nullTrace} from "../test-utils/null-trace";
import {parseWorkflow} from "./workflow-parser";
import {getWorkflowSchema} from "./workflow-schema";
import {YamlObjectReader} from "./yaml-object-reader";
describe("getLiteralToken", () => {
it("non-zero number", () => {
const result = parseAsWorkflow("1");
expect(result).not.toBeUndefined();
expect(result?.templateTokenType).toEqual(TokenType.Number);
expect(result?.toString()).toEqual("1");
});
it("zero", () => {
const result = parseAsWorkflow("0");
expect(result).not.toBeUndefined();
expect(result?.templateTokenType).toEqual(TokenType.Number);
expect(result?.toString()).toEqual("0");
});
it("true", () => {
const result = parseAsWorkflow("true");
expect(result).not.toBeUndefined();
expect(result?.templateTokenType).toEqual(TokenType.Boolean);
expect(result?.toString()).toEqual("true");
});
it("false", () => {
const result = parseAsWorkflow("false");
expect(result).not.toBeUndefined();
expect(result?.templateTokenType).toEqual(TokenType.Boolean);
expect(result?.toString()).toEqual("false");
});
it("string", () => {
const result = parseAsWorkflow("test");
expect(result).not.toBeUndefined();
expect(result?.templateTokenType).toEqual(TokenType.String);
expect(result?.toString()).toEqual("test");
});
it("null", () => {
const result = parseAsWorkflow("null");
expect(result).not.toBeUndefined();
expect(result?.templateTokenType).toEqual(TokenType.Null);
expect(result?.toString()).toEqual("");
});
});
it("YAML errors include range information", () => {
const content = `
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: 'Hello \${{ fromJSON('test') == inputs.name }}'
run: echo Hello, world!`;
const context = new TemplateContext(new TemplateValidationErrors(), getWorkflowSchema(), nullTrace);
const fileId = context.getFileId("test.yaml");
new YamlObjectReader(context, fileId, content);
expect(context.errors.count).toBe(1);
const error = context.errors.getErrors()[0];
expect(error.range).toEqual({
start: [7, 38],
end: [7, 63]
});
});
function parseAsWorkflow(content: string): TemplateToken | undefined {
const result = parseWorkflow(
"test.yaml",
[
{
name: "test.yaml",
content: content
}
],
nullTrace
);
return result.value;
}