/* * Portions of this file are based on code from react-spectrum. * Apache License Version 2.0, Copyright 2020 Adobe. * * Credits to the React Spectrum team: * https://github.com/adobe/react-spectrum/blob/main/packages/%40react-aria/meter/src/useMeter.ts * https://github.com/adobe/react-spectrum/blob/main/packages/%40react-spectrum/meter/test/Meter.test.js */ import { render } from "@solidjs/testing-library"; import * as Meter from "."; describe("Meter", () => { it("handles defaults", () => { const { getByRole, getByTestId } = render(() => ( Meter )); const meter = getByRole("meter"); expect(meter).toHaveAttribute("aria-valuemin", "0"); expect(meter).toHaveAttribute("aria-valuemax", "100"); expect(meter).toHaveAttribute("aria-valuenow", "0"); expect(meter).toHaveAttribute("aria-valuetext", "0%"); const valueLabel = getByTestId("value-label"); expect(valueLabel).toHaveTextContent("0%"); const labelId = meter.getAttribute("aria-labelledby"); expect(labelId).toBeDefined(); const label = document.getElementById(labelId!); expect(label).toHaveTextContent("Meter"); }); it("supports custom value label", () => { const { getByRole, getByTestId } = render(() => ( `${value} of ${max} completed`} > Meter )); const meter = getByRole("meter"); expect(meter).toHaveAttribute("aria-valuetext", "3 of 10 completed"); const valueLabel = getByTestId("value-label"); expect(valueLabel).toHaveTextContent("3 of 10 completed"); }); it("should update all fields by value", () => { const { getByRole } = render(() => ( Meter )); const meter = getByRole("meter"); expect(meter).toHaveAttribute("aria-valuemin", "0"); expect(meter).toHaveAttribute("aria-valuemax", "100"); expect(meter).toHaveAttribute("aria-valuenow", "30"); expect(meter).toHaveAttribute("aria-valuetext", "30%"); }); it("should clamps values to 'minValue'", () => { const { getByRole } = render(() => ( Meter )); const meter = getByRole("meter"); expect(meter).toHaveAttribute("aria-valuenow", "0"); expect(meter).toHaveAttribute("aria-valuetext", "0%"); }); it("should clamps values to 'maxValue'", () => { const { getByRole } = render(() => ( Meter )); const meter = getByRole("meter"); expect(meter).toHaveAttribute("aria-valuenow", "100"); expect(meter).toHaveAttribute("aria-valuetext", "100%"); }); it("supports negative values", () => { const { getByRole } = render(() => ( Meter )); const meter = getByRole("meter"); expect(meter).toHaveAttribute("aria-valuenow", "0"); expect(meter).toHaveAttribute("aria-valuetext", "50%"); }); });