1package mdalert_test23import (4 "testing"56 "gno.land/p/nt/mdalert/v0"7)89func TestAlertString(t *testing.T) {10 tests := []struct {11 name string12 expected string13 alert mdalert.Alert14 }{15 {16 name: "alert",17 expected: "> [!INFO] Title\n> Message\n",18 alert: mdalert.New(mdalert.TypeInfo, "Title", "Message", false),19 },20 {21 name: "alert with empty title",22 expected: "> [!INFO]\n> Message\n",23 alert: mdalert.New(mdalert.TypeInfo, "", "Message", false),24 },25 {26 name: "alert multiline",27 expected: "> [!INFO]\n> Line1\n> Line2\n",28 alert: mdalert.New(mdalert.TypeInfo, "", "Line1\nLine2", false),29 },30 {31 name: "folded alert",32 expected: "> [!INFO]- Title\n> Message\n",33 alert: mdalert.New(mdalert.TypeInfo, "Title", "Message", true),34 },35 {36 name: "empty alert",37 },38 }3940 for _, tt := range tests {41 t.Run(tt.name, func(t *testing.T) {42 got := tt.alert.String()43 if got != tt.expected {44 t.Errorf("Got: %q\nWant: %q", got, tt.expected)45 }46 })47 }48}4950func TestHelpers(t *testing.T) {51 tests := []struct {52 name string53 expected string54 fn func() string55 }{56 // CAUTION57 {"caution", "> [!CAUTION] Title\n> Message\n", func() string {58 return mdalert.Caution("Title", "Message")59 }},60 {"caution with empty title", "> [!CAUTION]\n> Message\n", func() string {61 return mdalert.Caution("", "Message")62 }},63 {"caution multiline", "> [!CAUTION] Title\n> Line1\n> Line2\n", func() string {64 return mdalert.Caution("Title", "Line1\nLine2")65 }},66 {"caution formatted", "> [!CAUTION] Title\n> Message\n", func() string {67 return mdalert.Cautionf("Title", "%s", "Message")68 }},69 {"caution formatted with empty title", "> [!CAUTION]\n> Message\n", func() string {70 return mdalert.Cautionf("", "%s", "Message")71 }},72 {"caution formatted multiline", "> [!CAUTION] Title\n> Line1\n> Line2\n", func() string {73 return mdalert.Cautionf("Title", "%s\n%s", "Line1", "Line2")74 }},7576 // INFO77 {"info", "> [!INFO] Title\n> Message\n", func() string {78 return mdalert.Info("Title", "Message")79 }},80 {"info with empty title", "> [!INFO]\n> Message\n", func() string {81 return mdalert.Info("", "Message")82 }},83 {"info multiline", "> [!INFO] Title\n> Line1\n> Line2\n", func() string {84 return mdalert.Info("Title", "Line1\nLine2")85 }},86 {"info formatted", "> [!INFO] Title\n> Message\n", func() string {87 return mdalert.Infof("Title", "%s", "Message")88 }},89 {"info formatted with empty title", "> [!INFO]\n> Message\n", func() string {90 return mdalert.Infof("", "%s", "Message")91 }},92 {"info formatted multiline", "> [!INFO] Title\n> Line1\n> Line2\n", func() string {93 return mdalert.Infof("Title", "%s\n%s", "Line1", "Line2")94 }},9596 // NOTE97 {"note", "> [!NOTE] Title\n> Message\n", func() string {98 return mdalert.Note("Title", "Message")99 }},100 {"note with empty title", "> [!NOTE]\n> Message\n", func() string {101 return mdalert.Note("", "Message")102 }},103 {"note multiline", "> [!NOTE] Title\n> Line1\n> Line2\n", func() string {104 return mdalert.Note("Title", "Line1\nLine2")105 }},106 {"note formatted", "> [!NOTE] Title\n> Message\n", func() string {107 return mdalert.Notef("Title", "%s", "Message")108 }},109 {"note formatted with empty title", "> [!NOTE]\n> Message\n", func() string {110 return mdalert.Notef("", "%s", "Message")111 }},112 {"note formatted multiline", "> [!NOTE] Title\n> Line1\n> Line2\n", func() string {113 return mdalert.Notef("Title", "%s\n%s", "Line1", "Line2")114 }},115116 // SUCCESS117 {"success", "> [!SUCCESS] Title\n> Message\n", func() string {118 return mdalert.Success("Title", "Message")119 }},120 {"success with empty title", "> [!SUCCESS]\n> Message\n", func() string {121 return mdalert.Success("", "Message")122 }},123 {"success multiline", "> [!SUCCESS] Title\n> Line1\n> Line2\n", func() string {124 return mdalert.Success("Title", "Line1\nLine2")125 }},126 {"success formatted", "> [!SUCCESS] Title\n> Message\n", func() string {127 return mdalert.Successf("Title", "%s", "Message")128 }},129 {"success formatted with empty title", "> [!SUCCESS]\n> Message\n", func() string {130 return mdalert.Successf("", "%s", "Message")131 }},132 {"success formatted multiline", "> [!SUCCESS] Title\n> Line1\n> Line2\n", func() string {133 return mdalert.Successf("Title", "%s\n%s", "Line1", "Line2")134 }},135136 // TIP137 {"tip", "> [!TIP] Title\n> Message\n", func() string {138 return mdalert.Tip("Title", "Message")139 }},140 {"tip with empty title", "> [!TIP]\n> Message\n", func() string {141 return mdalert.Tip("", "Message")142 }},143 {"tip multiline", "> [!TIP] Title\n> Line1\n> Line2\n", func() string {144 return mdalert.Tip("Title", "Line1\nLine2")145 }},146 {"tip formatted", "> [!TIP] Title\n> Message\n", func() string {147 return mdalert.Tipf("Title", "%s", "Message")148 }},149 {"tip formatted with empty title", "> [!TIP]\n> Message\n", func() string {150 return mdalert.Tipf("", "%s", "Message")151 }},152 {"tip formatted multiline", "> [!TIP] Title\n> Line1\n> Line2\n", func() string {153 return mdalert.Tipf("Title", "%s\n%s", "Line1", "Line2")154 }},155156 // WARNING157 {"warning", "> [!WARNING] Title\n> Message\n", func() string {158 return mdalert.Warning("Title", "Message")159 }},160 {"warning with empty title", "> [!WARNING]\n> Message\n", func() string {161 return mdalert.Warning("", "Message")162 }},163 {"warning multiline", "> [!WARNING] Title\n> Line1\n> Line2\n", func() string {164 return mdalert.Warning("Title", "Line1\nLine2")165 }},166 {"warning formatted", "> [!WARNING] Title\n> Message\n", func() string {167 return mdalert.Warningf("Title", "%s", "Message")168 }},169 {"warning formatted with empty title", "> [!WARNING]\n> Message\n", func() string {170 return mdalert.Warningf("", "%s", "Message")171 }},172 {"warning formatted multiline", "> [!WARNING] Title\n> Line1\n> Line2\n", func() string {173 return mdalert.Warningf("Title", "%s\n%s", "Line1", "Line2")174 }},175 }176177 for _, tt := range tests {178 t.Run(tt.name, func(t *testing.T) {179 got := tt.fn()180 if got != tt.expected {181 t.Errorf("Got: %q\nWant: %q", got, tt.expected)182 }183 })184 }185}186Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.