/* Copyright 2026 Marimo. All rights reserved. */ import type * as Plotly from "plotly.js"; import { describe, expect, it } from "vitest"; import { createParser } from "../parse-from-template"; describe("createParser", () => { it("does not create a new parser when the template is the same", () => { const parser1 = createParser("template"); const parser2 = parser1.update("template"); expect(parser1).toBe(parser2); const parser3 = parser1.update("template1"); expect(parser1).not.toBe(parser3); }); it("should correctly parse data using the extracted key-selector pairs", () => { const hovertemplate = "Origin=%{customdata[1]}
Horsepower=%{x}
Miles_per_Gallon=%{y}
Weight_in_lbs=%{marker.size}
Name=%{customdata[0]}"; const parser = createParser(hovertemplate); const data = { customdata: ["Mustang", "USA"], x: "300", y: "30", "marker.size": "2000", } as unknown as Plotly.PlotDatum; const result = parser.parse(data); expect(result).toEqual({ Origin: "USA", Horsepower: "300", Miles_per_Gallon: "30", Weight_in_lbs: "2000", Name: "Mustang", }); }); it("should handle hover templates with no key-selector pairs", () => { const hovertemplate = "No data available"; const parser = createParser(hovertemplate); const data = {} as unknown as Plotly.PlotDatum; const result = parser.parse(data); expect(result).toEqual({}); }); it("should handle data with missing keys", () => { const hovertemplate = "Origin=%{customdata[1]}
Name=%{customdata[0]}"; const parser = createParser(hovertemplate); const data = { customdata: ["Mustang"], // Missing 'customdata[1]' } as unknown as Plotly.PlotDatum; const result = parser.parse(data); expect(result).toEqual({ Origin: undefined, // 'customdata[1]' is missing, so the value is undefined Name: "Mustang", }); }); it("should handle data with nested keys", () => { const hovertemplate = "Model=%{car.model}
Year=%{car.year}"; const parser = createParser(hovertemplate); const data = { car: { model: "Mustang", year: "1964", }, } as unknown as Plotly.PlotDatum; const result = parser.parse(data); expect(result).toEqual({ Model: "Mustang", Year: "1964", }); }); it("should handle labels with special characters (brackets, parentheses, spaces)", () => { const hovertemplate = "Horsepower [ps]=%{x}
Miles per Gallon=%{y}
Weight (lbs)=%{marker.size}"; const parser = createParser(hovertemplate); const data = { x: "110", y: "20.6", "marker.size": "3000", } as unknown as Plotly.PlotDatum; const result = parser.parse(data); expect(result).toEqual({ "Horsepower [ps]": "110", "Miles per Gallon": "20.6", "Weight (lbs)": "3000", }); }); });