diff --git a/src/core/operations/ConvertLeetSpeak.mjs b/src/core/operations/ConvertLeetSpeak.mjs index 54fa62f6e7..1a7cb2fcd1 100644 --- a/src/core/operations/ConvertLeetSpeak.mjs +++ b/src/core/operations/ConvertLeetSpeak.mjs @@ -18,7 +18,7 @@ class ConvertLeetSpeak extends Operation { this.name = "Convert Leet Speak"; this.module = "Default"; - this.description = "Converts to and from Leet Speak"; + this.description = "Converts to and from Leet Speak."; this.infoURL = "https://wikipedia.org/wiki/Leet"; this.inputType = "string"; this.outputType = "string"; @@ -39,13 +39,16 @@ class ConvertLeetSpeak extends Operation { */ run(input, args) { const direction = args[0]; + if (direction === "To Leet Speak") { - return input.replace(/[abcdefghijklmnopqrstuvwxyz]/gi, char => { - return toLeetMap[char.toLowerCase()] || char; + return input.replace(/[a-z]/gi, char => { + const leetChar = toLeetMap[char.toLowerCase()] || char; + return char === char.toUpperCase() ? leetChar.toUpperCase() : leetChar; }); } else if (direction === "From Leet Speak") { - return input.replace(/[48cd3f6h1jklmn0pqr57uvwxyz]/g, char => { - return fromLeetMap[char] || char; + return input.replace(/[48cd3f6h1jklmn0pqr57uvwxyz]/gi, char => { + const normalChar = fromLeetMap[char] || char; + return normalChar; }); } } diff --git a/tests/operations/tests/ConvertLeetSpeak.mjs b/tests/operations/tests/ConvertLeetSpeak.mjs index 198f7e57d2..d344580359 100644 --- a/tests/operations/tests/ConvertLeetSpeak.mjs +++ b/tests/operations/tests/ConvertLeetSpeak.mjs @@ -28,6 +28,28 @@ TestRegister.addTests([ args: ["From Leet Speak"] } ] + }, + { + name: "Convert to Leet Speak: basic text, keep case", + input: "HELLO", + expectedOutput: "H3LL0", + recipeConfig: [ + { + op: "Convert Leet Speak", + args: ["To Leet Speak"] + } + ] + }, + { + name: "Convert from Leet Speak: basic leet, keep case", + input: "H3LL0", + expectedOutput: "HeLLo", + recipeConfig: [ + { + op: "Convert Leet Speak", + args: ["From Leet Speak"] + } + ] } ]);