| 8 | #include "../choc/javascript/choc_javascript_QuickJS.h" |
| 9 | |
| 10 | void demonstrateBasicJavaScript() |
| 11 | { |
| 12 | std::cout << "\n=== Basic JavaScript Execution Demo ===\n"; |
| 13 | |
| 14 | try |
| 15 | { |
| 16 | // Create a QuickJS context |
| 17 | auto context = choc::javascript::createQuickJSContext(); |
| 18 | |
| 19 | // Execute simple JavaScript expressions |
| 20 | auto result1 = context.evaluateExpression ("2 + 3"); |
| 21 | std::cout << "2 + 3 = " << result1.getWithDefault<int>(0) << "\n"; |
| 22 | |
| 23 | auto result2 = context.evaluateExpression ("Math.sqrt (16)"); |
| 24 | std::cout << "Math.sqrt (16) = " << result2.getWithDefault<double>(0.0) << "\n"; |
| 25 | |
| 26 | auto result3 = context.evaluateExpression ("'Hello, ' + 'World!'"); |
| 27 | std::cout << "String concatenation: " << result3.toString() << "\n"; |
| 28 | |
| 29 | // Execute more complex JavaScript |
| 30 | auto result4 = context.evaluateExpression (R"( |
| 31 | (function() { |
| 32 | function factorial (n) { |
| 33 | if (n <= 1) return 1; |
| 34 | return n * factorial (n - 1); |
| 35 | } |
| 36 | return factorial (5); |
| 37 | })() |
| 38 | )"); |
| 39 | std::cout << "factorial (5) = " << result4.getWithDefault<int>(0) << "\n"; |
| 40 | |
| 41 | // Work with JavaScript objects |
| 42 | context.evaluateExpression ("var person = { name: 'John', age: 30, city: 'New York' };"); |
| 43 | auto name = context.evaluateExpression ("person.name"); |
| 44 | auto age = context.evaluateExpression ("person.age"); |
| 45 | std::cout << "Person: " << name.toString() |
| 46 | << ", age " << age.getWithDefault<int>(0) << "\n"; |
| 47 | } |
| 48 | catch (const choc::javascript::Error& e) |
| 49 | { |
| 50 | std::cout << "JavaScript Error: " << e.what() << "\n"; |
| 51 | } |
| 52 | } |
| 53 | |
| 54 | void demonstrateNativeFunctionBinding() |
| 55 | { |
no test coverage detected