From 9324ea610eeb333a5d5532e957da9849de469316 Mon Sep 17 00:00:00 2001 From: Nicolas Brichet Date: Wed, 5 Jul 2023 12:11:14 +0200 Subject: [PATCH] Add tests on trackable attribute --- .../widgets/tests/src/focustracker.spec.ts | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/packages/widgets/tests/src/focustracker.spec.ts b/packages/widgets/tests/src/focustracker.spec.ts index 702be459a..69f0524c5 100644 --- a/packages/widgets/tests/src/focustracker.spec.ts +++ b/packages/widgets/tests/src/focustracker.spec.ts @@ -109,6 +109,22 @@ describe('@lumino/widgets', () => { focusWidget(widget); expect(emitArgs).to.equal(null); }); + + it('should not be emitted when the focus widget is not tracked', () => { + let tracker = createTracker(); + let widget0 = createWidget(); + let widget1 = createWidget(); + widget1.focusTrackable = false; + tracker.add(widget0); + tracker.add(widget1); + focusWidget(widget0); + let emitArgs: FocusTracker.IChangedArgs | null = null; + tracker.currentChanged.connect((sender, args) => { + emitArgs = args; + }); + focusWidget(widget1); + expect(emitArgs).to.equal(null); + }); }); describe('#activeChanged', () => { @@ -143,6 +159,24 @@ describe('@lumino/widgets', () => { expect(emitArgs!.oldValue).to.equal(widget); expect(emitArgs!.newValue).to.equal(null); }); + + it('should be emitted even if the focus widget is not tracked', () => { + let tracker = createTracker(); + let widget0 = createWidget(); + let widget1 = createWidget(); + widget1.focusTrackable = false; + tracker.add(widget0); + tracker.add(widget1); + focusWidget(widget0); + let emitArgs: FocusTracker.IChangedArgs | null = null; + tracker.activeChanged.connect((sender, args) => { + emitArgs = args; + }); + focusWidget(widget1); + expect(emitArgs).to.not.equal(null); + expect(emitArgs!.oldValue).to.equal(widget0); + expect(emitArgs!.newValue).to.equal(null); + }); }); describe('#isDisposed', () => { @@ -185,6 +219,19 @@ describe('@lumino/widgets', () => { expect(tracker.currentWidget).to.equal(widget1); }); + it('should not be set to the non-trackable widget that gained focus', () => { + let tracker = createTracker(); + let widget0 = createWidget(); + let widget1 = createWidget(); + widget1.focusTrackable = false; + focusWidget(widget0); + tracker.add(widget0); + tracker.add(widget1); + expect(tracker.currentWidget).to.equal(widget0); + focusWidget(widget1); + expect(tracker.currentWidget).to.equal(widget0); + }); + it('should revert to the previous widget if the current widget is removed', () => { let tracker = createTracker(); let widget0 = createWidget(); @@ -208,6 +255,20 @@ describe('@lumino/widgets', () => { widget.dispose(); expect(tracker.currentWidget).to.equal(null); }); + + it('should be `null` if the current widget is disposed', () => { + let tracker = createTracker(); + expect(tracker.currentWidget).to.equal(null); + let widget0 = createWidget(); + let widget1 = createWidget(); + widget1.focusTrackable = false; + focusWidget(widget0); + tracker.add(widget0); + tracker.add(widget1); + expect(tracker.currentWidget).to.equal(widget0); + widget0.dispose(); + expect(tracker.currentWidget).to.equal(null); + }); }); describe('#activeWidget', () => { @@ -229,6 +290,18 @@ describe('@lumino/widgets', () => { expect(tracker.activeWidget).to.equal(null); }); + it('should be set to `null` when an non-trackable widget gain focus', () => { + let tracker = createTracker(); + let widget0 = createWidget(); + let widget1 = createWidget(); + widget1.focusTrackable = false; + focusWidget(widget0); + tracker.add(widget0); + expect(tracker.activeWidget).to.equal(widget0); + focusWidget(widget1); + expect(tracker.activeWidget).to.equal(null); + }); + it('should be set to the widget that gained focus', () => { let tracker = createTracker(); let widget0 = createWidget(); @@ -251,6 +324,20 @@ describe('@lumino/widgets', () => { widget.dispose(); expect(tracker.activeWidget).to.equal(null); }); + + it('should be `null` if the active widget is disposed', () => { + let tracker = createTracker(); + expect(tracker.currentWidget).to.equal(null); + let widget0 = createWidget(); + let widget1 = createWidget(); + widget1.focusTrackable = false; + focusWidget(widget0); + tracker.add(widget0); + tracker.add(widget1); + expect(tracker.activeWidget).to.equal(widget0); + widget0.dispose(); + expect(tracker.activeWidget).to.equal(null); + }); }); describe('#widgets', () => { @@ -349,6 +436,14 @@ describe('@lumino/widgets', () => { tracker.add(widget); expect(tracker.has(widget)).to.equal(true); }); + + it('should be a no-op if the widget is not trackable', () => { + let tracker = createTracker(); + let widget = createWidget(); + widget.focusTrackable = false; + tracker.add(widget); + expect(tracker.has(widget)).to.equal(false); + }); }); describe('#remove()', () => {