import { expect, test } from "vitest"; import { $, css, renderTemplate, ws } from "@webstudio-is/template"; import { generateFragmentFromHtml } from "./html"; test("generate instances from html", () => { expect( generateFragmentFromHtml(`

It works!

Webstudio is great.

`) ).toEqual( renderTemplate( It works! Webstudio is great. one two ) ); }); test("generate multiple root instances from html", () => { expect( generateFragmentFromHtml(`

One

Two

`) ).toEqual( renderTemplate( <> One Two ) ); }); test("handle broken html", () => { expect( generateFragmentFromHtml(`

One

`) ).toEqual( renderTemplate( <> One ) ); }); test("handle non-html", () => { expect(generateFragmentFromHtml("")).toEqual(renderTemplate(<>)); expect(generateFragmentFromHtml("It works!")).toEqual(renderTemplate(<>)); }); test("ignore custom elements", () => { expect( generateFragmentFromHtml(`
`) ).toEqual(renderTemplate()); }); test("ignore not allowed tags", () => { expect( generateFragmentFromHtml(`
test
`) ).toEqual(renderTemplate()); }); test("generate props from html attributes", () => { expect( generateFragmentFromHtml(`
`) ).toEqual( renderTemplate( My Button ) ); }); test("generate props from number and boolean html attributes", () => { expect( generateFragmentFromHtml(` `) ).toEqual( renderTemplate( My Button ) ); }); test("generate props from number and boolean aria attributes", () => { expect( generateFragmentFromHtml(` `) ).toEqual( renderTemplate( My Button ) ); }); test("wrap text with span when spotted outside of rich text", () => { expect( generateFragmentFromHtml(`
div
article
`) ).toEqual( renderTemplate( div article ) ); expect( generateFragmentFromHtml(`
div
`) ).toEqual( renderTemplate( div ) ); }); test("do not wrap text with span when spotted near link", () => { expect( generateFragmentFromHtml(`
divlink
`) ).toEqual( renderTemplate( div link ) ); }); test("collapse any spacing characters inside text", () => { expect( generateFragmentFromHtml(`
line another line
`) ).toEqual( renderTemplate({"line another line"}) ); }); test("collapse any spacing characters inside rich text", () => { expect( generateFragmentFromHtml(`
line another line text
`) ).toEqual( renderTemplate( line{" "} another line text ) ); }); test("generate style attribute as local styles", () => { expect( generateFragmentFromHtml(`
`) ).toEqual( renderTemplate( ) ); }); test("script as html embed", () => { expect(generateFragmentFromHtml(``)).toEqual( renderTemplate( <$.HtmlEmbed ws:label="Script" clientOnly={true} code={``} /> ) ); }); test("style as html embed", () => { expect(generateFragmentFromHtml(``)).toEqual( renderTemplate(<$.HtmlEmbed code={``} ws:label="Style" />) ); }); test("generate textarea element", () => { expect( generateFragmentFromHtml(`
`) ).toEqual( renderTemplate( ) ); }); test("generate select element", () => { expect( generateFragmentFromHtml(`
`) ).toEqual( renderTemplate( One Two One Two ) ); }); test("generate Image component instead of img element", () => { expect( generateFragmentFromHtml(`
`) ).toEqual( renderTemplate( <$.Image src="./my-url" /> ) ); }); test("strip unsupported attribute names", () => { expect( generateFragmentFromHtml(` `) ).toEqual( renderTemplate( <> Expand Toggle ) ); });