diff --git a/pkg/core/test/errors.ts b/pkg/core/test/errors.ts index e791fe59..fa0b3d76 100644 --- a/pkg/core/test/errors.ts +++ b/pkg/core/test/errors.ts @@ -164,3 +164,56 @@ ParseError @slangroom/core@${packageJson.version}: at 2:74-84 const err = await t.throwsAsync(fn); t.is(err?.message, expected); }); + +test('Slangroom error are shown with context', async (t) => { + const plugin = new Plugin(); + plugin.new('connect', ['param'], 'do some action', (_) => _.fail(new Error("Something went horribly wrong"))); + + const slang = new Slangroom(plugin); + const fn = slang.execute(`Rule unknown ignore + Given I connect to 'url' and send param 'param' and do some action and output into 'res' + Given I have a 'string' named 'res' + Then print data`, + { + data: { + url: 'https://example.com', + param: { + foo: 'bar' + } + }, + keys: { + something: 'else' + } + }); + + const expected = `${lineNoColor('0 | ')}Rule unknown ignore +${lineNoColor('1 | ')}${sentenceHighlight(` ${textHighlight(`Given I connect to 'url' and send param 'param' and do some action and output into 'res'`)}`)} + ${errorColor('^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^')} +${lineNoColor('2 | ')} Given I have a 'string' named 'res' +${lineNoColor('3 | ')} Then print data + +Error colors: + - ${errorColor('error')} + - ${suggestedColor('suggested words')} + - ${missingColor('missing words')} + - ${extraColor('extra words')} + +Error: Something went horribly wrong + +Heap: +{ + "data": { + "url": "https://example.com", + "param": { + "foo": "bar" + } + }, + "keys": { + "something": "else" + } +} +`; + + const err = await t.throwsAsync(fn); + t.is(err?.message, expected, err?.message); +}); diff --git a/pkg/db/test/e2e.ts b/pkg/db/test/e2e.ts index 581c2589..e3679044 100644 --- a/pkg/db/test/e2e.ts +++ b/pkg/db/test/e2e.ts @@ -214,6 +214,26 @@ Error colors: Slangroom @slangroom/db@${packageJson.version} Error: [DATABASE] Returned null for id "30" in table "firstTable" in db "sqlite://./test/db1.db". + +Heap: +{ + "data": { + "n": 30, + "var_name": "obj_1", + "obj_1": "pippo", + "myDb1": "sqlite://./test/db1.db", + "myDb2": "sqlite://./test/db2.db", + "myTable": "firstTable", + "myCache": "firstCache", + "myOtherZenroomStringDictionary": { + "data": { + "data1": "9WgBlK+Kcq3AKpmhituXQe4UPkzH3zpZiQa4Szm1Q40=", + "data2": "BCEo8MgRiSxtLfxE4UEDVnbdZ21h+xc+egLIRk3VTagpJxlBfu9MjqXGUi2N7tIewpcDrr5V7Z2cmMcNsbKWSGQ=" + } + } + }, + "keys": {} +} `); }); @@ -265,5 +285,21 @@ Error colors: - extra words Slangroom @slangroom/db@${packageJson.version} Error: [DATABASE] Database error: TypeError: Cannot read properties of null (reading 'replace') + +Heap: +{ + "data": { + "myCache": "firstCache", + "myDb1": "sqlite://./test/db1.db", + "myDb2": "sqlite://./test/db2.db", + "myTable": "firstTable", + "myZenroomStringDictionary": { + "testkey": "test value" + }, + "obj_1": "pippo", + "var_name": "obj_1" + }, + "keys": {} +} `); }); diff --git a/pkg/db/test/raw_query.ts b/pkg/db/test/raw_query.ts index bd9adfb3..469dbe01 100644 --- a/pkg/db/test/raw_query.ts +++ b/pkg/db/test/raw_query.ts @@ -114,6 +114,19 @@ Error colors: - extra words Slangroom @slangroom/db@${packageJson.version} Error: SQLITE_ERROR: no such table: member + +Heap: +{ + "data": { + "database": "sqlite://./test/fake_test.db", + "query_1": "INSERT INTO member (name) VALUES ('Alice')", + "query_5": "INSERT INTO member (name) VALUES (?)", + "query5_params": [ + "Eve" + ] + }, + "keys": {} +} `); }); @@ -151,5 +164,18 @@ Error colors: - extra words Slangroom @slangroom/db@${packageJson.version} Error: SQLITE_ERROR: near "INSTERT": syntax error + +Heap: +{ + "data": { + "database": "sqlite://./test/test.db", + "query_1": "INSTERT INTO member (name) VALUES ('Alice')", + "query_5": "INSERT INTO member (name) VALUES (?)", + "query5_params": [ + "Eve" + ] + }, + "keys": {} +} `); }); diff --git a/pkg/fs/test/e2e.ts b/pkg/fs/test/e2e.ts index a653651e..32a68f70 100644 --- a/pkg/fs/test/e2e.ts +++ b/pkg/fs/test/e2e.ts @@ -40,6 +40,14 @@ Error colors: - extra words Slangroom @slangroom/fs@${packageJson.version} Error: $FILES_DIR must be provided + +Heap: +{ + "data": { + "filename": "test.txt" + }, + "keys": {} +} `); }); @@ -65,6 +73,14 @@ Error colors: - extra words Slangroom @slangroom/fs@${packageJson.version} Error: ENOENT: no such file or directory, open 'test.txt' + +Heap: +{ + "data": { + "filename": "test.txt" + }, + "keys": {} +} `); }); @@ -108,6 +124,16 @@ Error colors: - extra words Slangroom @slangroom/fs@${packageJson.version} Error: path must be string + +Heap: +{ + "data": { + "filename": { + "path": "test.txt" + } + }, + "keys": {} +} `); }); @@ -150,6 +176,14 @@ Error colors: - extra words Slangroom @slangroom/fs@${packageJson.version} Error: no such file or directory: test/test_not_exist.txt + +Heap: +{ + "data": { + "filename": "test_not_exist.txt" + }, + "keys": {} +} `); }); @@ -182,6 +216,14 @@ Error colors: - extra words Slangroom @slangroom/fs@${packageJson.version} Error: file or directory found under: test/test.txt + +Heap: +{ + "data": { + "filename": "test.txt" + }, + "keys": {} +} `); const resultNotExists = slangroom.execute(verifyDoesNotExists, { data: { diff --git a/pkg/git/test/e2e.ts b/pkg/git/test/e2e.ts index 29e5bf73..79850e49 100644 --- a/pkg/git/test/e2e.ts +++ b/pkg/git/test/e2e.ts @@ -41,6 +41,15 @@ Error colors: - extra words Slangroom @slangroom/git@${packageJson.version} Error: Could not find git root for .. + +Heap: +{ + "data": { + "path": "some/dumb/path", + "verified_git_repo": "true" + }, + "keys": {} +} `); }) @@ -74,6 +83,16 @@ Error colors: - extra words Slangroom @slangroom/git@${packageJson.version} Error: HTTP Error: 401 Unauthorized + +Heap: +{ + "data": { + "url": "https://github.com/matteo-cristino/dumb", + "path": "another/dumb/path", + "cloned_repository": "true" + }, + "keys": {} +} `); }) diff --git a/pkg/helpers/test/pick.ts b/pkg/helpers/test/pick.ts index 231b9569..028af278 100644 --- a/pkg/helpers/test/pick.ts +++ b/pkg/helpers/test/pick.ts @@ -209,6 +209,24 @@ None of the properties } } } + +Heap: +{ + "data": { + "props": "a", + "complex_object": { + "r": { + "a": "b", + "c": { + "d": { + "e": 42 + } + } + } + } + }, + "keys": {} +} `); }); diff --git a/pkg/http/test/e2e.ts b/pkg/http/test/e2e.ts index ada239ea..d2954439 100644 --- a/pkg/http/test/e2e.ts +++ b/pkg/http/test/e2e.ts @@ -126,5 +126,13 @@ Error colors: - extra words Slangroom @slangroom/http@${packageJson.version} Error: sequential requests are not implemented + +Heap: +{ + "data": { + "greeting_es": "http://localhost/greeting-es" + }, + "keys": {} +} `); }); diff --git a/pkg/pocketbase/test/e2e.ts b/pkg/pocketbase/test/e2e.ts index 7843408e..4a29ee03 100644 --- a/pkg/pocketbase/test/e2e.ts +++ b/pkg/pocketbase/test/e2e.ts @@ -73,6 +73,14 @@ Error colors: - extra words Slangroom @slangroom/pocketbase@${packageJson.version} Error: Can not start capacitor client in node environment + +Heap: +{ + "data": { + "pb_address": "http://127.0.0.1:8090/" + }, + "keys": {} +} `); }); diff --git a/pkg/shell/test/e2e.ts b/pkg/shell/test/e2e.ts index 64cd2ea8..4b9b12f7 100644 --- a/pkg/shell/test/e2e.ts +++ b/pkg/shell/test/e2e.ts @@ -59,6 +59,14 @@ Error colors: Slangroom @slangroom/shell@${packageJson.version} Error: Command failed with ENOENT: notfound -v spawn notfound ENOENT + +Heap: +{ + "data": { + "c": "notfound -v" + }, + "keys": {} +} `); }); @@ -92,5 +100,13 @@ Error colors: Slangroom @slangroom/shell@${packageJson.version} Error: Command failed with exit code 1: cat notfound.txt cat: notfound.txt: No such file or directory + +Heap: +{ + "data": { + "c": "cat notfound.txt" + }, + "keys": {} +} `); });