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  }