MIRROR: javascript for 馃悳's, a tiny runtime with big ambitions
1// Test Function constructor
2// This tests whether the Function constructor can create a dynamic function
3// from string arguments.
4//
5// The Function constructor syntax:
6// new Function(arg1, arg2, ..., argN, functionBody)
7// All arguments are strings. The last argument is the function body,
8// and all previous arguments are parameter names.
9
10console.log('=== Testing Function Constructor ===\n');
11
12// Test 1: Basic two-parameter function
13console.log('Test 1: Basic addition function');
14let sum = new Function('a', 'b', 'return a + b');
15console.log(' Created function:', sum);
16console.log(' typeof sum:', typeof sum);
17console.log(' sum(1, 2):', sum(1, 2), '(expected: 3)');
18
19// Test 2: No parameters
20console.log('\nTest 2: Function with no parameters');
21let hello = new Function('return "Hello World"');
22console.log(' hello():', hello(), '(expected: "Hello World")');
23
24// Test 3: Single parameter
25console.log('\nTest 3: Single parameter function');
26let square = new Function('x', 'return x * x');
27console.log(' square(5):', square(5), '(expected: 25)');
28
29// Test 4: Multiple statements in body
30console.log('\nTest 4: Multiple statements in body');
31let multi = new Function('x', 'let y = x * 2; return y + 1');
32console.log(' multi(5):', multi(5), '(expected: 11)');
33
34// Test 5: Access to global scope
35console.log('\nTest 5: Access to window.global scope variables');
36window.global.factor = 10;
37let multiply = new Function('x', 'return x * factor');
38console.log(' multiply(5):', multiply(5), '(expected: 50)');
39
40// Test 6: Empty function body
41console.log('\nTest 6: Empty function body');
42let empty = new Function('');
43console.log(' empty():', empty(), '(expected: undefined)');
44
45// Test 7: Many parameters
46console.log('\nTest 7: Function with three parameters');
47let add3 = new Function('a', 'b', 'c', 'return a + b + c');
48console.log(' add3(1, 2, 3):', add3(1, 2, 3), '(expected: 6)');
49
50// Test 8: String concatenation
51console.log('\nTest 8: String concatenation');
52let greet = new Function('name', 'return "Hello, " + name + "!"');
53console.log(' greet("World"):', greet('World'), '(expected: "Hello, World!")');
54
55console.log('\n=== All Function Constructor Tests Complete ===');