import * as assert from 'assert'; import { expandValue, isExpandable } from '../src/backend/gdb_expansion'; suite("GDB Value Expansion", () => { let variableCreate = (variable) => { return { expanded: variable }; }; test("Various values", () => { assert.strictEqual(isExpandable(`false`), 0); assert.equal(expandValue(variableCreate, `false`), "false"); assert.strictEqual(isExpandable(`5`), 0); assert.equal(expandValue(variableCreate, `5`), "5"); assert.strictEqual(isExpandable(`"hello world!"`), 0); assert.equal(expandValue(variableCreate, `"hello world!"`), `"hello world!"`); assert.strictEqual(isExpandable(`0x0`), 0); assert.equal(expandValue(variableCreate, `0x0`), ""); assert.strictEqual(isExpandable(`0xabc`), 2); assert.equal(expandValue(variableCreate, `0x7ffff7ecb480`), "*0x7ffff7ecb480"); assert.strictEqual(isExpandable(`{a = b, c = d}`), 1); assert.deepEqual(expandValue(variableCreate, `{a = b, c = d}`), [ { name: "a", value: "b", variablesReference: 0 }, { name: "c", value: "d", variablesReference: 0 }]); assert.strictEqual(isExpandable(`{{a = b}}`), 1); assert.deepEqual(expandValue(variableCreate, `{{a = b}}`), [ [ { name: "a", value: "b", variablesReference: 0 } ] ]); assert.deepEqual(expandValue(variableCreate, `{1, 2, 3, 4}`), [1, 2, 3, 4]); }); test("Error values", () => { assert.strictEqual(isExpandable(``), 0); assert.equal(expandValue(variableCreate, ``), ""); }); test("Nested values", () => { assert.strictEqual(isExpandable(`{a = {b = e}, c = d}`), 1); assert.deepEqual(expandValue(variableCreate, `{a = {b = e}, c = d}`), [ { name: "a", value: "Object", variablesReference: { expanded: [ { name: "b", value: "e", variablesReference: 0 } ] } }, { name: "c", value: "d", variablesReference: 0 }]); }); test("Simple node", () => { assert.strictEqual(isExpandable(`{a = false, b = 5, c = 0x0, d = "foobar"}`), 1); let variables = expandValue(variableCreate, `{a = false, b = 5, c = 0x0, d = "foobar"}`); assert.equal(variables.length, 4); assert.equal(variables[0].name, "a"); assert.equal(variables[0].value, "false"); assert.equal(variables[1].name, "b"); assert.equal(variables[1].value, "5"); assert.equal(variables[2].name, "c"); assert.equal(variables[2].value, ""); assert.equal(variables[3].name, "d"); assert.equal(variables[3].value, `"foobar"`); }); test("Complex node", () => { let node = `{quit = false, _views = {{view = 0x7ffff7ece1e8, renderer = 0x7ffff7eccc50, world = 0x7ffff7ece480}}, deltaTimer = {_flagStarted = false, _timeStart = {length = 0}, _timeMeasured = {length = 0}}, _start = {callbacks = 0x0}, _stop = {callbacks = 0x0}}`; assert.strictEqual(isExpandable(node), 1); let variables = expandValue(variableCreate, node); assert.deepEqual(variables, [ { name: "quit", value: "false", variablesReference: 0 }, { name: "_views", value: "Object", variablesReference: { expanded: [ [ { name: "view", value: "Object@*0x7ffff7ece1e8", variablesReference: { expanded: "*view" } }, { name: "renderer", value: "Object@*0x7ffff7eccc50", variablesReference: { expanded: "*renderer" } }, { name: "world", value: "Object@*0x7ffff7ece480", variablesReference: { expanded: "*world" } } ] ] } }, { name: "deltaTimer", value: "Object", variablesReference: { expanded: [ { name: "_flagStarted", value: "false", variablesReference: 0 }, { name: "_timeStart", value: "Object", variablesReference: { expanded: [ { name: "length", value: "0", variablesReference: 0 } ] } }, { name: "_timeMeasured", value: "Object", variablesReference: { expanded: [ { name: "length", value: "0", variablesReference: 0 } ] } } ] } }, { name: "_start", value: "Object", variablesReference: { expanded: [ { name: "callbacks", value: "", variablesReference: 0 } ] } }, { name: "_stop", value: "Object", variablesReference: { expanded: [ { name: "callbacks", value: "", variablesReference: 0 } ] } } ]); }); test("Simple node with errors", () => { let node = `{_enableMipMaps = false, _minFilter = , _magFilter = , _wrapX = , _wrapY = , _inMode = 6408, _mode = 6408, _id = 1, _width = 1024, _height = 1024}`; assert.strictEqual(isExpandable(node), 1); let variables = expandValue(variableCreate, node); assert.deepEqual(variables, [ { name: "_enableMipMaps", value: "false", variablesReference: 0 }, { name: "_minFilter", value: "", variablesReference: 0 }, { name: "_magFilter", value: "", variablesReference: 0 }, { name: "_wrapX", value: "", variablesReference: 0 }, { name: "_wrapY", value: "", variablesReference: 0 }, { name: "_inMode", value: "6408", variablesReference: 0 }, { name: "_mode", value: "6408", variablesReference: 0 }, { name: "_id", value: "1", variablesReference: 0 }, { name: "_width", value: "1024", variablesReference: 0 }, { name: "_height", value: "1024", variablesReference: 0 } ]); }) });