github.com/wmuizelaar/kpt@v0.0.0-20221018115725-bd564717b2ed/mdtogo/cmddocs/cmddocs_test.go (about) 1 // Copyright 2019 Google LLC 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package cmddocs_test 16 17 import ( 18 "os" 19 "path" 20 "sort" 21 "testing" 22 23 "github.com/GoogleContainerTools/kpt/mdtogo/cmddocs" 24 "github.com/stretchr/testify/assert" 25 ) 26 27 func TestParsingDocWithNameFromFolder(t *testing.T) { 28 testDir := path.Join(t.TempDir(), "example") 29 dirErr := os.Mkdir(testDir, os.ModePerm) 30 assert.NoError(t, dirErr) 31 exampleMd, err := os.CreateTemp(testDir, "_index.md") 32 assert.NoError(t, err) 33 34 testdata := []byte(` 35 <!--mdtogo:Short 36 Short documentation. 37 --> 38 Test document. 39 40 # Documentation 41 <!--mdtogo:Long--> 42 With 43 long 44 documentation. 45 <!--mdtogo--> 46 47 # Examples 48 <!--mdtogo:Examples-->` + 49 "```sh\n" + 50 ` 51 # An example invocation 52 example_bin arg1 53 ` + 54 "```\n" + 55 ` 56 57 <!--mdtogo--> 58 `) 59 60 err = os.WriteFile(exampleMd.Name(), testdata, os.ModePerm) 61 assert.NoError(t, err) 62 63 docs := cmddocs.ParseCmdDocs([]string{exampleMd.Name()}) 64 assert.Equal(t, 1, len(docs)) 65 assert.Equal(t, "Example", docs[0].Name) 66 assert.Equal(t, "Short documentation.", docs[0].Short) 67 assert.Equal(t, "\nWith\nlong\ndocumentation.\n", docs[0].Long) 68 assert.Equal(t, "\n \n # An example invocation\n example_bin arg1\n", docs[0].Examples) 69 } 70 71 func TestParsingDocWithBackticks(t *testing.T) { 72 testDir := path.Join(t.TempDir(), "example") 73 dirErr := os.Mkdir(testDir, os.ModePerm) 74 assert.NoError(t, dirErr) 75 exampleMd, err := os.CreateTemp(testDir, "_index.md") 76 assert.NoError(t, err) 77 78 testdata := []byte(` 79 <!--mdtogo:Short 80 Short ` + 81 "`documentation`" + 82 `. 83 --> 84 Test document. 85 ` + 86 "```\n" + 87 ` 88 89 <!--mdtogo--> 90 `) 91 92 err = os.WriteFile(exampleMd.Name(), testdata, os.ModePerm) 93 assert.NoError(t, err) 94 95 docs := cmddocs.ParseCmdDocs([]string{exampleMd.Name()}) 96 assert.Equal(t, 1, len(docs)) 97 assert.Equal(t, "Example", docs[0].Name) 98 assert.Equal(t, "Short ` + \"`\" + `documentation` + \"`\" + `.", docs[0].Short) 99 assert.Equal(t, "var ExampleShort = `Short ` + \"`\" + `documentation` + \"`\" + `.`\n", docs[0].String()) 100 } 101 102 func TestParsingDocWithNameFromComment(t *testing.T) { 103 testDir := path.Join(t.TempDir(), "example") 104 dirErr := os.Mkdir(testDir, os.ModePerm) 105 assert.NoError(t, dirErr) 106 exampleMd, err := os.CreateTemp(testDir, "_index.md") 107 assert.NoError(t, err) 108 109 testdata := []byte(` 110 <!--mdtogo:FirstShort 111 First short documentation. 112 --> 113 Test document. 114 115 # Documentation 116 <!--mdtogo:SecondShort 117 Second short documentation. 118 --> 119 <!--mdtogo:SecondLong--> 120 With 121 long 122 documentation. 123 <!--mdtogo--> 124 125 # Examples 126 <!--mdtogo:firstExamples-->` + 127 "```sh\n" + 128 ` 129 # An example invocation 130 example_bin arg1 131 ` + 132 "```\n" + 133 ` 134 135 <!--mdtogo--> 136 `) 137 138 err = os.WriteFile(exampleMd.Name(), testdata, os.ModePerm) 139 assert.NoError(t, err) 140 141 docs := cmddocs.ParseCmdDocs([]string{exampleMd.Name()}) 142 sort.Slice(docs, func(i, j int) bool { return docs[i].Name < docs[j].Name }) 143 assert.Equal(t, 2, len(docs)) 144 145 assert.Equal(t, "First", docs[0].Name) 146 assert.Equal(t, "First short documentation.", docs[0].Short) 147 assert.Equal(t, "\n \n # An example invocation\n example_bin arg1\n", docs[0].Examples) 148 149 assert.Equal(t, "Second", docs[1].Name) 150 assert.Equal(t, "Second short documentation.", docs[1].Short) 151 assert.Equal(t, "\nWith\nlong\ndocumentation.\n", docs[1].Long) 152 } 153 154 func TestParsingMultipleDocsFromSameFolder(t *testing.T) { 155 testDir := path.Join(t.TempDir(), "example") 156 dirErr := os.Mkdir(testDir, os.ModePerm) 157 assert.NoError(t, dirErr) 158 firstExampleMd, err := os.CreateTemp(testDir, "first_index.md") 159 assert.NoError(t, err) 160 secondExampleMd, err := os.CreateTemp(testDir, "second_index.md") 161 assert.NoError(t, err) 162 163 firstTestData := []byte(` 164 <!--mdtogo:FirstShort 165 First short documentation. 166 --> 167 Test document. 168 169 # Examples 170 <!--mdtogo:firstExamples-->` + 171 "```sh\n" + 172 ` 173 # An example invocation 174 example_bin arg1 175 ` + 176 "```\n" + 177 ` 178 179 <!--mdtogo--> 180 `) 181 182 secondTestData := []byte(` 183 Test document. 184 185 # Documentation 186 <!--mdtogo:SecondShort 187 Second short documentation. 188 --> 189 <!--mdtogo:SecondLong--> 190 With 191 long 192 documentation. 193 <!--mdtogo--> 194 `) 195 196 err = os.WriteFile(firstExampleMd.Name(), firstTestData, os.ModePerm) 197 assert.NoError(t, err) 198 err = os.WriteFile(secondExampleMd.Name(), secondTestData, os.ModePerm) 199 assert.NoError(t, err) 200 201 docs := cmddocs.ParseCmdDocs([]string{firstExampleMd.Name(), secondExampleMd.Name()}) 202 sort.Slice(docs, func(i, j int) bool { return docs[i].Name < docs[j].Name }) 203 assert.Equal(t, 2, len(docs)) 204 205 assert.Equal(t, "First", docs[0].Name) 206 assert.Equal(t, "First short documentation.", docs[0].Short) 207 assert.Equal(t, "\n \n # An example invocation\n example_bin arg1\n", docs[0].Examples) 208 209 assert.Equal(t, "Second", docs[1].Name) 210 assert.Equal(t, "Second short documentation.", docs[1].Short) 211 assert.Equal(t, "\nWith\nlong\ndocumentation.\n", docs[1].Long) 212 }