MIRROR: javascript for 馃悳's, a tiny runtime with big ambitions
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at master 166 lines 6.8 kB view raw
1// Test String.replace() and String.template() functionality 2 3console.log("=== String.replace() and String.template() Tests ===\n"); 4 5// Test 1: Basic replace 6console.log("Test 1: Basic replace"); 7let str1 = "hello world"; 8console.log(" Original:", str1); 9console.log(" replace('world', 'there'):", str1.replace("world", "there")); 10console.log(" replace('hello', 'goodbye'):", str1.replace("hello", "goodbye")); 11console.log(" Original unchanged:", str1); 12 13// Test 2: Replace only first occurrence 14console.log("\nTest 2: Replace first occurrence only"); 15let str2 = "the cat and the dog"; 16console.log(" Original:", str2); 17console.log(" replace('the', 'a'):", str2.replace("the", "a")); 18let str3 = "hello hello hello"; 19console.log(" '" + str3 + "'.replace('hello', 'hi'):", str3.replace("hello", "hi")); 20 21// Test 3: Replace not found 22console.log("\nTest 3: Replace when not found"); 23let str4 = "JavaScript"; 24console.log(" '" + str4 + "'.replace('Python', 'Ruby'):", str4.replace("Python", "Ruby")); 25console.log(" '" + str4 + "'.replace('java', 'JAVA'):", str4.replace("java", "JAVA")); 26 27// Test 4: Replace with empty string 28console.log("\nTest 4: Replace with empty string"); 29let str5 = "remove this word"; 30console.log(" '" + str5 + "'.replace('this ', ''):", str5.replace("this ", "")); 31let str6 = "prefixValue"; 32console.log(" '" + str6 + "'.replace('prefix', ''):", str6.replace("prefix", "")); 33 34// Test 5: Replace single character 35console.log("\nTest 5: Replace single character"); 36let str7 = "hello"; 37console.log(" '" + str7 + "'.replace('l', 'L'):", str7.replace("l", "L")); 38console.log(" '" + str7 + "'.replace('h', 'H'):", str7.replace("h", "H")); 39console.log(" '" + str7 + "'.replace('o', 'O'):", str7.replace("o", "O")); 40 41// Test 6: Replace in paths and URLs 42console.log("\nTest 6: Replace in paths/URLs"); 43let path = "/api/v1/users"; 44console.log(" Path:", path); 45console.log(" replace('/api/', '/api/v2/'):", path.replace("/api/", "/api/v2/")); 46let url = "http://example.com"; 47console.log(" URL:", url); 48console.log(" replace('http://', 'https://'):", url.replace("http://", "https://")); 49 50// Test 7: Basic template 51console.log("\nTest 7: Basic template()"); 52let tpl1 = "Hello, {{name}}!"; 53let data1 = { name: "Alice" }; 54console.log(" Template:", tpl1); 55console.log(" Data: {name: 'Alice'}"); 56console.log(" Result:", tpl1.template(data1)); 57 58// Test 8: Multiple placeholders 59console.log("\nTest 8: Multiple placeholders"); 60let tpl2 = "User {{name}} is {{age}} years old and lives in {{city}}"; 61let data2 = { name: "Bob", age: 30, city: "NYC" }; 62console.log(" Template:", tpl2); 63console.log(" Result:", tpl2.template(data2)); 64 65// Test 9: Number and boolean values 66console.log("\nTest 9: Different value types"); 67let tpl3 = "Status: {{active}}, Count: {{count}}, Rate: {{rate}}"; 68let data3 = { active: true, count: 42, rate: 3.14 }; 69console.log(" Template:", tpl3); 70console.log(" Result:", tpl3.template(data3)); 71 72// Test 10: Missing keys 73console.log("\nTest 10: Missing keys in data"); 74let tpl4 = "Hello {{first}} {{middle}} {{last}}"; 75let data4 = { first: "John", last: "Doe" }; 76console.log(" Template:", tpl4); 77console.log(" Data: {first: 'John', last: 'Doe'}"); 78console.log(" Result:", tpl4.template(data4)); 79console.log(" (missing {{middle}} becomes empty)"); 80 81// Test 11: URL building 82console.log("\nTest 11: URL building"); 83let urlTpl = "https://api.example.com/{{version}}/{{resource}}/{{id}}"; 84let urlData = { version: "v2", resource: "users", id: 123 }; 85console.log(" Template:", urlTpl); 86console.log(" Result:", urlTpl.template(urlData)); 87 88// Test 12: Configuration 89console.log("\nTest 12: Configuration messages"); 90let configTpl = "Server running on {{host}}:{{port}} in {{mode}} mode"; 91let configData = { host: "localhost", port: 3000, mode: "development" }; 92console.log(" Template:", configTpl); 93console.log(" Result:", configTpl.template(configData)); 94 95// Test 13: Query template 96console.log("\nTest 13: Query template"); 97let queryTpl = "SELECT * FROM {{table}} WHERE {{field}} = {{value}}"; 98let queryData = { table: "users", field: "id", value: 42 }; 99console.log(" Template:", queryTpl); 100console.log(" Result:", queryTpl.template(queryData)); 101 102// Test 14: No placeholders 103console.log("\nTest 14: Template with no placeholders"); 104let tpl6 = "This is just plain text"; 105let data6 = { name: "unused" }; 106console.log(" Template:", tpl6); 107console.log(" Result:", tpl6.template(data6)); 108 109// Test 15: All placeholder 110console.log("\nTest 15: Template is all placeholder"); 111let tpl7 = "{{value}}"; 112let data7 = { value: "replaced" }; 113console.log(" Template: '{{value}}'"); 114console.log(" Result:", tpl7.template(data7)); 115 116// Test 16: Combining replace and template 117console.log("\nTest 16: Combining replace() and template()"); 118let message = "Hello {{USER}}, welcome!"; 119console.log(" Original:", message); 120let normalized = message.replace("{{USER}}", "{{user}}"); 121console.log(" After replace:", normalized); 122let final = normalized.template({ user: "Charlie" }); 123console.log(" After template:", final); 124 125// Test 17: Replace after template 126console.log("\nTest 17: Replace after template"); 127let greetTpl = "Hello, {{name}}!"; 128let greetData = { name: "World" }; 129let greeting = greetTpl.template(greetData); 130console.log(" After template:", greeting); 131let changed = greeting.replace("World", "Universe"); 132console.log(" After replace:", changed); 133 134// Test 18: Validation messages 135console.log("\nTest 18: Validation messages"); 136let errorTpl = "Field '{{field}}' must be at least {{min}} characters"; 137let errorData = { field: "password", min: 8 }; 138console.log(" Error template:", errorTpl); 139console.log(" Result:", errorTpl.template(errorData)); 140 141let successTpl = "{{count}} items processed successfully"; 142let successData = { count: 150 }; 143console.log(" Success template:", successTpl); 144console.log(" Result:", successTpl.template(successData)); 145 146// Test 19: Adjacent placeholders 147console.log("\nTest 19: Adjacent placeholders"); 148let adjacent = "{{first}}{{second}}{{third}}"; 149let adjData = { first: "A", second: "B", third: "C" }; 150console.log(" Template:", adjacent); 151console.log(" Result:", adjacent.template(adjData)); 152 153// Test 20: Whitespace in placeholder names 154console.log("\nTest 20: Whitespace in placeholder names"); 155let wsTpl = "Hello {{userName}} from {{homeCity}}"; 156let wsData = { userName: "Eve", homeCity: "Boston" }; 157console.log(" Template:", wsTpl); 158console.log(" Result:", wsTpl.template(wsData)); 159 160// Test 21: Edge cases - empty strings 161console.log("\nTest 21: Edge cases - empty strings"); 162let empty = ""; 163console.log(" Empty string replace('x', 'y'):", "'" + empty.replace("x", "y") + "'"); 164console.log(" Empty string template({}):", "'" + empty.template({}) + "'"); 165 166console.log("\n=== All tests completed ===");