prometheus/web/ui/mantine-ui/src/promql/utils.test.ts
Julius Volz 87a22500e1
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
Add PromQL logic code and labels explorer from PromLens, add testing deps
Signed-off-by: Julius Volz <julius.volz@gmail.com>
2024-09-02 13:45:36 +02:00

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);
});
});