mirror of
https://github.com/prometheus/prometheus.git
synced 2025-03-05 20:59:13 -08:00
Some checks failed
CI / Go tests (push) Has been cancelled
CI / More Go tests (push) Has been cancelled
CI / Go tests with previous Go version (push) Has been cancelled
CI / UI tests (push) Has been cancelled
CI / Go tests on Windows (push) Has been cancelled
CI / Mixins tests (push) Has been cancelled
CI / Build Prometheus for common architectures (0) (push) Has been cancelled
CI / Build Prometheus for common architectures (1) (push) Has been cancelled
CI / Build Prometheus for common architectures (2) (push) Has been cancelled
CI / Build Prometheus for all architectures (0) (push) Has been cancelled
CI / Build Prometheus for all architectures (1) (push) Has been cancelled
CI / Build Prometheus for all architectures (10) (push) Has been cancelled
CI / Build Prometheus for all architectures (11) (push) Has been cancelled
CI / Build Prometheus for all architectures (2) (push) Has been cancelled
CI / Build Prometheus for all architectures (3) (push) Has been cancelled
CI / Build Prometheus for all architectures (4) (push) Has been cancelled
CI / Build Prometheus for all architectures (5) (push) Has been cancelled
CI / Build Prometheus for all architectures (6) (push) Has been cancelled
CI / Build Prometheus for all architectures (7) (push) Has been cancelled
CI / Build Prometheus for all architectures (8) (push) Has been cancelled
CI / Build Prometheus for all architectures (9) (push) Has been cancelled
CI / Check generated parser (push) Has been cancelled
CI / golangci-lint (push) Has been cancelled
CI / fuzzing (push) Has been cancelled
CI / codeql (push) Has been cancelled
CI / Report status of build Prometheus for all architectures (push) Has been cancelled
CI / Publish main branch artifacts (push) Has been cancelled
CI / Publish release artefacts (push) Has been cancelled
CI / Publish UI on npm Registry (push) Has been cancelled
Signed-off-by: Julius Volz <julius.volz@gmail.com>
156 lines
3.7 KiB
TypeScript
156 lines
3.7 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
getNonParenNodeType,
|
|
containsPlaceholders,
|
|
nodeValueType,
|
|
} from "./utils";
|
|
import { nodeType, valueType, binaryOperatorType } from "./ast";
|
|
|
|
describe("getNonParenNodeType", () => {
|
|
it("works for non-paren type", () => {
|
|
expect(
|
|
getNonParenNodeType({ type: nodeType.numberLiteral, val: "1" })
|
|
).toBe(nodeType.numberLiteral);
|
|
});
|
|
|
|
it("works for single parentheses wrapper", () => {
|
|
expect(
|
|
getNonParenNodeType({
|
|
type: nodeType.parenExpr,
|
|
expr: {
|
|
type: nodeType.numberLiteral,
|
|
val: "1",
|
|
},
|
|
})
|
|
).toBe(nodeType.numberLiteral);
|
|
});
|
|
|
|
it("works for multiple parentheses wrappers", () => {
|
|
expect(
|
|
getNonParenNodeType({
|
|
type: nodeType.parenExpr,
|
|
expr: {
|
|
type: nodeType.parenExpr,
|
|
expr: {
|
|
type: nodeType.parenExpr,
|
|
expr: {
|
|
type: nodeType.numberLiteral,
|
|
val: "1",
|
|
},
|
|
},
|
|
},
|
|
})
|
|
).toBe(nodeType.numberLiteral);
|
|
});
|
|
});
|
|
|
|
describe("containsPlaceholders", () => {
|
|
it("does not find placeholders in complete expressions", () => {
|
|
expect(
|
|
containsPlaceholders({
|
|
type: nodeType.parenExpr,
|
|
expr: {
|
|
type: nodeType.numberLiteral,
|
|
val: "1",
|
|
},
|
|
})
|
|
).toBe(false);
|
|
});
|
|
|
|
it("finds placeholders at the root", () => {
|
|
expect(
|
|
containsPlaceholders({
|
|
type: nodeType.placeholder,
|
|
children: [],
|
|
})
|
|
).toBe(true);
|
|
});
|
|
|
|
it("finds placeholders in nested expressions with placeholders", () => {
|
|
expect(
|
|
containsPlaceholders({
|
|
type: nodeType.parenExpr,
|
|
expr: {
|
|
type: nodeType.placeholder,
|
|
children: [],
|
|
},
|
|
})
|
|
).toBe(true);
|
|
});
|
|
});
|
|
|
|
describe("nodeValueType", () => {
|
|
it("works for binary expressions with placeholders", () => {
|
|
expect(
|
|
nodeValueType({
|
|
type: nodeType.binaryExpr,
|
|
op: binaryOperatorType.add,
|
|
lhs: { type: nodeType.placeholder, children: [] },
|
|
rhs: { type: nodeType.placeholder, children: [] },
|
|
matching: null,
|
|
bool: false,
|
|
})
|
|
).toBeNull();
|
|
});
|
|
|
|
it("works for scalar-scalar binops", () => {
|
|
expect(
|
|
nodeValueType({
|
|
type: nodeType.binaryExpr,
|
|
op: binaryOperatorType.add,
|
|
lhs: { type: nodeType.numberLiteral, val: "1" },
|
|
rhs: { type: nodeType.numberLiteral, val: "1" },
|
|
matching: null,
|
|
bool: false,
|
|
})
|
|
).toBe(valueType.scalar);
|
|
});
|
|
|
|
it("works for scalar-vector binops", () => {
|
|
expect(
|
|
nodeValueType({
|
|
type: nodeType.binaryExpr,
|
|
op: binaryOperatorType.add,
|
|
lhs: {
|
|
type: nodeType.vectorSelector,
|
|
name: "metric_name",
|
|
matchers: [],
|
|
offset: 0,
|
|
timestamp: null,
|
|
startOrEnd: null,
|
|
},
|
|
rhs: { type: nodeType.numberLiteral, val: "1" },
|
|
matching: null,
|
|
bool: false,
|
|
})
|
|
).toBe(valueType.vector);
|
|
});
|
|
|
|
it("works for vector-vector binops", () => {
|
|
expect(
|
|
nodeValueType({
|
|
type: nodeType.binaryExpr,
|
|
op: binaryOperatorType.add,
|
|
lhs: {
|
|
type: nodeType.vectorSelector,
|
|
name: "metric_name",
|
|
matchers: [],
|
|
offset: 0,
|
|
timestamp: null,
|
|
startOrEnd: null,
|
|
},
|
|
rhs: {
|
|
type: nodeType.vectorSelector,
|
|
name: "metric_name",
|
|
matchers: [],
|
|
offset: 0,
|
|
timestamp: null,
|
|
startOrEnd: null,
|
|
},
|
|
matching: null,
|
|
bool: false,
|
|
})
|
|
).toBe(valueType.vector);
|
|
});
|
|
});
|