mirror of
https://github.com/coder/code-server.git
synced 2026-06-21 01:17:10 +02:00
Merge commit 'be3e8236086165e5e45a5a10783823874b3f3ebd' as 'lib/vscode'
This commit is contained in:
244
lib/vscode/src/vs/workbench/test/common/notifications.test.ts
Normal file
244
lib/vscode/src/vs/workbench/test/common/notifications.test.ts
Normal file
@@ -0,0 +1,244 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { NotificationsModel, NotificationViewItem, INotificationChangeEvent, NotificationChangeType, NotificationViewItemContentChangeKind, IStatusMessageChangeEvent, StatusMessageChangeType } from 'vs/workbench/common/notifications';
|
||||
import { Action } from 'vs/base/common/actions';
|
||||
import { INotification, Severity, NotificationsFilter } from 'vs/platform/notification/common/notification';
|
||||
import { createErrorWithActions } from 'vs/base/common/errorsWithActions';
|
||||
|
||||
suite('Notifications', () => {
|
||||
|
||||
test('Items', () => {
|
||||
|
||||
// Invalid
|
||||
assert.ok(!NotificationViewItem.create({ severity: Severity.Error, message: '' }));
|
||||
assert.ok(!NotificationViewItem.create({ severity: Severity.Error, message: null! }));
|
||||
|
||||
// Duplicates
|
||||
let item1 = NotificationViewItem.create({ severity: Severity.Error, message: 'Error Message' })!;
|
||||
let item2 = NotificationViewItem.create({ severity: Severity.Error, message: 'Error Message' })!;
|
||||
let item3 = NotificationViewItem.create({ severity: Severity.Info, message: 'Info Message' })!;
|
||||
let item4 = NotificationViewItem.create({ severity: Severity.Error, message: 'Error Message', source: 'Source' })!;
|
||||
let item5 = NotificationViewItem.create({ severity: Severity.Error, message: 'Error Message', actions: { primary: [new Action('id', 'label')] } })!;
|
||||
let item6 = NotificationViewItem.create({ severity: Severity.Error, message: 'Error Message', actions: { primary: [new Action('id', 'label')] }, progress: { infinite: true } })!;
|
||||
|
||||
assert.equal(item1.equals(item1), true);
|
||||
assert.equal(item2.equals(item2), true);
|
||||
assert.equal(item3.equals(item3), true);
|
||||
assert.equal(item4.equals(item4), true);
|
||||
assert.equal(item5.equals(item5), true);
|
||||
|
||||
assert.equal(item1.equals(item2), true);
|
||||
assert.equal(item1.equals(item3), false);
|
||||
assert.equal(item1.equals(item4), false);
|
||||
assert.equal(item1.equals(item5), false);
|
||||
|
||||
// Progress
|
||||
assert.equal(item1.hasProgress, false);
|
||||
assert.equal(item6.hasProgress, true);
|
||||
|
||||
// Message Box
|
||||
assert.equal(item5.canCollapse, false);
|
||||
assert.equal(item5.expanded, true);
|
||||
|
||||
// Events
|
||||
let called = 0;
|
||||
item1.onDidChangeExpansion(() => {
|
||||
called++;
|
||||
});
|
||||
|
||||
item1.expand();
|
||||
item1.expand();
|
||||
item1.collapse();
|
||||
item1.collapse();
|
||||
|
||||
assert.equal(called, 2);
|
||||
|
||||
called = 0;
|
||||
item1.onDidChangeContent(e => {
|
||||
if (e.kind === NotificationViewItemContentChangeKind.PROGRESS) {
|
||||
called++;
|
||||
}
|
||||
});
|
||||
|
||||
item1.progress.infinite();
|
||||
item1.progress.done();
|
||||
|
||||
assert.equal(called, 2);
|
||||
|
||||
called = 0;
|
||||
item1.onDidChangeContent(e => {
|
||||
if (e.kind === NotificationViewItemContentChangeKind.MESSAGE) {
|
||||
called++;
|
||||
}
|
||||
});
|
||||
|
||||
item1.updateMessage('message update');
|
||||
|
||||
called = 0;
|
||||
item1.onDidChangeContent(e => {
|
||||
if (e.kind === NotificationViewItemContentChangeKind.SEVERITY) {
|
||||
called++;
|
||||
}
|
||||
});
|
||||
|
||||
item1.updateSeverity(Severity.Error);
|
||||
|
||||
called = 0;
|
||||
item1.onDidChangeContent(e => {
|
||||
if (e.kind === NotificationViewItemContentChangeKind.ACTIONS) {
|
||||
called++;
|
||||
}
|
||||
});
|
||||
|
||||
item1.updateActions({ primary: [new Action('id2', 'label')] });
|
||||
|
||||
assert.equal(called, 1);
|
||||
|
||||
called = 0;
|
||||
item1.onDidChangeVisibility(e => {
|
||||
called++;
|
||||
});
|
||||
|
||||
item1.updateVisibility(true);
|
||||
item1.updateVisibility(false);
|
||||
item1.updateVisibility(false);
|
||||
|
||||
assert.equal(called, 2);
|
||||
|
||||
called = 0;
|
||||
item1.onDidClose(() => {
|
||||
called++;
|
||||
});
|
||||
|
||||
item1.close();
|
||||
assert.equal(called, 1);
|
||||
|
||||
// Error with Action
|
||||
let item7 = NotificationViewItem.create({ severity: Severity.Error, message: createErrorWithActions('Hello Error', { actions: [new Action('id', 'label')] }) })!;
|
||||
assert.equal(item7.actions!.primary!.length, 1);
|
||||
|
||||
// Filter
|
||||
let item8 = NotificationViewItem.create({ severity: Severity.Error, message: 'Error Message' }, NotificationsFilter.SILENT)!;
|
||||
assert.equal(item8.silent, true);
|
||||
|
||||
let item9 = NotificationViewItem.create({ severity: Severity.Error, message: 'Error Message' }, NotificationsFilter.OFF)!;
|
||||
assert.equal(item9.silent, false);
|
||||
|
||||
let item10 = NotificationViewItem.create({ severity: Severity.Error, message: 'Error Message' }, NotificationsFilter.ERROR)!;
|
||||
assert.equal(item10.silent, false);
|
||||
|
||||
let item11 = NotificationViewItem.create({ severity: Severity.Warning, message: 'Error Message' }, NotificationsFilter.ERROR)!;
|
||||
assert.equal(item11.silent, true);
|
||||
});
|
||||
|
||||
test('Model', () => {
|
||||
const model = new NotificationsModel();
|
||||
|
||||
let lastNotificationEvent!: INotificationChangeEvent;
|
||||
model.onDidChangeNotification(e => {
|
||||
lastNotificationEvent = e;
|
||||
});
|
||||
|
||||
let lastStatusMessageEvent!: IStatusMessageChangeEvent;
|
||||
model.onDidChangeStatusMessage(e => {
|
||||
lastStatusMessageEvent = e;
|
||||
});
|
||||
|
||||
let item1: INotification = { severity: Severity.Error, message: 'Error Message', actions: { primary: [new Action('id', 'label')] } };
|
||||
let item2: INotification = { severity: Severity.Warning, message: 'Warning Message', source: 'Some Source' };
|
||||
let item2Duplicate: INotification = { severity: Severity.Warning, message: 'Warning Message', source: 'Some Source' };
|
||||
let item3: INotification = { severity: Severity.Info, message: 'Info Message' };
|
||||
|
||||
let item1Handle = model.addNotification(item1);
|
||||
assert.equal(lastNotificationEvent.item.severity, item1.severity);
|
||||
assert.equal(lastNotificationEvent.item.message.linkedText.toString(), item1.message);
|
||||
assert.equal(lastNotificationEvent.index, 0);
|
||||
assert.equal(lastNotificationEvent.kind, NotificationChangeType.ADD);
|
||||
|
||||
item1Handle.updateMessage('Error Message');
|
||||
assert.equal(lastNotificationEvent.kind, NotificationChangeType.CHANGE);
|
||||
assert.equal(lastNotificationEvent.detail, NotificationViewItemContentChangeKind.MESSAGE);
|
||||
|
||||
item1Handle.updateSeverity(Severity.Error);
|
||||
assert.equal(lastNotificationEvent.kind, NotificationChangeType.CHANGE);
|
||||
assert.equal(lastNotificationEvent.detail, NotificationViewItemContentChangeKind.SEVERITY);
|
||||
|
||||
item1Handle.updateActions({ primary: [], secondary: [] });
|
||||
assert.equal(lastNotificationEvent.kind, NotificationChangeType.CHANGE);
|
||||
assert.equal(lastNotificationEvent.detail, NotificationViewItemContentChangeKind.ACTIONS);
|
||||
|
||||
item1Handle.progress.infinite();
|
||||
assert.equal(lastNotificationEvent.kind, NotificationChangeType.CHANGE);
|
||||
assert.equal(lastNotificationEvent.detail, NotificationViewItemContentChangeKind.PROGRESS);
|
||||
|
||||
let item2Handle = model.addNotification(item2);
|
||||
assert.equal(lastNotificationEvent.item.severity, item2.severity);
|
||||
assert.equal(lastNotificationEvent.item.message.linkedText.toString(), item2.message);
|
||||
assert.equal(lastNotificationEvent.index, 0);
|
||||
assert.equal(lastNotificationEvent.kind, NotificationChangeType.ADD);
|
||||
|
||||
model.addNotification(item3);
|
||||
assert.equal(lastNotificationEvent.item.severity, item3.severity);
|
||||
assert.equal(lastNotificationEvent.item.message.linkedText.toString(), item3.message);
|
||||
assert.equal(lastNotificationEvent.index, 0);
|
||||
assert.equal(lastNotificationEvent.kind, NotificationChangeType.ADD);
|
||||
|
||||
assert.equal(model.notifications.length, 3);
|
||||
|
||||
let called = 0;
|
||||
item1Handle.onDidClose(() => {
|
||||
called++;
|
||||
});
|
||||
|
||||
item1Handle.close();
|
||||
assert.equal(called, 1);
|
||||
assert.equal(model.notifications.length, 2);
|
||||
assert.equal(lastNotificationEvent.item.severity, item1.severity);
|
||||
assert.equal(lastNotificationEvent.item.message.linkedText.toString(), item1.message);
|
||||
assert.equal(lastNotificationEvent.index, 2);
|
||||
assert.equal(lastNotificationEvent.kind, NotificationChangeType.REMOVE);
|
||||
|
||||
model.addNotification(item2Duplicate);
|
||||
assert.equal(model.notifications.length, 2);
|
||||
assert.equal(lastNotificationEvent.item.severity, item2Duplicate.severity);
|
||||
assert.equal(lastNotificationEvent.item.message.linkedText.toString(), item2Duplicate.message);
|
||||
assert.equal(lastNotificationEvent.index, 0);
|
||||
assert.equal(lastNotificationEvent.kind, NotificationChangeType.ADD);
|
||||
|
||||
item2Handle.close();
|
||||
assert.equal(model.notifications.length, 1);
|
||||
assert.equal(lastNotificationEvent.item.severity, item2Duplicate.severity);
|
||||
assert.equal(lastNotificationEvent.item.message.linkedText.toString(), item2Duplicate.message);
|
||||
assert.equal(lastNotificationEvent.index, 0);
|
||||
assert.equal(lastNotificationEvent.kind, NotificationChangeType.REMOVE);
|
||||
|
||||
model.notifications[0].expand();
|
||||
assert.equal(lastNotificationEvent.item.severity, item3.severity);
|
||||
assert.equal(lastNotificationEvent.item.message.linkedText.toString(), item3.message);
|
||||
assert.equal(lastNotificationEvent.index, 0);
|
||||
assert.equal(lastNotificationEvent.kind, NotificationChangeType.EXPAND_COLLAPSE);
|
||||
|
||||
const disposable = model.showStatusMessage('Hello World');
|
||||
assert.equal(model.statusMessage!.message, 'Hello World');
|
||||
assert.equal(lastStatusMessageEvent.item.message, model.statusMessage!.message);
|
||||
assert.equal(lastStatusMessageEvent.kind, StatusMessageChangeType.ADD);
|
||||
disposable.dispose();
|
||||
assert.ok(!model.statusMessage);
|
||||
assert.equal(lastStatusMessageEvent.kind, StatusMessageChangeType.REMOVE);
|
||||
|
||||
let disposable2 = model.showStatusMessage('Hello World 2');
|
||||
const disposable3 = model.showStatusMessage('Hello World 3');
|
||||
|
||||
assert.equal(model.statusMessage!.message, 'Hello World 3');
|
||||
|
||||
disposable2.dispose();
|
||||
assert.equal(model.statusMessage!.message, 'Hello World 3');
|
||||
|
||||
disposable3.dispose();
|
||||
assert.ok(!model.statusMessage);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user