72 lines
4.1 KiB
JavaScript
72 lines
4.1 KiB
JavaScript
// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
|
// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
|
|
// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
|
|
// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
|
|
// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
|
|
// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
|
|
// ┃ Copyright (c) 2017, the Perspective Authors. ┃
|
|
// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃
|
|
// ┃ This file is part of the Perspective library, distributed under the terms ┃
|
|
// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
|
|
// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
|
|
|
import { test, expect } from "@perspective-dev/test";
|
|
import perspective from "../perspective_client";
|
|
|
|
import * as common from "./common.js";
|
|
|
|
/**
|
|
* Tests the correctness of each datetime computation function in various
|
|
* environments and parameters - different types, nulls, undefined, etc.
|
|
*/
|
|
((perspective) => {
|
|
test.describe("bucket() function", function () {
|
|
test.describe("parses arguments separated by arbitrary whitespace", function () {
|
|
for (const [title, expression] of [
|
|
["space before", `bucket( "a",'Y')`],
|
|
["space after", `bucket("a",'Y' )`],
|
|
["space between", `bucket("a", 'Y')`],
|
|
["two spaces before", `bucket( "a",'Y')`],
|
|
["two spaces after", `bucket("a",'Y' )`],
|
|
["two spaces between", `bucket("a", 'Y')`],
|
|
["space before between and after", `bucket( "a", 'Y' )`],
|
|
[
|
|
"two spaces before between and after",
|
|
`bucket( "a", 'Y' )`,
|
|
],
|
|
]) {
|
|
test(title, async function () {
|
|
const table = await perspective.table({
|
|
a: "datetime",
|
|
});
|
|
|
|
const view = await table.view({
|
|
expressions: [expression].reduce(
|
|
(x, y) => Object.assign(x, { [y]: y }),
|
|
{},
|
|
),
|
|
});
|
|
|
|
await table.update({
|
|
a: [
|
|
new Date(2020, 0, 12),
|
|
new Date(2020, 0, 15),
|
|
new Date(2021, 11, 17),
|
|
new Date(2019, 2, 18),
|
|
new Date(2019, 2, 29),
|
|
],
|
|
});
|
|
|
|
let result = await view.to_columns();
|
|
expect(
|
|
result[expression].map((x) => (x ? new Date(x) : null)),
|
|
).toEqual(result.a.map((x) => common.year_bucket(x)));
|
|
|
|
view.delete();
|
|
table.delete();
|
|
});
|
|
}
|
|
});
|
|
});
|
|
})(perspective);
|