UNPKG

@lobehub/chat

Version:

Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.

72 lines (60 loc) 2.31 kB
import { describe, expect, it } from 'vitest'; import { safeParseJSON } from './safeParseJSON'; describe('safeParseJSON', () => { it('should parse a valid JSON string', () => { const validJSON = '{"name": "John", "age": 30}'; const result = safeParseJSON(validJSON); expect(result).toEqual({ name: 'John', age: 30 }); }); it('should return undefined for invalid JSON', () => { const invalidJSON = '{name: John}'; const result = safeParseJSON(invalidJSON); expect(result).toBeUndefined(); }); it('should parse an empty object', () => { const emptyObject = '{}'; const result = safeParseJSON(emptyObject); expect(result).toEqual({}); }); it('should parse an array', () => { const arrayJSON = '[1, 2, 3]'; const result = safeParseJSON(arrayJSON); expect(result).toEqual([1, 2, 3]); }); it('should parse nested objects', () => { const nestedJSON = '{"user": {"name": "John", "age": 30}}'; const result = safeParseJSON(nestedJSON); expect(result).toEqual({ user: { name: 'John', age: 30 } }); }); it('should return undefined for an empty string', () => { const result = safeParseJSON(''); expect(result).toBeUndefined(); }); it('should return undefined for non-string input', () => { // @ts-expect-error: Testing with invalid input type const result = safeParseJSON(123); expect(result).toBeUndefined(); }); it('should parse JSON with special characters', () => { const specialJSON = '{"message": "Hello, \\"world\\"!"}'; const result = safeParseJSON(specialJSON); expect(result).toEqual({ message: 'Hello, "world"!' }); }); it('should parse large JSON without throwing an error', () => { const largeJSON = JSON.stringify({ data: Array(1000).fill('test') }); const result = safeParseJSON(largeJSON); expect(result).toHaveProperty('data'); expect(Array.isArray(result!.data)).toBe(true); expect(result!.data).toHaveLength(1000); }); it('should handle JSON with different data types', () => { const mixedJSON = '{"string": "text", "number": 42, "boolean": true, "null": null}'; const result = safeParseJSON(mixedJSON); expect(result).toEqual({ string: 'text', number: 42, boolean: true, null: null, }); }); });