From 9e5d12551f31eff82f88ef2c6da0f9143b810b47 Mon Sep 17 00:00:00 2001 From: WebFreak001 Date: Tue, 6 Dec 2016 23:25:16 +0100 Subject: [PATCH] Fallback to raw output when JSON.parse fails Partial fix for #77 --- src/backend/mi_parse.ts | 8 +++++++- test/mi_parse.test.ts | 12 ++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/backend/mi_parse.ts b/src/backend/mi_parse.ts index cee3b0a..b306252 100644 --- a/src/backend/mi_parse.ts +++ b/src/backend/mi_parse.ts @@ -136,7 +136,13 @@ export function parseMI(output: string): MINode { stringEnd++; } // hax - let str = JSON.parse(output.substr(0, stringEnd)); + let str; + try { + str = JSON.parse(output.substr(0, stringEnd)); + } + catch (e) { + str = output.substr(0, stringEnd); + } output = output.substr(stringEnd); return str; }; diff --git a/test/mi_parse.test.ts b/test/mi_parse.test.ts index dd75df7..c37f618 100644 --- a/test/mi_parse.test.ts +++ b/test/mi_parse.test.ts @@ -23,6 +23,18 @@ suite("MI Parse", () => { assert.equal(parsed.outOfBandRecord[0].content, "[Thread 0x7fffe993a700 (LWP 11002) exited]\n"); assert.equal(parsed.resultRecords, undefined); }); + test("Unicode", () => { + let parsed = parseMI(`~"[Depuraci\\303\\263n de hilo usando libthread_db enabled]\\n"`); + assert.ok(parsed); + assert.equal(parsed.token, undefined); + assert.equal(parsed.outOfBandRecord.length, 1); + assert.equal(parsed.outOfBandRecord[0].isStream, true); + // Hack + assert.equal(parsed.outOfBandRecord[0].content, `"[Depuraci\\303\\263n de hilo usando libthread_db enabled]\\n"`); + // Better Goal: + //assert.equal(parsed.outOfBandRecord[0].content, "[Depuración de hilo usando libthread_db enabled]\n"); + assert.equal(parsed.resultRecords, undefined); + }); test("Empty line", () => { let parsed = parseMI(``); assert.ok(parsed);