blob: 61fa26c9dd41346568fa5c575d0334a73d330f64 [file] [log] [blame]
// Copyright 2023 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:devtools_extensions/api.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('$DevToolsExtensionEvent', () {
test('parse', () {
var event = DevToolsExtensionEvent.parse({
'type': 'ping',
'data': {'foo': 'bar'},
});
expect(event.type, DevToolsExtensionEventType.ping);
expect(event.data, {'foo': 'bar'});
event = DevToolsExtensionEvent.parse({
'type': 'pong',
'data': {'baz': 'bob'},
});
expect(event.type, DevToolsExtensionEventType.pong);
expect(event.data, {'baz': 'bob'});
event = DevToolsExtensionEvent.parse({
'type': 'idk',
});
expect(event.type, DevToolsExtensionEventType.unknown);
expect(event.data, isNull);
});
test('tryParse', () {
var event = DevToolsExtensionEvent.tryParse({
'type': 'ping',
'data': {'foo': 'bar'},
});
expect(event, isNotNull);
event = DevToolsExtensionEvent.tryParse('bad input');
expect(event, isNull);
event = DevToolsExtensionEvent.tryParse({'more', 'bad', 'input'});
expect(event, isNull);
event = DevToolsExtensionEvent.tryParse({1: 'bad', 2: 'input'});
expect(event, isNull);
});
test('toJson', () {
var event = DevToolsExtensionEvent(DevToolsExtensionEventType.ping);
expect(event.toJson(), {'type': 'ping'});
event = DevToolsExtensionEvent(
DevToolsExtensionEventType.pong,
data: {'foo': 'bar'},
);
expect(event.toJson(), {
'type': 'pong',
'data': {'foo': 'bar'},
});
event = DevToolsExtensionEvent(
DevToolsExtensionEventType.unknown,
data: {'foo': 'bar'},
);
expect(event.toJson(), {
'type': 'unknown',
'data': {'foo': 'bar'},
});
});
});
group('$DevToolsExtensionEventType', () {
test('parses for expected values', () {
expect(
DevToolsExtensionEventType.from('ping'),
DevToolsExtensionEventType.ping,
);
expect(
DevToolsExtensionEventType.from('pong'),
DevToolsExtensionEventType.pong,
);
expect(
DevToolsExtensionEventType.from('showNotification'),
DevToolsExtensionEventType.showNotification,
);
expect(
DevToolsExtensionEventType.from('showBannerMessage'),
DevToolsExtensionEventType.showBannerMessage,
);
expect(
DevToolsExtensionEventType.from('vmServiceConnection'),
DevToolsExtensionEventType.vmServiceConnection,
);
});
test('parses for unexpected values', () {
expect(
DevToolsExtensionEventType.from('PING'),
DevToolsExtensionEventType.unknown,
);
expect(
DevToolsExtensionEventType.from('pongg'),
DevToolsExtensionEventType.unknown,
);
});
});
group('$ShowNotificationExtensionEvent', () {
test('constructs for expected values', () {
final event = DevToolsExtensionEvent.parse({
'type': 'showNotification',
'data': {
'message': 'foo message',
},
});
final showNotificationEvent = ShowNotificationExtensionEvent.from(event);
expect(showNotificationEvent.message, 'foo message');
});
test('throws for unexpected values', () {
final event1 = DevToolsExtensionEvent.parse({
'type': 'showNotification',
'data': {
// Missing required fields.
},
});
expect(
() {
ShowNotificationExtensionEvent.from(event1);
},
throwsFormatException,
);
final event2 = DevToolsExtensionEvent.parse({
'type': 'showNotification',
'data': {
// Bad key.
'msg': 'foo message',
},
});
expect(
() {
ShowNotificationExtensionEvent.from(event2);
},
throwsFormatException,
);
final event3 = DevToolsExtensionEvent.parse({
'type': 'showNotification',
'data': {
// Bad value.
'message': false,
},
});
expect(
() {
ShowNotificationExtensionEvent.from(event3);
},
throwsFormatException,
);
final event4 = DevToolsExtensionEvent.parse({
// Wrong type.
'type': 'showBannerMessage',
'data': {
'message': 'foo message',
},
});
expect(
() {
ShowNotificationExtensionEvent.from(event4);
},
throwsAssertionError,
);
});
});
group('$ShowBannerMessageExtensionEvent', () {
test('constructs for expected values', () {
final event = DevToolsExtensionEvent.parse({
'type': 'showBannerMessage',
'data': {
'id': 'fooMessageId',
'message': 'foo message',
'bannerMessageType': 'warning',
'extensionName': 'foo_package',
},
});
final showBannerMessageEvent =
ShowBannerMessageExtensionEvent.from(event);
expect(showBannerMessageEvent.messageId, 'fooMessageId');
expect(showBannerMessageEvent.message, 'foo message');
expect(showBannerMessageEvent.bannerMessageType, 'warning');
expect(showBannerMessageEvent.extensionName, 'foo_package');
});
test('throws for unexpected values', () async {
final event1 = DevToolsExtensionEvent.parse({
'type': 'showBannerMessage',
'data': {
// Missing required fields.
'extensionName': 'foo_package',
},
});
expect(
() {
ShowBannerMessageExtensionEvent.from(event1);
},
throwsFormatException,
);
final event2 = DevToolsExtensionEvent.parse({
'type': 'showBannerMessage',
'data': {
// Bad keys.
'bad_key': 'fooMessageId',
'messages': 'foo message',
'bannerMessageTypeee': 'warning',
'extension_name': 'foo_package',
},
});
expect(
() {
ShowBannerMessageExtensionEvent.from(event2);
},
throwsFormatException,
);
final event3 = DevToolsExtensionEvent.parse({
'type': 'showBannerMessage',
'data': {
// Bad values.
'id': 1,
'message': 'foo message',
'bannerMessageType': 2.0,
'extensionName': 'foo_package',
},
});
expect(
() {
ShowBannerMessageExtensionEvent.from(event3);
},
throwsFormatException,
);
final event4 = DevToolsExtensionEvent.parse({
// Wrong type.
'type': 'showNotification',
'data': {
'id': 'fooMessageId',
'message': 'foo message',
'bannerMessageType': 'warning',
'extensionName': 'foo_package',
},
});
expect(
() {
ShowBannerMessageExtensionEvent.from(event4);
},
throwsAssertionError,
);
});
});
}