github.com/anthonyme00/gomarkdoc@v1.0.0/format/devops_test.go (about) 1 package format_test 2 3 import ( 4 "fmt" 5 "path/filepath" 6 "testing" 7 8 "github.com/anthonyme00/gomarkdoc/format" 9 "github.com/anthonyme00/gomarkdoc/lang" 10 "github.com/matryer/is" 11 ) 12 13 func TestBold(t *testing.T) { 14 is := is.New(t) 15 16 var f format.AzureDevOpsMarkdown 17 res, err := f.Bold("sample text") 18 is.NoErr(err) 19 is.Equal(res, "**sample text**") 20 } 21 22 func TestCodeBlock(t *testing.T) { 23 is := is.New(t) 24 25 var f format.AzureDevOpsMarkdown 26 res, err := f.CodeBlock("go", "Line 1\nLine 2") 27 is.NoErr(err) 28 is.Equal(res, "```go\nLine 1\nLine 2\n```") 29 } 30 31 func TestCodeBlock_noLanguage(t *testing.T) { 32 is := is.New(t) 33 34 var f format.AzureDevOpsMarkdown 35 res, err := f.CodeBlock("", "Line 1\nLine 2") 36 is.NoErr(err) 37 is.Equal(res, "```\nLine 1\nLine 2\n```") 38 } 39 40 func TestHeader(t *testing.T) { 41 tests := []struct { 42 text string 43 level int 44 result string 45 }{ 46 {"header text", 1, "# header text"}, 47 {"level 2", 2, "## level 2"}, 48 {"level 3", 3, "### level 3"}, 49 {"level 4", 4, "#### level 4"}, 50 {"level 5", 5, "##### level 5"}, 51 {"level 6", 6, "###### level 6"}, 52 {"other level", 12, "###### other level"}, 53 {"with * escape", 2, "## with \\* escape"}, 54 } 55 56 for _, test := range tests { 57 t.Run(fmt.Sprintf("%s (level %d)", test.text, test.level), func(t *testing.T) { 58 is := is.New(t) 59 60 var f format.AzureDevOpsMarkdown 61 res, err := f.Header(test.level, test.text) 62 is.NoErr(err) 63 is.Equal(res, test.result) 64 }) 65 } 66 } 67 68 func TestHeader_invalidLevel(t *testing.T) { 69 is := is.New(t) 70 71 var f format.AzureDevOpsMarkdown 72 _, err := f.Header(-1, "invalid") 73 is.Equal(err.Error(), "format: header level cannot be less than 1") 74 } 75 76 func TestRawHeader(t *testing.T) { 77 tests := []struct { 78 text string 79 level int 80 result string 81 }{ 82 {"header text", 1, "# header text"}, 83 {"with * escape", 2, "## with * escape"}, 84 } 85 86 for _, test := range tests { 87 t.Run(fmt.Sprintf("%s (level %d)", test.text, test.level), func(t *testing.T) { 88 is := is.New(t) 89 90 var f format.AzureDevOpsMarkdown 91 res, err := f.RawHeader(test.level, test.text) 92 is.NoErr(err) 93 is.Equal(res, test.result) 94 }) 95 } 96 } 97 98 func TestLocalHref(t *testing.T) { 99 tests := map[string]string{ 100 "Normal Header": "#normal-header", 101 " Leading whitespace": "#leading-whitespace", 102 "Multiple whitespace": "#multiple--whitespace", 103 "Special(#)%^Characters": "#special%28%23%29%25%5Echaracters", 104 "With:colon": "#with%3Acolon", 105 } 106 107 for input, output := range tests { 108 t.Run(input, func(t *testing.T) { 109 is := is.New(t) 110 111 var f format.AzureDevOpsMarkdown 112 res, err := f.LocalHref(input) 113 is.NoErr(err) 114 is.Equal(res, output) 115 }) 116 } 117 } 118 119 func TestCodeHref(t *testing.T) { 120 is := is.New(t) 121 122 wd, err := filepath.Abs(".") 123 is.NoErr(err) 124 locPath := filepath.Join(wd, "subdir", "file.go") 125 126 var f format.AzureDevOpsMarkdown 127 res, err := f.CodeHref(lang.Location{ 128 Start: lang.Position{Line: 12, Col: 1}, 129 End: lang.Position{Line: 14, Col: 43}, 130 Filepath: locPath, 131 WorkDir: wd, 132 Repo: &lang.Repo{ 133 Remote: "https://dev.azure.com/org/project/_git/repo", 134 DefaultBranch: "master", 135 PathFromRoot: "/", 136 }, 137 }) 138 is.NoErr(err) 139 is.Equal(res, "https://dev.azure.com/org/project/_git/repo?path=subdir%2Ffile.go&version=GBmaster&lineStyle=plain&line=12&lineEnd=14&lineStartColumn=1&lineEndColumn=43") 140 } 141 142 func TestCodeHref_noRepo(t *testing.T) { 143 is := is.New(t) 144 145 wd, err := filepath.Abs(".") 146 is.NoErr(err) 147 locPath := filepath.Join(wd, "subdir", "file.go") 148 149 var f format.AzureDevOpsMarkdown 150 res, err := f.CodeHref(lang.Location{ 151 Start: lang.Position{Line: 12, Col: 1}, 152 End: lang.Position{Line: 14, Col: 43}, 153 Filepath: locPath, 154 WorkDir: wd, 155 Repo: nil, 156 }) 157 is.NoErr(err) 158 is.Equal(res, "") 159 } 160 161 func TestLink(t *testing.T) { 162 is := is.New(t) 163 164 var f format.AzureDevOpsMarkdown 165 res, err := f.Link("link text", "https://test.com/a/b/c") 166 is.NoErr(err) 167 is.Equal(res, "[link text](<https://test.com/a/b/c>)") 168 } 169 170 func TestListEntry(t *testing.T) { 171 is := is.New(t) 172 173 var f format.AzureDevOpsMarkdown 174 res, err := f.ListEntry(0, "list entry text") 175 is.NoErr(err) 176 is.Equal(res, "- list entry text") 177 } 178 179 func TestListEntry_nested(t *testing.T) { 180 is := is.New(t) 181 182 var f format.AzureDevOpsMarkdown 183 res, err := f.ListEntry(2, "nested text") 184 is.NoErr(err) 185 is.Equal(res, " - nested text") 186 } 187 188 func TestListEntry_empty(t *testing.T) { 189 is := is.New(t) 190 191 var f format.AzureDevOpsMarkdown 192 res, err := f.ListEntry(0, "") 193 is.NoErr(err) 194 is.Equal(res, "") 195 }