github.com/projectdiscovery/nuclei/v2@v2.9.15/pkg/protocols/common/replacer/replacer_test.go (about) 1 package replacer 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 ) 8 9 func TestReplacerReplace(t *testing.T) { 10 tests := []struct { 11 name string 12 template string 13 values map[string]interface{} 14 expected string 15 }{ 16 { 17 name: "Invalid arguments", 18 template: "", 19 values: nil, 20 expected: "", 21 }, 22 { 23 name: "Nested", 24 template: "{{base64_encode('{{test}}')}}", 25 values: map[string]interface{}{"test": "random"}, 26 expected: "{{base64_encode('random')}}", 27 }, 28 { 29 name: "Basic", 30 template: "{{test}} §hello§ {{data}}", 31 values: map[string]interface{}{"test": "random", "hello": "world"}, 32 expected: "random world {{data}}", 33 }, 34 { 35 name: "No template variables", 36 template: "Nothing to replace", 37 values: map[string]interface{}{"test": "random", "hello": "world"}, 38 expected: "Nothing to replace", 39 }, 40 { 41 name: "Nested variable", 42 template: "{{§var1§}} and §{{var2}}§", 43 values: map[string]interface{}{"var1": "variable 1", "var2": "variable 2"}, 44 expected: "{{variable 1}} and §variable 2§", 45 }, 46 { 47 name: "Space in variable name", 48 template: "{{var 1}} has a space", 49 values: map[string]interface{}{"var 1": "variable 1"}, 50 expected: "variable 1 has a space", 51 }, 52 { 53 name: "Escaped marker in template", 54 template: "{{\\§var 1\\§}}", 55 values: map[string]interface{}{"\\§var 1\\§": "variable 1"}, 56 expected: "variable 1", 57 }, 58 { 59 name: "Escaping no marker in template", 60 template: "{{\\§var 1\\§}}", 61 values: map[string]interface{}{"var 1": "variable 1"}, 62 expected: "{{\\§var 1\\§}}", 63 }, 64 { 65 name: "Empty variable name", 66 template: "{{}} §§ no vars here", 67 values: map[string]interface{}{"var 1": "variable 1"}, 68 expected: "{{}} §§ no vars here", 69 }, 70 { 71 name: "Multiple replacement", 72 template: "{{var1}} and §var1§ and another {{var2}}", 73 values: map[string]interface{}{"var1": "first variable", "var2": "second variable"}, 74 expected: "first variable and first variable and another second variable", 75 }, 76 } 77 78 for _, test := range tests { 79 t.Run(test.name, func(t *testing.T) { 80 assert.Equal(t, test.expected, Replace(test.template, test.values)) 81 }) 82 } 83 } 84 85 func TestReplacerReplaceOne(t *testing.T) { 86 tests := []struct { 87 name string 88 template string 89 key string 90 value interface{} 91 expected string 92 }{ 93 { 94 name: "Basic", 95 template: "once upon a time there was a {{var1}}", 96 key: "var1", 97 value: "variable 1", 98 expected: "once upon a time there was a variable 1", 99 }, 100 { 101 name: "Basic Multiple Vars", 102 template: "once upon a time there was a {{var1}} and a §var2§", 103 key: "var2", 104 value: "variable 2", 105 expected: "once upon a time there was a {{var1}} and a variable 2", 106 }, 107 { 108 name: "Missing key", 109 template: "once upon a time there was a {{var1}}", 110 key: "", 111 value: "variable 1", 112 expected: "once upon a time there was a {{var1}}", 113 }, 114 { 115 name: "Replacement value empty", 116 template: "{{var1}}nothing{{var1}} to{{var1}} see", 117 key: "var1", 118 value: "", 119 expected: "nothing{{var1}} to{{var1}} see", 120 }, 121 { 122 name: "Empty key and value different markers", 123 template: "{{}}both§§ the{{}} 1st and 2nd markers are replaced", 124 key: "", 125 value: "", 126 expected: "both the{{}} 1st and 2nd markers are replaced", 127 }, 128 { 129 name: "Empty key and value same marker", 130 template: "{{}}only{{}} the first marker is replaced{{}}", 131 key: "", 132 value: "", 133 expected: "only{{}} the first marker is replaced{{}}", 134 }, 135 } 136 for _, test := range tests { 137 t.Run(test.name, func(t *testing.T) { 138 assert.Equal(t, test.expected, ReplaceOne(test.template, test.key, test.value)) 139 }) 140 } 141 }