@dpkit/table
Version:
Data Package implementation in TypeScript.
93 lines • 12.8 kB
JavaScript
import { DataFrame } from "nodejs-polars";
import { describe, expect, it } from "vitest";
import { processTable } from "../../table/index.js";
describe("parseGeopointField", () => {
describe("default format", () => {
it.each([
// Valid geopoints in default format (lon,lat)
["90.50,45.50", [90.5, 45.5]],
["0,0", [0, 0]],
//["-122.40, 37.78", [-122.4, 37.78]],
//["-180.0,-90.0", [-180.0, -90.0]],
//["180.0, 90.0", [180.0, 90.0]],
// With whitespace
//[" 90.50, 45.50 ", [90.5, 45.5]],
// Invalid formats
//["not a geopoint", null],
//["", null],
//["90.50", null],
//["90.50,lat", null],
//["lon,45.50", null],
//["90.50,45.50,0", null],
])("%s -> %s", async (cell, value) => {
const table = DataFrame({ name: [cell] }).lazy();
const schema = {
fields: [{ name: "name", type: "geopoint" }],
};
const ldf = await processTable(table, { schema });
const df = await ldf.collect();
expect(df.toRecords()[0]?.name).toEqual(value);
});
});
describe.skip("array format", () => {
it.each([
// Valid geopoints in array format
["[90.50, 45.50]", [90.5, 45.5]],
["[0, 0]", [0, 0]],
["[-122.40, 37.78]", [-122.4, 37.78]],
["[-180.0, -90.0]", [-180.0, -90.0]],
["[180.0, 90.0]", [180.0, 90.0]],
// With whitespace
[" [90.50, 45.50] ", [90.5, 45.5]],
// Invalid formats
["not a geopoint", null],
["", null],
["[90.50]", null],
["[90.50, 45.50, 0]", null],
["['lon', 'lat']", null],
])("%s -> %s", async (cell, value) => {
const table = DataFrame({ name: [cell] }).lazy();
const schema = {
fields: [
{ name: "name", type: "geopoint", format: "array" },
],
};
const ldf = await processTable(table, { schema });
const df = await ldf.collect();
expect(df.getColumn("name").get(0)).toEqual(value);
});
});
describe.skip("object format", () => {
it.each([
// Valid geopoints in object format
['{"lon": 90.50, "lat": 45.50}', [90.5, 45.5]],
['{"lon": 0, "lat": 0}', [0, 0]],
['{"lon": -122.40, "lat": 37.78}', [-122.4, 37.78]],
['{"lon": -180.0, "lat": -90.0}', [-180.0, -90.0]],
['{"lon": 180.0, "lat": 90.0}', [180.0, 90.0]],
// With whitespace
[' {"lon": 90.50, "lat": 45.50} ', [90.5, 45.5]],
// Invalid formats
["not a geopoint", null],
["", null],
['{"longitude": 90.50, "latitude": 45.50}', null],
['{"lon": 90.50}', null],
['{"lat": 45.50}', null],
])("%s -> %s", async (cell, value) => {
const table = DataFrame({ name: [cell] }).lazy();
const schema = {
fields: [
{
name: "name",
type: "geopoint",
format: "object",
},
],
};
const ldf = await processTable(table, { schema });
const df = await ldf.collect();
expect(df.getColumn("name").get(0)).toEqual(value);
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvcG9pbnQuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2ZpZWxkL3R5cGVzL2dlb3BvaW50LnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBRW5ELFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUU7SUFDbEMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRTtRQUM5QixFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ04sOENBQThDO1lBQzlDLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzdCLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2Ysc0NBQXNDO1lBQ3RDLG9DQUFvQztZQUNwQyxpQ0FBaUM7WUFFakMsa0JBQWtCO1lBQ2xCLG1DQUFtQztZQUVuQyxrQkFBa0I7WUFDbEIsMkJBQTJCO1lBQzNCLGFBQWE7WUFDYixrQkFBa0I7WUFDbEIsc0JBQXNCO1lBQ3RCLHNCQUFzQjtZQUN0QiwwQkFBMEI7U0FDM0IsQ0FBQyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ25DLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtZQUNoRCxNQUFNLE1BQU0sR0FBRztnQkFDYixNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQW1CLEVBQUUsQ0FBQzthQUN0RCxDQUFBO1lB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Q0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFaEQsa0JBQWtCO1lBQ2xCLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDO1lBQ3hCLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQztZQUNWLENBQUMseUNBQXlDLEVBQUUsSUFBSSxDQUFDO1lBQ2pELENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDO1lBQ3hCLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDO1NBQ3pCLENBQUMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNuQyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7WUFDaEQsTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsTUFBTSxFQUFFO29CQUNOO3dCQUNFLElBQUksRUFBRSxNQUFNO3dCQUNaLElBQUksRUFBRSxVQUFtQjt3QkFDekIsTUFBTSxFQUFFLFFBQWlCO3FCQUMxQjtpQkFDRjthQUNGLENBQUE7WUFFRCxNQUFNLEdBQUcsR0FBRyxNQUFNLFlBQVksQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO1lBQ2pELE1BQU0sRUFBRSxHQUFHLE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFBO1lBRTlCLE1BQU0sQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNwRCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhRnJhbWUgfSBmcm9tIFwibm9kZWpzLXBvbGFyc1wiXG5pbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgcHJvY2Vzc1RhYmxlIH0gZnJvbSBcIi4uLy4uL3RhYmxlL2luZGV4LnRzXCJcblxuZGVzY3JpYmUoXCJwYXJzZUdlb3BvaW50RmllbGRcIiwgKCkgPT4ge1xuICBkZXNjcmliZShcImRlZmF1bHQgZm9ybWF0XCIsICgpID0+IHtcbiAgICBpdC5lYWNoKFtcbiAgICAgIC8vIFZhbGlkIGdlb3BvaW50cyBpbiBkZWZhdWx0IGZvcm1hdCAobG9uLGxhdClcbiAgICAgIFtcIjkwLjUwLDQ1LjUwXCIsIFs5MC41LCA0NS41XV0sXG4gICAgICBbXCIwLDBcIiwgWzAsIDBdXSxcbiAgICAgIC8vW1wiLTEyMi40MCwgMzcuNzhcIiwgWy0xMjIuNCwgMzcuNzhdXSxcbiAgICAgIC8vW1wiLTE4MC4wLC05MC4wXCIsIFstMTgwLjAsIC05MC4wXV0sXG4gICAgICAvL1tcIjE4MC4wLCA5MC4wXCIsIFsxODAuMCwgOTAuMF1dLFxuXG4gICAgICAvLyBXaXRoIHdoaXRlc3BhY2VcbiAgICAgIC8vW1wiIDkwLjUwLCA0NS41MCBcIiwgWzkwLjUsIDQ1LjVdXSxcblxuICAgICAgLy8gSW52YWxpZCBmb3JtYXRzXG4gICAgICAvL1tcIm5vdCBhIGdlb3BvaW50XCIsIG51bGxdLFxuICAgICAgLy9bXCJcIiwgbnVsbF0sXG4gICAgICAvL1tcIjkwLjUwXCIsIG51bGxdLFxuICAgICAgLy9bXCI5MC41MCxsYXRcIiwgbnVsbF0sXG4gICAgICAvL1tcImxvbiw0NS41MFwiLCBudWxsXSxcbiAgICAgIC8vW1wiOTAuNTAsNDUuNTAsMFwiLCBudWxsXSxcbiAgICBdKShcIiVzIC0+ICVzXCIsIGFzeW5jIChjZWxsLCB2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgdGFibGUgPSBEYXRhRnJhbWUoeyBuYW1lOiBbY2VsbF0gfSkubGF6eSgpXG4gICAgICBjb25zdCBzY2hlbWEgPSB7XG4gICAgICAgIGZpZWxkczogW3sgbmFtZTogXCJuYW1lXCIsIHR5cGU6IFwiZ2VvcG9pbnRcIiBhcyBjb25zdCB9XSxcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGRmID0gYXdhaXQgcHJvY2Vzc1RhYmxlKHRhYmxlLCB7IHNjaGVtYSB9KVxuICAgICAgY29uc3QgZGYgPSBhd2FpdCBsZGYuY29sbGVjdCgpXG5cbiAgICAgIGV4cGVjdChkZi50b1JlY29yZHMoKVswXT8ubmFtZSkudG9FcXVhbCh2YWx1ZSlcbiAgICB9KVxuICB9KVxuXG4gIGRlc2NyaWJlLnNraXAoXCJhcnJheSBmb3JtYXRcIiwgKCkgPT4ge1xuICAgIGl0LmVhY2goW1xuICAgICAgLy8gVmFsaWQgZ2VvcG9pbnRzIGluIGFycmF5IGZvcm1hdFxuICAgICAgW1wiWzkwLjUwLCA0NS41MF1cIiwgWzkwLjUsIDQ1LjVdXSxcbiAgICAgIFtcIlswLCAwXVwiLCBbMCwgMF1dLFxuICAgICAgW1wiWy0xMjIuNDAsIDM3Ljc4XVwiLCBbLTEyMi40LCAzNy43OF1dLFxuICAgICAgW1wiWy0xODAuMCwgLTkwLjBdXCIsIFstMTgwLjAsIC05MC4wXV0sXG4gICAgICBbXCJbMTgwLjAsIDkwLjBdXCIsIFsxODAuMCwgOTAuMF1dLFxuXG4gICAgICAvLyBXaXRoIHdoaXRlc3BhY2VcbiAgICAgIFtcIiBbOTAuNTAsIDQ1LjUwXSBcIiwgWzkwLjUsIDQ1LjVdXSxcblxuICAgICAgLy8gSW52YWxpZCBmb3JtYXRzXG4gICAgICBbXCJub3QgYSBnZW9wb2ludFwiLCBudWxsXSxcbiAgICAgIFtcIlwiLCBudWxsXSxcbiAgICAgIFtcIls5MC41MF1cIiwgbnVsbF0sXG4gICAgICBbXCJbOTAuNTAsIDQ1LjUwLCAwXVwiLCBudWxsXSxcbiAgICAgIFtcIlsnbG9uJywgJ2xhdCddXCIsIG51bGxdLFxuICAgIF0pKFwiJXMgLT4gJXNcIiwgYXN5bmMgKGNlbGwsIHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCB0YWJsZSA9IERhdGFGcmFtZSh7IG5hbWU6IFtjZWxsXSB9KS5sYXp5KClcbiAgICAgIGNvbnN0IHNjaGVtYSA9IHtcbiAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgeyBuYW1lOiBcIm5hbWVcIiwgdHlwZTogXCJnZW9wb2ludFwiIGFzIGNvbnN0LCBmb3JtYXQ6IFwiYXJyYXlcIiBhcyBjb25zdCB9LFxuICAgICAgICBdLFxuICAgICAgfVxuXG4gICAgICBjb25zdCBsZGYgPSBhd2FpdCBwcm9jZXNzVGFibGUodGFibGUsIHsgc2NoZW1hIH0pXG4gICAgICBjb25zdCBkZiA9IGF3YWl0IGxkZi5jb2xsZWN0KClcblxuICAgICAgZXhwZWN0KGRmLmdldENvbHVtbihcIm5hbWVcIikuZ2V0KDApKS50b0VxdWFsKHZhbHVlKVxuICAgIH0pXG4gIH0pXG5cbiAgZGVzY3JpYmUuc2tpcChcIm9iamVjdCBmb3JtYXRcIiwgKCkgPT4ge1xuICAgIGl0LmVhY2goW1xuICAgICAgLy8gVmFsaWQgZ2VvcG9pbnRzIGluIG9iamVjdCBmb3JtYXRcbiAgICAgIFsne1wibG9uXCI6IDkwLjUwLCBcImxhdFwiOiA0NS41MH0nLCBbOTAuNSwgNDUuNV1dLFxuICAgICAgWyd7XCJsb25cIjogMCwgXCJsYXRcIjogMH0nLCBbMCwgMF1dLFxuICAgICAgWyd7XCJsb25cIjogLTEyMi40MCwgXCJsYXRcIjogMzcuNzh9JywgWy0xMjIuNCwgMzcuNzhdXSxcbiAgICAgIFsne1wibG9uXCI6IC0xODAuMCwgXCJsYXRcIjogLTkwLjB9JywgWy0xODAuMCwgLTkwLjBdXSxcbiAgICAgIFsne1wibG9uXCI6IDE4MC4wLCBcImxhdFwiOiA5MC4wfScsIFsxODAuMCwgOTAuMF1dLFxuXG4gICAgICAvLyBXaXRoIHdoaXRlc3BhY2VcbiAgICAgIFsnIHtcImxvblwiOiA5MC41MCwgXCJsYXRcIjogNDUuNTB9ICcsIFs5MC41LCA0NS41XV0sXG5cbiAgICAgIC8vIEludmFsaWQgZm9ybWF0c1xuICAgICAgW1wibm90IGEgZ2VvcG9pbnRcIiwgbnVsbF0sXG4gICAgICBbXCJcIiwgbnVsbF0sXG4gICAgICBbJ3tcImxvbmdpdHVkZVwiOiA5MC41MCwgXCJsYXRpdHVkZVwiOiA0NS41MH0nLCBudWxsXSxcbiAgICAgIFsne1wibG9uXCI6IDkwLjUwfScsIG51bGxdLFxuICAgICAgWyd7XCJsYXRcIjogNDUuNTB9JywgbnVsbF0sXG4gICAgXSkoXCIlcyAtPiAlc1wiLCBhc3luYyAoY2VsbCwgdmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IHRhYmxlID0gRGF0YUZyYW1lKHsgbmFtZTogW2NlbGxdIH0pLmxhenkoKVxuICAgICAgY29uc3Qgc2NoZW1hID0ge1xuICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICAgIHR5cGU6IFwiZ2VvcG9pbnRcIiBhcyBjb25zdCxcbiAgICAgICAgICAgIGZvcm1hdDogXCJvYmplY3RcIiBhcyBjb25zdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfVxuXG4gICAgICBjb25zdCBsZGYgPSBhd2FpdCBwcm9jZXNzVGFibGUodGFibGUsIHsgc2NoZW1hIH0pXG4gICAgICBjb25zdCBkZiA9IGF3YWl0IGxkZi5jb2xsZWN0KClcblxuICAgICAgZXhwZWN0KGRmLmdldENvbHVtbihcIm5hbWVcIikuZ2V0KDApKS50b0VxdWFsKHZhbHVlKVxuICAgIH0pXG4gIH0pXG59KVxuIl19