defmodule HeroiconsTest do use ExUnit.Case, async: true import Phoenix.LiveViewTest setup do Mix.Task.run("heroicons.build") {:ok, assigns: %{__changed__: nil}} end test "outline default" do assert render_component(&Heroicons.cake/1, %{}) == ~s|| class = "w-2" assert render_component(&Heroicons.cake/1, %{class: class}) == ~s|| assert render_component(&Heroicons.cake/1, %{"stroke-width": "2"}) == ~s|| end test "solid" do assert render_component(&Heroicons.cake/1, %{solid: true}) == ~s|| class = "w-2" assert render_component(&Heroicons.cake/1, %{solid: true, class: class}) == ~s|| assert render_component(&Heroicons.cake/1, %{solid: true, "stroke-width": "2"}) == ~s|| end test "mini" do assert render_component(&Heroicons.cake/1, %{mini: true}) == ~s|| class = "w-2" assert render_component(&Heroicons.cake/1, %{mini: true, class: class}) == ~s|| assert render_component(&Heroicons.cake/1, %{mini: true, "stroke-width": "2"}) == ~s|| end test "outline" do assert render_component(&Heroicons.cake/1, %{outline: true}) == ~s|| class = "w-2" assert render_component(&Heroicons.cake/1, %{outline: true, class: class}) == ~s|| end test "raises on mix styles" do assert_raise ArgumentError, "expected either mini or solid, but got both.", fn -> render_component(&Heroicons.cake/1, %{mini: true, solid: true}) end end test "generated docs" do {:docs_v1, _annotation, _beam_language, _format, _module_doc, _metadata, docs} = Code.fetch_docs(Heroicons) doc = Enum.find_value(docs, fn {{:function, :academic_cap, 1}, _annotation, _signature, doc, _metadata} -> doc _ -> nil end) assert doc["en"] == """ Renders the `academic_cap` icon. By default, the outlined (24x24) component is used, but the `solid` or `mini` attributes can be provided for alternative styles. You may also pass arbitrary HTML attributes to be applied to the svg tag. ## Examples ```heex ``` ## Attributes * `rest` (`:global`) - the arbitrary HTML attributes for the svg container. Supports all globals plus: `["fill", "stroke", "stroke-width"]`. * `outline` (`:boolean`) - Defaults to `true`. * `solid` (`:boolean`) - Defaults to `false`. * `mini` (`:boolean`) - Defaults to `false`. """ end end