| // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'dart:html'; |
| import 'package:test/test.dart'; |
| import 'package:observatory/models.dart' as M; |
| import 'package:observatory/src/elements/stack_trace_tree_config.dart'; |
| |
| main() { |
| StackTraceTreeConfigElement.tag.ensureRegistration(); |
| |
| group('instantiation', () { |
| test('default', () { |
| final e = new StackTraceTreeConfigElement(); |
| expect(e, isNotNull, reason: 'element correctly created'); |
| expect(e.showMode, isTrue); |
| expect(e.showDirection, isTrue); |
| expect(e.showFilter, isTrue); |
| expect(e.filter, equals('')); |
| expect(e.mode, equals(ProfileTreeMode.function)); |
| expect(e.direction, equals(M.ProfileTreeDirection.exclusive)); |
| }); |
| test('showMode', () { |
| final e = new StackTraceTreeConfigElement(showMode: false); |
| expect(e, isNotNull, reason: 'element correctly created'); |
| expect(e.showMode, isFalse); |
| expect(e.showDirection, isTrue); |
| expect(e.showFilter, isTrue); |
| expect(e.filter, equals('')); |
| expect(e.mode, equals(ProfileTreeMode.function)); |
| expect(e.direction, equals(M.ProfileTreeDirection.exclusive)); |
| }); |
| test('showDirection', () { |
| final e = new StackTraceTreeConfigElement(showDirection: false); |
| expect(e, isNotNull, reason: 'element correctly created'); |
| expect(e.showMode, isTrue); |
| expect(e.showDirection, isFalse); |
| expect(e.showFilter, isTrue); |
| expect(e.filter, equals('')); |
| expect(e.mode, equals(ProfileTreeMode.function)); |
| expect(e.direction, equals(M.ProfileTreeDirection.exclusive)); |
| }); |
| test('showFilter', () { |
| final e = new StackTraceTreeConfigElement(showFilter: false); |
| expect(e, isNotNull, reason: 'element correctly created'); |
| expect(e.showMode, isTrue); |
| expect(e.showDirection, isTrue); |
| expect(e.showFilter, isFalse); |
| expect(e.filter, equals('')); |
| expect(e.mode, equals(ProfileTreeMode.function)); |
| expect(e.direction, equals(M.ProfileTreeDirection.exclusive)); |
| }); |
| test('filter', () { |
| final filter = 'filter-string'; |
| final e = new StackTraceTreeConfigElement(filter: filter); |
| expect(e, isNotNull, reason: 'element correctly created'); |
| expect(e.showMode, isTrue); |
| expect(e.showDirection, isTrue); |
| expect(e.showFilter, isTrue); |
| expect(e.filter, equals(filter)); |
| expect(e.mode, equals(ProfileTreeMode.function)); |
| expect(e.direction, equals(M.ProfileTreeDirection.exclusive)); |
| }); |
| test('mode', () { |
| final e = new StackTraceTreeConfigElement(mode: ProfileTreeMode.code); |
| expect(e, isNotNull, reason: 'element correctly created'); |
| expect(e.showMode, isTrue); |
| expect(e.showDirection, isTrue); |
| expect(e.showFilter, isTrue); |
| expect(e.filter, equals('')); |
| expect(e.mode, equals(ProfileTreeMode.code)); |
| expect(e.direction, equals(M.ProfileTreeDirection.exclusive)); |
| }); |
| test('default', () { |
| final e = new StackTraceTreeConfigElement( |
| direction: M.ProfileTreeDirection.inclusive); |
| expect(e, isNotNull, reason: 'element correctly created'); |
| expect(e.showMode, isTrue); |
| expect(e.showDirection, isTrue); |
| expect(e.showFilter, isTrue); |
| expect(e.filter, equals('')); |
| expect(e.mode, equals(ProfileTreeMode.function)); |
| expect(e.direction, equals(M.ProfileTreeDirection.inclusive)); |
| }); |
| }); |
| group('elements', () { |
| test('created after attachment', () async { |
| final e = new StackTraceTreeConfigElement(); |
| document.body.append(e); |
| await e.onRendered.first; |
| expect(e.children.length, isNonZero, reason: 'has elements'); |
| e.remove(); |
| await e.onRendered.first; |
| expect(e.children.length, isZero, reason: 'is empty'); |
| }); |
| test('react to mode change', () async { |
| final e = new StackTraceTreeConfigElement(); |
| document.body.append(e); |
| await e.onRendered.first; |
| expect(e.mode, equals(ProfileTreeMode.function)); |
| e.mode = ProfileTreeMode.code; |
| await e.onRendered.first; |
| expect(e.mode, equals(ProfileTreeMode.code)); |
| e.remove(); |
| await e.onRendered.first; |
| expect(e.children.length, isZero, reason: 'is empty'); |
| }); |
| test('react to direction change', () async { |
| final e = new StackTraceTreeConfigElement(); |
| document.body.append(e); |
| await e.onRendered.first; |
| expect(e.direction, equals(M.ProfileTreeDirection.exclusive)); |
| e.direction = M.ProfileTreeDirection.inclusive; |
| await e.onRendered.first; |
| expect(e.direction, equals(M.ProfileTreeDirection.inclusive)); |
| e.remove(); |
| await e.onRendered.first; |
| expect(e.children.length, isZero, reason: 'is empty'); |
| }); |
| test('react to filter change', () async { |
| final filter = 'filter-string'; |
| final e = new StackTraceTreeConfigElement(); |
| document.body.append(e); |
| await e.onRendered.first; |
| expect(e.filter, equals('')); |
| e.filter = filter; |
| await e.onRendered.first; |
| expect(e.filter, equals(filter)); |
| e.remove(); |
| await e.onRendered.first; |
| expect(e.children.length, isZero, reason: 'is empty'); |
| }); |
| }); |
| group('events', () { |
| test('onModeChange', () async { |
| final e = new StackTraceTreeConfigElement(); |
| document.body.append(e); |
| await e.onRendered.first; |
| expect(e.mode, equals(ProfileTreeMode.function)); |
| e.onModeChange.listen(expectAsync1((_) { |
| expect(e.mode, equals(ProfileTreeMode.code)); |
| }, count: 1)); |
| final select = (e.querySelector('.mode-select') as SelectElement); |
| select.selectedIndex = select.options.indexOf((select.options.toSet() |
| ..removeAll(select.selectedOptions)) |
| .toList() |
| .first); |
| select.dispatchEvent(new Event("change")); |
| e.remove(); |
| await e.onRendered.first; |
| }); |
| test('onDirectionChange', () async { |
| final e = new StackTraceTreeConfigElement(); |
| document.body.append(e); |
| await e.onRendered.first; |
| expect(e.direction, equals(M.ProfileTreeDirection.exclusive)); |
| e.onDirectionChange.listen(expectAsync1((_) { |
| expect(e.direction, equals(M.ProfileTreeDirection.inclusive)); |
| }, count: 1)); |
| final select = (e.querySelector('.direction-select') as SelectElement); |
| select.selectedIndex = select.options.indexOf((select.options.toSet() |
| ..removeAll(select.selectedOptions)) |
| .toList() |
| .first); |
| select.dispatchEvent(new Event("change")); |
| e.remove(); |
| await e.onRendered.first; |
| }); |
| test('onFilterChange', () async { |
| final e = new StackTraceTreeConfigElement(); |
| document.body.append(e); |
| await e.onRendered.first; |
| expect(e.direction, equals(M.ProfileTreeDirection.exclusive)); |
| e.onFilterChange.listen(expectAsync1((_) { |
| expect(e.filter, equals('value')); |
| }, count: 1)); |
| var input = (e.querySelector('input') as TextInputElement); |
| input.value = 'value'; |
| input.dispatchEvent(new Event("change")); |
| e.remove(); |
| await e.onRendered.first; |
| }); |
| }); |
| } |