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 }