okami.mom/glamour
git clone https://git.nkp.pet/okami.mom/glamour
cf874d7
main
1package ansi 2 3import ( 4"bytes" 5"encoding/json" 6"os" 7"path/filepath" 8"strings" 9"testing" 10 11"github.com/charmbracelet/x/exp/golden" 12"github.com/yuin/goldmark" 13 emoji"github.com/yuin/goldmark-emoji" 14"github.com/yuin/goldmark/extension" 15"github.com/yuin/goldmark/parser" 16"github.com/yuin/goldmark/renderer" 17"github.com/yuin/goldmark/util" 18) 19 20const ( 21examplesDir = "../styles/examples/" 22issuesDir = "../testdata/issues/" 23) 24 25func TestRenderer (t * testing.T ) { 26files ,err := filepath .Glob (examplesDir + "*.md" ) 27if err != nil { 28t .Fatal (err ) 29 } 30 31for _ ,f := range files { 32bn := strings .TrimSuffix (filepath .Base (f ),".md" ) 33t .Run (bn ,func (t * testing.T ) { 34sn := filepath .Join (examplesDir ,bn + ".style" ) 35 36in ,err := os .ReadFile (f ) 37if err != nil { 38t .Fatal (err ) 39 } 40b ,err := os .ReadFile (sn ) 41if err != nil { 42t .Fatal (err ) 43 } 44 45options := Options { 46WordWrap :80 , 47 } 48err = json .Unmarshal (b ,& options .Styles ) 49if err != nil { 50t .Fatal (err ) 51 } 52 53switch bn { 54case "table_wrap" : 55tableWrap := true 56options .TableWrap = & tableWrap 57case "table_truncate" : 58tableWrap := false 59options .TableWrap = & tableWrap 60case "table_with_inline_links" : 61options .InlineTableLinks = true 62case "table_with_footer_links" ,"table_with_footer_links_no_color" : 63options .InlineTableLinks = false 64 } 65 66md := goldmark .New ( 67goldmark .WithExtensions ( 68extension .GFM , 69extension .DefinitionList , 70emoji .Emoji , 71 ), 72goldmark .WithParserOptions ( 73parser .WithAutoHeadingID (), 74 ), 75 ) 76 77ar := NewRenderer (options ) 78md .SetRenderer ( 79renderer .NewRenderer ( 80renderer .WithNodeRenderers (util .Prioritized (ar ,1000 )))) 81 82var buf bytes.Buffer 83if err := md .Convert (in ,& buf );err != nil { 84t .Error (err ) 85 } 86 87golden .RequireEqual (t ,buf .Bytes ()) 88 }) 89 } 90} 91 92func TestRendererIssues (t * testing.T ) { 93files ,err := filepath .Glob (issuesDir + "*.md" ) 94if err != nil { 95t .Fatal (err ) 96 } 97 98for _ ,f := range files { 99bn := strings .TrimSuffix (filepath .Base (f ),".md" ) 100t .Run (bn ,func (t * testing.T ) { 101in ,err := os .ReadFile (f ) 102if err != nil { 103t .Fatal (err ) 104 } 105b ,err := os .ReadFile ("../styles/dark.json" ) 106if err != nil { 107t .Fatal (err ) 108 } 109 110options := Options { 111WordWrap :80 , 112 } 113err = json .Unmarshal (b ,& options .Styles ) 114if err != nil { 115t .Fatal (err ) 116 } 117if bn == "493" { 118tableWrap := false 119options .TableWrap = & tableWrap 120 } 121 122md := goldmark .New ( 123goldmark .WithExtensions ( 124extension .GFM , 125extension .DefinitionList , 126emoji .Emoji , 127 ), 128goldmark .WithParserOptions ( 129parser .WithAutoHeadingID (), 130 ), 131 ) 132 133ar := NewRenderer (options ) 134md .SetRenderer ( 135renderer .NewRenderer ( 136renderer .WithNodeRenderers (util .Prioritized (ar ,1000 )))) 137 138var buf bytes.Buffer 139if err := md .Convert (in ,& buf );err != nil { 140t .Error (err ) 141 } 142 143golden .RequireEqual (t ,buf .Bytes ()) 144 }) 145 } 146}