github.com/kata-containers/tests@v0.0.0-20240307153542-772105b56064/cmd/check-markdown/utils_test.go (about)

     1  //
     2  // Copyright (c) 2019 Intel Corporation
     3  //
     4  // SPDX-License-Identifier: Apache-2.0
     5  //
     6  
     7  package main
     8  
     9  import (
    10  	"fmt"
    11  	"testing"
    12  
    13  	"github.com/stretchr/testify/assert"
    14  )
    15  
    16  func TestSplitLink(t *testing.T) {
    17  	assert := assert.New(t)
    18  
    19  	type testData struct {
    20  		linkName string
    21  		file     string
    22  		section  string
    23  		valid    bool
    24  	}
    25  
    26  	data := []testData{
    27  		{"", "", "", false},
    28  
    29  		{"foo.md", "foo.md", "", true},
    30  		{"#bar", "", "bar", true},
    31  		{"foo.md#bar", "foo.md", "bar", true},
    32  		{"foo.md%%bar", "foo.md%%bar", "", true},
    33  	}
    34  
    35  	for i, d := range data {
    36  		file, section, err := splitLink(d.linkName)
    37  
    38  		if d.valid {
    39  			assert.NoErrorf(err, "test[%d]: %+v", i, d)
    40  			assert.Equal(file, d.file, "test[%d]: %+v", i, d)
    41  			assert.Equal(section, d.section, "test[%d]: %+v", i, d)
    42  		} else {
    43  			assert.Errorf(err, "test[%d]: %+v", i, d)
    44  		}
    45  	}
    46  }
    47  
    48  func TestValidHeadingIDChar(t *testing.T) {
    49  	assert := assert.New(t)
    50  
    51  	type testData struct {
    52  		ch    rune
    53  		valid bool
    54  	}
    55  
    56  	data := []testData{
    57  		{' ', true},
    58  		{'\t', true},
    59  		{'\n', true},
    60  
    61  		{'a', true},
    62  		{'z', true},
    63  		{'A', true},
    64  		{'Z', true},
    65  
    66  		{'0', true},
    67  		{'9', true},
    68  
    69  		{'-', true},
    70  		{'_', true},
    71  
    72  		{'\000', false},
    73  		{'\001', false},
    74  	}
    75  
    76  	for i, d := range data {
    77  		result := validHeadingIDChar(d.ch)
    78  
    79  		var outcome bool
    80  
    81  		if d.valid {
    82  			outcome = result != -1
    83  		} else {
    84  			outcome = result == -1
    85  		}
    86  
    87  		assert.Truef(outcome, "test[%d]: %+v", i, d)
    88  	}
    89  
    90  	// the main list of invalid chars to test
    91  	invalid := "!@#$%^&*()+=[]{}\\|:\";'<>?,./"
    92  
    93  	for i, ch := range invalid {
    94  		result := validHeadingIDChar(ch)
    95  
    96  		outcome := result == -1
    97  
    98  		assert.Truef(outcome, "invalid[%d]: %+v", i, ch)
    99  	}
   100  }
   101  
   102  func TestCreateHeadingID(t *testing.T) {
   103  	assert := assert.New(t)
   104  
   105  	type testData struct {
   106  		heading      string
   107  		id           string
   108  		expecteError bool
   109  	}
   110  
   111  	data := []testData{
   112  		{"", "", true},
   113  		{"a", "a", false},
   114  		{"a.b/c:d", "abcd", false},
   115  		{"a ?", "a-", false},
   116  		{"a !?!", "a-", false},
   117  		{"foo", "foo", false},
   118  		{"foo bar", "foo-bar", false},
   119  		{"foo_bar", "foo_bar", false},
   120  		{"foo_bar()", "foo_bar", false},
   121  		{"`foo_bar()`", "foo_bar", false},
   122  		{"foo_bar()baz", "foo_barbaz", false},
   123  		{"Stability or Performance?", "stability-or-performance", false},
   124  		{"Hello - World", "hello---world", false},
   125  		{"metrics_json_init()", "metrics_json_init", false},
   126  		{"metrics_json_add_array_element(json)", "metrics_json_add_array_elementjson", false},
   127  		{"What is it ?", "what-is-it-", false},
   128  		{"Sandbox `DeviceInfo`", "sandbox-deviceinfo", false},
   129  		{"Build a custom QEMU for aarch64/arm64 - REQUIRED", "build-a-custom-qemu-for-aarch64arm64---required", false},
   130  		{"docker --net=host", "docker---nethost", false},
   131  		{"Containerd Runtime V2 API (Shim V2 API)", "containerd-runtime-v2-api-shim-v2-api", false},
   132  		{"Containerd Runtime V2 API: Shim V2 API", "containerd-runtime-v2-api-shim-v2-api", false},
   133  		{"Launch i3.metal instance", "launch-i3metal-instance", false},
   134  		{"Deploy!", "deploy", false},
   135  	}
   136  
   137  	for i, d := range data {
   138  		id, err := createHeadingID(d.heading)
   139  
   140  		msg := fmt.Sprintf("test[%d]: %+v, id: %q\n", i, d, id)
   141  
   142  		if d.expecteError {
   143  			assert.Error(err)
   144  			continue
   145  		}
   146  
   147  		assert.Equal(id, d.id, msg)
   148  	}
   149  }