| 136 | } |
| 137 | |
| 138 | void demonstrateValueConversion() |
| 139 | { |
| 140 | std::cout << "\n=== Value Conversion Demo ===\n"; |
| 141 | |
| 142 | try |
| 143 | { |
| 144 | auto context = choc::javascript::createQuickJSContext(); |
| 145 | |
| 146 | // Test different value types |
| 147 | context.evaluateExpression ("var testNumber = 42.5;"); |
| 148 | context.evaluateExpression ("var testString = 'Hello World';"); |
| 149 | context.evaluateExpression ("var testBoolean = true;"); |
| 150 | context.evaluateExpression ("var testArray = [1, 2, 3, 'four', 5.5];"); |
| 151 | context.evaluateExpression ("var testObject = { name: 'test', value: 123, nested: { a: 1, b: 2 } };"); |
| 152 | |
| 153 | // Get and display values |
| 154 | auto number = context.evaluateExpression ("testNumber"); |
| 155 | std::cout << "Number: " << number.getWithDefault<double>(0.0) << " (type: " << number.getType().getDescription() << ")\n"; |
| 156 | |
| 157 | auto string = context.evaluateExpression ("testString"); |
| 158 | std::cout << "String: '" << string.toString() << "' (type: " << string.getType().getDescription() << ")\n"; |
| 159 | |
| 160 | auto boolean = context.evaluateExpression ("testBoolean"); |
| 161 | std::cout << "Boolean: " << (boolean.getWithDefault<bool>(false) ? "true" : "false") << " (type: " << boolean.getType().getDescription() << ")\n"; |
| 162 | |
| 163 | auto array = context.evaluateExpression ("testArray"); |
| 164 | std::cout << "Array: ["; |
| 165 | |
| 166 | for (uint32_t i = 0; i < array.size(); ++i) |
| 167 | { |
| 168 | if (i > 0) std::cout << ", "; |
| 169 | auto element = array[i]; |
| 170 | |
| 171 | if (element.isString()) |
| 172 | std::cout << "'" << element.toString() << "'"; |
| 173 | else |
| 174 | std::cout << element.getWithDefault<double>(0.0); |
| 175 | } |
| 176 | |
| 177 | std::cout << "] (size: " << array.size() << ")\n"; |
| 178 | |
| 179 | auto object = context.evaluateExpression ("testObject"); |
| 180 | std::cout << "Object properties:\n"; |
| 181 | |
| 182 | if (object.isObject()) |
| 183 | { |
| 184 | std::cout << " name: " << object["name"].toString() << "\n"; |
| 185 | std::cout << " value: " << object["value"].getWithDefault<double>(0.0) << "\n"; |
| 186 | std::cout << " nested: [object]\n"; |
| 187 | } |
| 188 | } |
| 189 | catch (const choc::javascript::Error& e) |
| 190 | { |
| 191 | std::cout << "JavaScript Error: " << e.what() << "\n"; |
| 192 | } |
| 193 | } |
| 194 | |
| 195 | void demonstrateAdvancedFeatures() |
no test coverage detected