|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import { Runnable } from '../../../../src/index.js';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class JsonParserRunnable extends Runnable {
|
|
|
constructor(options = {}) {
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
async _call(input, config) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async function runTests() {
|
|
|
console.log('π§ͺ Testing JsonParserRunnable...\n');
|
|
|
|
|
|
try {
|
|
|
|
|
|
console.log('Test 1: Valid JSON object');
|
|
|
const parser = new JsonParserRunnable();
|
|
|
const result1 = await parser.invoke('{"name":"Alice","age":30}');
|
|
|
console.assert(result1.name === 'Alice', 'Should parse name');
|
|
|
console.assert(result1.age === 30, 'Should parse age');
|
|
|
console.log('β
Parsed: {"name":"Alice","age":30}\n');
|
|
|
|
|
|
|
|
|
console.log('Test 2: Valid JSON array');
|
|
|
const result2 = await parser.invoke('[1, 2, 3, 4, 5]');
|
|
|
console.assert(Array.isArray(result2), 'Should return array');
|
|
|
console.assert(result2.length === 5, 'Should have 5 elements');
|
|
|
console.log('β
Parsed: [1, 2, 3, 4, 5]\n');
|
|
|
|
|
|
|
|
|
console.log('Test 3: Invalid JSON returns null');
|
|
|
const result3 = await parser.invoke('this is not json');
|
|
|
console.assert(result3 === null, 'Should return null for invalid JSON');
|
|
|
console.log('β
Returns null for invalid JSON\n');
|
|
|
|
|
|
|
|
|
console.log('Test 4: Empty string returns null');
|
|
|
const result4 = await parser.invoke('');
|
|
|
console.assert(result4 === null, 'Should return null for empty string');
|
|
|
console.log('β
Returns null for empty string\n');
|
|
|
|
|
|
|
|
|
console.log('Test 5: With default value');
|
|
|
const parserWithDefault = new JsonParserRunnable({
|
|
|
defaultValue: { error: 'Invalid JSON' }
|
|
|
});
|
|
|
const result5 = await parserWithDefault.invoke('bad json');
|
|
|
console.assert(result5.error === 'Invalid JSON', 'Should return default value');
|
|
|
console.log('β
Returns default value for invalid JSON\n');
|
|
|
|
|
|
|
|
|
console.log('Test 6: Nested JSON');
|
|
|
const nested = '{"user":{"name":"Bob","address":{"city":"NYC"}}}';
|
|
|
const result6 = await parser.invoke(nested);
|
|
|
console.assert(result6.user.address.city === 'NYC', 'Should parse nested objects');
|
|
|
console.log('β
Parsed nested JSON\n');
|
|
|
|
|
|
console.log('π All tests passed!');
|
|
|
} catch (error) {
|
|
|
console.error('β Test failed:', error.message);
|
|
|
console.error(error.stack);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
|
runTests();
|
|
|
}
|
|
|
|
|
|
export { JsonParserRunnable }; |