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  }