Page MenuHomePhorge

template_literals.cjs
No OneTemporary

Size
8 KB
Referenced Files
None
Subscribers
None

template_literals.cjs

// Template Literal Tests
// Testing backtick (`) strings and ${} interpolation
//
// This test suite validates the template literal functionality including:
// - Basic template literals with backticks
// - Variable interpolation with ${}
// - Expression evaluation within templates
// - Multiple and consecutive interpolations
// - Type conversion (numbers, booleans, objects)
// - Multiline strings
// - Escape sequences
// - Complex expressions and nested calculations
// - Integration with functions and methods
// - Edge cases (empty, null, undefined)
// - Practical use cases (URLs, receipts, error messages)
console.log("=== Template Literal Tests ===\n");
// Test 1: Basic template literal
console.log("Test 1: Basic template literal");
let basic = `Hello, World!`;
console.log(" Result:", basic);
console.log(" Type:", typeof basic);
console.log(" Length:", basic.length);
// Test 2: Single variable interpolation
console.log("\nTest 2: Single variable interpolation");
let name = "Alice";
let greeting = `Hello, ${name}!`;
console.log(" Name:", name);
console.log(" Result:", greeting);
// Test 3: Multiple variable interpolations
console.log("\nTest 3: Multiple variable interpolations");
let firstName = "John";
let lastName = "Doe";
let fullName = `${firstName} ${lastName}`;
console.log(" First:", firstName);
console.log(" Last:", lastName);
console.log(" Full:", fullName);
// Test 4: Numeric expressions
console.log("\nTest 4: Numeric expressions");
let a = 10;
let b = 20;
let sum = `${a} + ${b} = ${a + b}`;
let product = `${a} * ${b} = ${a * b}`;
let division = `${b} / ${a} = ${b / a}`;
console.log(" Sum:", sum);
console.log(" Product:", product);
console.log(" Division:", division);
// Test 5: Complex expressions
console.log("\nTest 5: Complex expressions");
let x = 5;
let y = 3;
let complex1 = `(${x} + ${y}) * 2 = ${(x + y) * 2}`;
let complex2 = `Average of ${x} and ${y} is ${(x + y) / 2}`;
console.log(" Complex 1:", complex1);
console.log(" Complex 2:", complex2);
// Test 6: Boolean interpolation
console.log("\nTest 6: Boolean interpolation");
let isActive = true;
let isDisabled = false;
let status1 = `Active: ${isActive}`;
let status2 = `Disabled: ${isDisabled}`;
console.log(" Status 1:", status1);
console.log(" Status 2:", status2);
// Test 7: Mixed types
console.log("\nTest 7: Mixed types");
let count = 42;
let label = "items";
let enabled = true;
let mixed = `Status: ${enabled}, Count: ${count} ${label}`;
console.log(" Result:", mixed);
// Test 8: Empty template
console.log("\nTest 8: Empty template");
let empty = ``;
console.log(" Result: '" + empty + "'");
console.log(" Length:", empty.length);
// Test 9: Template with only interpolation
console.log("\nTest 9: Template with only interpolation");
let value = 123;
let onlyInterp = `${value}`;
console.log(" Value:", value);
console.log(" Result:", onlyInterp);
console.log(" Type:", typeof onlyInterp);
// Test 10: Consecutive interpolations
console.log("\nTest 10: Consecutive interpolations");
let n1 = 1;
let n2 = 2;
let n3 = 3;
let consecutive = `${n1}${n2}${n3}`;
console.log(" Result:", consecutive);
// Test 11: String concatenation in interpolation
console.log("\nTest 11: String concatenation in interpolation");
let part1 = "Hello";
let part2 = "World";
let concatenated = `${part1 + " " + part2}`;
console.log(" Part 1:", part1);
console.log(" Part 2:", part2);
console.log(" Result:", concatenated);
// Test 12: Nested arithmetic
console.log("\nTest 12: Nested arithmetic");
let p = 3;
let q = 4;
let r = 5;
let nested = `${p} * ${q} + ${r} = ${p * q + r}`;
console.log(" Result:", nested);
// Test 13: Comparison in template
console.log("\nTest 13: Comparison in template");
let age = 20;
let canVote = `Age ${age}: Can vote = ${age >= 18}`;
console.log(" Result:", canVote);
// Test 14: Object property access
console.log("\nTest 14: Object property access");
let person = { name: "Bob", age: 25 };
let personInfo = `${person.name} is ${person.age} years old`;
console.log(" Result:", personInfo);
// Test 15: Array indexing
console.log("\nTest 15: Array indexing");
let colors = ["red", "green", "blue"];
let colorMsg = `First color: ${colors[0]}, Last: ${colors[2]}`;
console.log(" Result:", colorMsg);
// Test 16: Multiline template
console.log("\nTest 16: Multiline template");
let multiline = `Line 1
Line 2
Line 3`;
console.log(" Result:", multiline);
console.log(" Length:", multiline.length);
// Test 17: Escape sequences
console.log("\nTest 17: Escape sequences");
let escaped = `Hello\nWorld\tTab`;
console.log(" With escapes:", escaped);
let withBackslash = `Path: C:\\Users\\Data`;
console.log(" With backslash:", withBackslash);
// Test 18: Template in function
console.log("\nTest 18: Template in function");
function greet(name, time) {
return `Good ${time}, ${name}!`;
}
let morning = greet("Alice", "morning");
let evening = greet("Bob", "evening");
console.log(" Morning:", morning);
console.log(" Evening:", evening);
// Test 19: Template with function call
console.log("\nTest 19: Template with function call");
function double(n) {
return n * 2;
}
let funcResult = `Double of 5 is ${double(5)}`;
console.log(" Result:", funcResult);
// Test 20: Combining with string methods
console.log("\nTest 20: Combining with string methods");
let word = "javascript";
let upperFirst = word[0];
let rest = word.slice(1);
let capitalized = `${upperFirst}${rest}`;
console.log(" Original:", word);
console.log(" Capitalized:", capitalized);
console.log(" Includes 'script':", capitalized.includes("script"));
// Test 21: Price formatting example
console.log("\nTest 21: Price formatting example");
let price = 19.99;
let quantity = 3;
let tax = 0.08;
let subtotal = price * quantity;
let total = subtotal * (1 + tax);
let receipt = `
Item price: $${price}
Quantity: ${quantity}
Subtotal: $${subtotal}
Tax (${tax * 100}%): $${subtotal * tax}
Total: $${total}`;
console.log(receipt);
// Test 22: URL building
console.log("\nTest 22: URL building");
let protocol = "https";
let domain = "example.com";
let path = "api/users";
let id = 123;
let url = `${protocol}://${domain}/${path}/${id}`;
console.log(" URL:", url);
// Test 23: Error message formatting
console.log("\nTest 23: Error message formatting");
let errorCode = 404;
let resource = "user";
let errorMsg = `Error ${errorCode}: ${resource} not found`;
console.log(" Error:", errorMsg);
// Test 24: Conditional expression in template
console.log("\nTest 24: Conditional expression in template");
let score = 85;
let grade = `Score: ${score} - ${score >= 90 ? "A" : score >= 80 ? "B" : "C"}`;
console.log(" Result:", grade);
// Test 25: Complex data formatting
console.log("\nTest 25: Complex data formatting");
let user = {
id: 1001,
name: "Charlie",
email: "charlie@example.com",
active: true
};
let userCard = `
┌─────────────────────────
│ ID: ${user.id}
│ Name: ${user.name}
│ Email: ${user.email}
│ Status: ${user.active ? "Active" : "Inactive"}
└─────────────────────────`;
console.log(userCard);
// Test 26: Edge case - very long interpolation
console.log("\nTest 26: Edge case - very long interpolation");
let longExpr = `Result: ${1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10}`;
console.log(" Result:", longExpr);
// Test 27: Template with null and undefined
console.log("\nTest 27: Template with null and undefined");
let nullVal = null;
let undefVal = undefined;
let nullMsg = `Null value: ${nullVal}`;
let undefMsg = `Undefined value: ${undefVal}`;
console.log(" Null:", nullMsg);
console.log(" Undefined:", undefMsg);
// Test 28: String with template-like syntax
console.log("\nTest 28: String with template-like syntax");
let innerCalc = 5 + 5;
let template = `Template with inner calculation: ${innerCalc}`;
console.log(" Result:", template);
// Test 29: Large numbers
console.log("\nTest 29: Large numbers");
let big = 1000000;
let formatted = `One million = ${big}`;
console.log(" Result:", formatted);
// Test 30: Performance test - multiple templates
console.log("\nTest 30: Performance test");
for (let i = 0; i < 5; i++) {
let msg = `Iteration ${i}: ${i * 2}`;
console.log(" " + msg);
}
console.log("\n=== All template literal tests completed ===");

File Metadata

Mime Type
text/plain
Expires
Sun, May 3, 9:43 AM (21 h, 29 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
519755
Default Alt Text
template_literals.cjs (8 KB)

Event Timeline