feat: update grok-cli ai sdk provider to v5 (#1252)
This commit is contained in:
81
packages/ai-sdk-provider-grok-cli/src/json-extractor.test.ts
Normal file
81
packages/ai-sdk-provider-grok-cli/src/json-extractor.test.ts
Normal file
@@ -0,0 +1,81 @@
|
||||
/**
|
||||
* Tests for JSON extraction utilities
|
||||
*/
|
||||
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { extractJson } from './json-extractor.js';
|
||||
|
||||
describe('extractJson', () => {
|
||||
it('should extract JSON from markdown code blocks', () => {
|
||||
const text = '```json\n{"name": "test", "value": 42}\n```';
|
||||
const result = extractJson(text);
|
||||
expect(result).toBe('{"name": "test", "value": 42}');
|
||||
});
|
||||
|
||||
it('should extract JSON from generic code blocks', () => {
|
||||
const text = '```\n{"name": "test", "value": 42}\n```';
|
||||
const result = extractJson(text);
|
||||
expect(result).toBe('{"name": "test", "value": 42}');
|
||||
});
|
||||
|
||||
it('should remove JavaScript variable declarations', () => {
|
||||
const text = 'const result = {"name": "test", "value": 42};';
|
||||
const result = extractJson(text);
|
||||
expect(result).toBe('{"name": "test", "value": 42}');
|
||||
});
|
||||
|
||||
it('should handle let variable declarations', () => {
|
||||
const text = 'let data = {"name": "test", "value": 42};';
|
||||
const result = extractJson(text);
|
||||
expect(result).toBe('{"name": "test", "value": 42}');
|
||||
});
|
||||
|
||||
it('should handle var variable declarations', () => {
|
||||
const text = 'var config = {"name": "test", "value": 42};';
|
||||
const result = extractJson(text);
|
||||
expect(result).toBe('{"name": "test", "value": 42}');
|
||||
});
|
||||
|
||||
it('should extract JSON arrays', () => {
|
||||
const text = '[{"name": "test1"}, {"name": "test2"}]';
|
||||
const result = extractJson(text);
|
||||
expect(result).toBe('[{"name": "test1"}, {"name": "test2"}]');
|
||||
});
|
||||
|
||||
it('should convert JavaScript object literals to JSON', () => {
|
||||
const text = "{name: 'test', value: 42}";
|
||||
const result = extractJson(text);
|
||||
expect(result).toBe('{"name": "test", "value": 42}');
|
||||
});
|
||||
|
||||
it('should return valid JSON as-is', () => {
|
||||
const text = '{"name": "test", "value": 42}';
|
||||
const result = extractJson(text);
|
||||
expect(result).toBe('{"name": "test", "value": 42}');
|
||||
});
|
||||
|
||||
it('should return original text when JSON parsing fails completely', () => {
|
||||
const text = 'This is not JSON at all';
|
||||
const result = extractJson(text);
|
||||
expect(result).toBe('This is not JSON at all');
|
||||
});
|
||||
|
||||
it('should handle complex nested objects', () => {
|
||||
const text =
|
||||
'```json\n{\n "user": {\n "name": "John",\n "age": 30\n },\n "items": [1, 2, 3]\n}\n```';
|
||||
const result = extractJson(text);
|
||||
expect(JSON.parse(result)).toEqual({
|
||||
user: {
|
||||
name: 'John',
|
||||
age: 30
|
||||
},
|
||||
items: [1, 2, 3]
|
||||
});
|
||||
});
|
||||
|
||||
it('should handle mixed quotes in object literals', () => {
|
||||
const text = `{name: "test", value: 'mixed quotes'}`;
|
||||
const result = extractJson(text);
|
||||
expect(result).toBe('{"name": "test", "value": "mixed quotes"}');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user