From dcffeb4dd295df4d1e8fc8f18116d4bc111cdc1f Mon Sep 17 00:00:00 2001 From: Karla Spuldaro Date: Mon, 17 Oct 2022 16:01:49 -0400 Subject: [PATCH 01/10] Add basic script debugger integration tests --- tests/integration/scriptdebugger.ts | 78 +++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 tests/integration/scriptdebugger.ts diff --git a/tests/integration/scriptdebugger.ts b/tests/integration/scriptdebugger.ts new file mode 100644 index 000000000..648f4debb --- /dev/null +++ b/tests/integration/scriptdebugger.ts @@ -0,0 +1,78 @@ +/* + * Copyright 2018-2022 Elyra Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +describe('Script debugger tests', () => { + before(() => { + cy.resetJupyterLab(); + }); + + afterEach(() => { + cy.closeTab(-1); + }); + + after(() => { + // delete files created for testing + cy.deleteFile('untitled*.py'); + cy.deleteFile('untitled*.r'); + }); + + it('test for debugger button to be enabled for default Python kernel', () => { + cy.createNewScriptEditor('Python'); + cy.wait(1000); + checkDefaultKernelSelection(); + checkDebuggerButtonEnabled(true); + }); + + it('test for debugger button state persistance on page reload', () => { + cy.createNewScriptEditor('Python'); + cy.wait(1000); + checkDefaultKernelSelection(); + checkDebuggerButtonEnabled(true); + cy.reload(); + cy.wait(1000); + checkDebuggerButtonEnabled(true); + }); + + // TODO: Open new bug report for the failing test below + // it('test for debugger button disabled for default kernel without debug support', () => { + // cy.createNewScriptEditor('R'); + // cy.wait(1000); + // cy.get( + // '.elyra-ScriptEditor .jp-Toolbar select > option[value*=python]' + // ).should('not.exist'); + // checkDebuggerButtonEnabled(false); // No debug button rendered on first load + // }); +}); + +// ------------------------------ +// ----- Utility Functions +// ------------------------------ + +const checkDefaultKernelSelection = (): void => { + cy.get('.elyra-ScriptEditor .jp-Toolbar select > option[value=python3]'); +}; + +const checkDebuggerButtonEnabled = (enabled: boolean): void => { + enabled + ? cy + .get('button.jp-DebuggerBugButton[title="Enable Debugger"]') + .should('not.be.disabled') + : cy + .get( + 'button.jp-DebuggerBugButton[title="Select a kernel that supports debugging to enable debugger"]' + ) + .should('be.disabled'); +}; From 171aa4f570d901d275f82bb30e0726808685d8ac Mon Sep 17 00:00:00 2001 From: Karla Spuldaro Date: Mon, 17 Oct 2022 17:01:09 -0400 Subject: [PATCH 02/10] Add test case for reopening file --- tests/integration/scriptdebugger.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/integration/scriptdebugger.ts b/tests/integration/scriptdebugger.ts index 648f4debb..905c9545b 100644 --- a/tests/integration/scriptdebugger.ts +++ b/tests/integration/scriptdebugger.ts @@ -46,6 +46,17 @@ describe('Script debugger tests', () => { checkDebuggerButtonEnabled(true); }); + it('test for debugger button state persistance on reopening editor tab', () => { + cy.createNewScriptEditor('Python'); + cy.wait(1000); + checkDefaultKernelSelection(); + checkDebuggerButtonEnabled(true); + cy.closeTab(-1); + openFile('untitled.py'); + cy.wait(1000); + checkDebuggerButtonEnabled(true); + }); + // TODO: Open new bug report for the failing test below // it('test for debugger button disabled for default kernel without debug support', () => { // cy.createNewScriptEditor('R'); @@ -76,3 +87,10 @@ const checkDebuggerButtonEnabled = (enabled: boolean): void => { ) .should('be.disabled'); }; + +const openFile = (fileName: string) => { + cy.findByRole('menuitem', { name: /file/i }).click(); + cy.findByText(/^open from path$/i).click({ force: true }); + cy.get('input#jp-dialog-input-id').type(`/${fileName}`); + cy.get('.p-Panel .jp-mod-accept').click(); +}; From 0d1bb19d85267eec46a34509fb50920d3e273b80 Mon Sep 17 00:00:00 2001 From: Karla Spuldaro Date: Mon, 17 Oct 2022 17:10:28 -0400 Subject: [PATCH 03/10] Typo --- tests/integration/scriptdebugger.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/integration/scriptdebugger.ts b/tests/integration/scriptdebugger.ts index 905c9545b..57de35eb0 100644 --- a/tests/integration/scriptdebugger.ts +++ b/tests/integration/scriptdebugger.ts @@ -36,7 +36,7 @@ describe('Script debugger tests', () => { checkDebuggerButtonEnabled(true); }); - it('test for debugger button state persistance on page reload', () => { + it('test for debugger button state persistence on page reload', () => { cy.createNewScriptEditor('Python'); cy.wait(1000); checkDefaultKernelSelection(); @@ -46,7 +46,7 @@ describe('Script debugger tests', () => { checkDebuggerButtonEnabled(true); }); - it('test for debugger button state persistance on reopening editor tab', () => { + it('test for debugger button state persistence on reopening editor tab', () => { cy.createNewScriptEditor('Python'); cy.wait(1000); checkDefaultKernelSelection(); From de69931efb20d16d0c8cfd322b4f4650eada4082 Mon Sep 17 00:00:00 2001 From: Karla Spuldaro Date: Mon, 17 Oct 2022 17:26:44 -0400 Subject: [PATCH 04/10] Add missing return type to new funtion --- tests/integration/scriptdebugger.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integration/scriptdebugger.ts b/tests/integration/scriptdebugger.ts index 57de35eb0..df835dc0d 100644 --- a/tests/integration/scriptdebugger.ts +++ b/tests/integration/scriptdebugger.ts @@ -88,7 +88,7 @@ const checkDebuggerButtonEnabled = (enabled: boolean): void => { .should('be.disabled'); }; -const openFile = (fileName: string) => { +const openFile = (fileName: string): void => { cy.findByRole('menuitem', { name: /file/i }).click(); cy.findByText(/^open from path$/i).click({ force: true }); cy.get('input#jp-dialog-input-id').type(`/${fileName}`); From 1edbd5e9d1a58d3b97f504904dee7e582b225ace Mon Sep 17 00:00:00 2001 From: Karla Spuldaro Date: Tue, 18 Oct 2022 11:36:06 -0400 Subject: [PATCH 05/10] Increase wait time between commands --- tests/integration/scriptdebugger.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/integration/scriptdebugger.ts b/tests/integration/scriptdebugger.ts index df835dc0d..e22f14063 100644 --- a/tests/integration/scriptdebugger.ts +++ b/tests/integration/scriptdebugger.ts @@ -31,29 +31,29 @@ describe('Script debugger tests', () => { it('test for debugger button to be enabled for default Python kernel', () => { cy.createNewScriptEditor('Python'); - cy.wait(1000); + cy.wait(5000); checkDefaultKernelSelection(); checkDebuggerButtonEnabled(true); }); it('test for debugger button state persistence on page reload', () => { cy.createNewScriptEditor('Python'); - cy.wait(1000); + cy.wait(5000); checkDefaultKernelSelection(); checkDebuggerButtonEnabled(true); cy.reload(); - cy.wait(1000); + cy.wait(5000); checkDebuggerButtonEnabled(true); }); it('test for debugger button state persistence on reopening editor tab', () => { cy.createNewScriptEditor('Python'); - cy.wait(1000); + cy.wait(5000); checkDefaultKernelSelection(); checkDebuggerButtonEnabled(true); cy.closeTab(-1); openFile('untitled.py'); - cy.wait(1000); + cy.wait(5000); checkDebuggerButtonEnabled(true); }); From f6e528668371a2d9fe6cbd7f14db1d04ac2b6875 Mon Sep 17 00:00:00 2001 From: Karla Spuldaro Date: Wed, 26 Oct 2022 13:23:25 -0400 Subject: [PATCH 06/10] Tests refactoring --- tests/integration/scriptdebugger.ts | 107 ++++++++++++++++------------ 1 file changed, 62 insertions(+), 45 deletions(-) diff --git a/tests/integration/scriptdebugger.ts b/tests/integration/scriptdebugger.ts index e22f14063..dfbc68386 100644 --- a/tests/integration/scriptdebugger.ts +++ b/tests/integration/scriptdebugger.ts @@ -14,9 +14,12 @@ * limitations under the License. */ +const TESTFILE = 'helloworld.py'; + describe('Script debugger tests', () => { before(() => { cy.resetJupyterLab(); + cy.bootstrapFile(TESTFILE); }); afterEach(() => { @@ -24,48 +27,57 @@ describe('Script debugger tests', () => { }); after(() => { - // delete files created for testing - cy.deleteFile('untitled*.py'); - cy.deleteFile('untitled*.r'); + cy.deleteFile(TESTFILE); }); - it('test for debugger button to be enabled for default Python kernel', () => { - cy.createNewScriptEditor('Python'); - cy.wait(5000); - checkDefaultKernelSelection(); - checkDebuggerButtonEnabled(true); - }); + it( + 'test for debugger button to be enabled for default Python kernel', + { defaultCommandTimeout: 10000 }, + () => { + openFile(TESTFILE); + checkDefaultKernelSelection(); + checkDebuggerButtonEnabled(true); + } + ); - it('test for debugger button state persistence on page reload', () => { - cy.createNewScriptEditor('Python'); - cy.wait(5000); - checkDefaultKernelSelection(); - checkDebuggerButtonEnabled(true); - cy.reload(); - cy.wait(5000); - checkDebuggerButtonEnabled(true); - }); + it( + 'test for debugger button state persistence on page reload', + { defaultCommandTimeout: 10000 }, + () => { + openFile(TESTFILE); + checkDefaultKernelSelection(); + checkDebuggerButtonEnabled(true); + cy.reload(); + checkDebuggerButtonEnabled(true); + } + ); - it('test for debugger button state persistence on reopening editor tab', () => { - cy.createNewScriptEditor('Python'); - cy.wait(5000); - checkDefaultKernelSelection(); - checkDebuggerButtonEnabled(true); - cy.closeTab(-1); - openFile('untitled.py'); - cy.wait(5000); - checkDebuggerButtonEnabled(true); - }); + it( + 'test for debugger button state persistence on reopening editor tab', + { defaultCommandTimeout: 30000 }, + () => { + openFile(TESTFILE); + checkDefaultKernelSelection(); + checkDebuggerButtonEnabled(true); + cy.closeTab(-1); + // Reopen editor + openFile(TESTFILE); + checkDebuggerButtonEnabled(true); + } + ); - // TODO: Open new bug report for the failing test below - // it('test for debugger button disabled for default kernel without debug support', () => { - // cy.createNewScriptEditor('R'); - // cy.wait(1000); - // cy.get( - // '.elyra-ScriptEditor .jp-Toolbar select > option[value*=python]' - // ).should('not.exist'); - // checkDebuggerButtonEnabled(false); // No debug button rendered on first load - // }); + it( + 'test for debugger button disabled for default kernel without debug support', + { defaultCommandTimeout: 10000 }, + () => { + cy.createNewScriptEditor('R'); + cy.get( + '.elyra-ScriptEditor .jp-Toolbar select > option[value*=python]' + ).should('not.exist'); + checkDebuggerButtonEnabled(false); + cy.deleteFile('untitled.r'); + } + ); }); // ------------------------------ @@ -77,15 +89,20 @@ const checkDefaultKernelSelection = (): void => { }; const checkDebuggerButtonEnabled = (enabled: boolean): void => { + const buttonElem = cy.get( + 'button.jp-DebuggerBugButton[title="Enable Debugger"]' + ); + enabled - ? cy - .get('button.jp-DebuggerBugButton[title="Enable Debugger"]') - .should('not.be.disabled') - : cy - .get( - 'button.jp-DebuggerBugButton[title="Select a kernel that supports debugging to enable debugger"]' - ) - .should('be.disabled'); + ? buttonElem.should('not.be.disabled') + : buttonElem.should('not.exist'); + + // TODO: should use test below after merged PR #2977 + // : cy + // .get( + // 'button.jp-DebuggerBugButton[title="Select a kernel that supports debugging to enable debugger"]' + // ) + // .should('be.disabled'); }; const openFile = (fileName: string): void => { From cb4db98e06256d16c3dd3a8c13f2a1cf4c236eed Mon Sep 17 00:00:00 2001 From: Karla Spuldaro Date: Thu, 27 Oct 2022 15:38:44 -0400 Subject: [PATCH 07/10] Comment out persistence tests --- tests/integration/scriptdebugger.ts | 60 +++++++++++++---------------- 1 file changed, 27 insertions(+), 33 deletions(-) diff --git a/tests/integration/scriptdebugger.ts b/tests/integration/scriptdebugger.ts index dfbc68386..e924dafb9 100644 --- a/tests/integration/scriptdebugger.ts +++ b/tests/integration/scriptdebugger.ts @@ -15,6 +15,7 @@ */ const TESTFILE = 'helloworld.py'; +const TIMEOUT = 10000; describe('Script debugger tests', () => { before(() => { @@ -32,7 +33,7 @@ describe('Script debugger tests', () => { it( 'test for debugger button to be enabled for default Python kernel', - { defaultCommandTimeout: 10000 }, + { defaultCommandTimeout: TIMEOUT }, () => { openFile(TESTFILE); checkDefaultKernelSelection(); @@ -40,35 +41,35 @@ describe('Script debugger tests', () => { } ); - it( - 'test for debugger button state persistence on page reload', - { defaultCommandTimeout: 10000 }, - () => { - openFile(TESTFILE); - checkDefaultKernelSelection(); - checkDebuggerButtonEnabled(true); - cy.reload(); - checkDebuggerButtonEnabled(true); - } - ); + // it( + // 'test for debugger button state persistence on page reload', + // { defaultCommandTimeout: 10000 }, + // () => { + // openFile(TESTFILE); + // checkDefaultKernelSelection(); + // checkDebuggerButtonEnabled(true); + // cy.reload(); + // checkDebuggerButtonEnabled(true); + // } + // ); - it( - 'test for debugger button state persistence on reopening editor tab', - { defaultCommandTimeout: 30000 }, - () => { - openFile(TESTFILE); - checkDefaultKernelSelection(); - checkDebuggerButtonEnabled(true); - cy.closeTab(-1); - // Reopen editor - openFile(TESTFILE); - checkDebuggerButtonEnabled(true); - } - ); + // it( + // 'test for debugger button state persistence on reopening editor tab', + // { defaultCommandTimeout: 30000 }, + // () => { + // openFile(TESTFILE); + // checkDefaultKernelSelection(); + // checkDebuggerButtonEnabled(true); + // cy.closeTab(-1); + // // Reopen editor + // openFile(TESTFILE); + // checkDebuggerButtonEnabled(true); + // } + // ); it( 'test for debugger button disabled for default kernel without debug support', - { defaultCommandTimeout: 10000 }, + { defaultCommandTimeout: TIMEOUT }, () => { cy.createNewScriptEditor('R'); cy.get( @@ -96,13 +97,6 @@ const checkDebuggerButtonEnabled = (enabled: boolean): void => { enabled ? buttonElem.should('not.be.disabled') : buttonElem.should('not.exist'); - - // TODO: should use test below after merged PR #2977 - // : cy - // .get( - // 'button.jp-DebuggerBugButton[title="Select a kernel that supports debugging to enable debugger"]' - // ) - // .should('be.disabled'); }; const openFile = (fileName: string): void => { From d1ce1da26472e5b6346a338c851f251e6d5b5135 Mon Sep 17 00:00:00 2001 From: Karla Spuldaro Date: Fri, 28 Oct 2022 13:54:21 -0400 Subject: [PATCH 08/10] Rename test file to change execution order --- tests/integration/{scriptdebugger.ts => 01-scriptdebugger.ts} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename tests/integration/{scriptdebugger.ts => 01-scriptdebugger.ts} (99%) diff --git a/tests/integration/scriptdebugger.ts b/tests/integration/01-scriptdebugger.ts similarity index 99% rename from tests/integration/scriptdebugger.ts rename to tests/integration/01-scriptdebugger.ts index e924dafb9..9e7b975a3 100644 --- a/tests/integration/scriptdebugger.ts +++ b/tests/integration/01-scriptdebugger.ts @@ -15,7 +15,7 @@ */ const TESTFILE = 'helloworld.py'; -const TIMEOUT = 10000; +const TIMEOUT = 50000; describe('Script debugger tests', () => { before(() => { From 7af11593d5d20960af0cb57d69b3dcdb00c95f89 Mon Sep 17 00:00:00 2001 From: Karla Spuldaro Date: Fri, 28 Oct 2022 14:52:36 -0400 Subject: [PATCH 09/10] Uncomment test for page reload --- tests/integration/01-scriptdebugger.ts | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/tests/integration/01-scriptdebugger.ts b/tests/integration/01-scriptdebugger.ts index 9e7b975a3..44a96b854 100644 --- a/tests/integration/01-scriptdebugger.ts +++ b/tests/integration/01-scriptdebugger.ts @@ -41,17 +41,17 @@ describe('Script debugger tests', () => { } ); - // it( - // 'test for debugger button state persistence on page reload', - // { defaultCommandTimeout: 10000 }, - // () => { - // openFile(TESTFILE); - // checkDefaultKernelSelection(); - // checkDebuggerButtonEnabled(true); - // cy.reload(); - // checkDebuggerButtonEnabled(true); - // } - // ); + it( + 'test for debugger button state persistence on page reload', + { defaultCommandTimeout: 10000 }, + () => { + openFile(TESTFILE); + checkDefaultKernelSelection(); + checkDebuggerButtonEnabled(true); + cy.reload(); + checkDebuggerButtonEnabled(true); + } + ); // it( // 'test for debugger button state persistence on reopening editor tab', From 56d7c12563bf38ac94fb19abd61503b00783f487 Mon Sep 17 00:00:00 2001 From: Karla Spuldaro Date: Fri, 28 Oct 2022 15:18:46 -0400 Subject: [PATCH 10/10] Uncomment test for reopening editor tab --- tests/integration/01-scriptdebugger.ts | 28 +++++++++++++------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/tests/integration/01-scriptdebugger.ts b/tests/integration/01-scriptdebugger.ts index 44a96b854..1051af390 100644 --- a/tests/integration/01-scriptdebugger.ts +++ b/tests/integration/01-scriptdebugger.ts @@ -43,7 +43,7 @@ describe('Script debugger tests', () => { it( 'test for debugger button state persistence on page reload', - { defaultCommandTimeout: 10000 }, + { defaultCommandTimeout: TIMEOUT }, () => { openFile(TESTFILE); checkDefaultKernelSelection(); @@ -53,19 +53,19 @@ describe('Script debugger tests', () => { } ); - // it( - // 'test for debugger button state persistence on reopening editor tab', - // { defaultCommandTimeout: 30000 }, - // () => { - // openFile(TESTFILE); - // checkDefaultKernelSelection(); - // checkDebuggerButtonEnabled(true); - // cy.closeTab(-1); - // // Reopen editor - // openFile(TESTFILE); - // checkDebuggerButtonEnabled(true); - // } - // ); + it( + 'test for debugger button state persistence on reopening editor tab', + { defaultCommandTimeout: TIMEOUT }, + () => { + openFile(TESTFILE); + checkDefaultKernelSelection(); + checkDebuggerButtonEnabled(true); + cy.closeTab(-1); + // Reopen editor + openFile(TESTFILE); + checkDebuggerButtonEnabled(true); + } + ); it( 'test for debugger button disabled for default kernel without debug support',