166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Copyright (c) 2013 The Chromium Authors. All rights reserved. 266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Use of this source code is governed by a BSD-style license that can be 366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// found in the LICENSE file. 466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis'use strict'; 666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.test_utils'); 866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.find_control'); 966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.unittest.testSuite('tracing.find_control', function() { 1166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis /* 1266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * Just enough of the Timeline to support the tests below. 1366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis */ 1466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var FakeTimeline = ui.define('div'); 1566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis FakeTimeline.prototype = { 1766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis __proto__: HTMLDivElement.prototype, 1866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis decorate: function() { 2066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.addAllObjectsMatchingFilterToSelectionReturnValue = []; 2166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 2266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.selection = new tracing.Selection(); 2366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.keyHelp = '<keyHelp>'; 2466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 2566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // Put some simple UI in for testing purposes. 2666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var noteEl = document.createElement('div'); 2766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis noteEl.textContent = 'FakeTimeline:'; 2866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.appendChild(noteEl); 2966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 3066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.statusEl_ = document.createElement('div'); 3166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.appendChild(this.statusEl_); 3266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.refresh_(); 3366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }, 3466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 3566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis refresh_: function() { 3666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var status; 3766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis if (this.model) 3866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis status = 'model=set'; 3966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis else 4066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis status = 'model=undefined'; 4166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.statusEl_.textContent = status; 4266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }, 4366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 4466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis zoomToSelection: function() {}, 4566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 4666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis panToSelection: function() {}, 4766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 4866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis addAllObjectsMatchingFilterToSelection: function(filter, selection) { 4966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var n = this.addAllObjectsMatchingFilterToSelectionReturnValue.length; 5066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis for (var i = 0; i < n; i++) 5166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis selection.push_( 5266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.addAllObjectsMatchingFilterToSelectionReturnValue[i]); 5366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 5466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 5566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 5666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('instantiate', function() { 5766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var ctl = new tracing.FindControl(); 5866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var didFindPrevious = false; 5966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var didFindNext = false; 6066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ctl.controller = { 6166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis findNext: function() { 6266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis didFindNext = true; 6366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }, 6466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 6566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis findPrevious: function() { 6666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis didFindPrevious = true; 6766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }, 6866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 6966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis reset: function() {}, 7066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 7166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis filterHits: [], 7266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 7366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis currentHitIndex: 0 7466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 7566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 7666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.addHTMLOutput(ctl); 7766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 7866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ctl.querySelector('input').focus(); 7966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ctl.querySelector('input').blur(); 8066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 8166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ctl.querySelector('.find-previous').click(); 8266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertTrue(didFindPrevious); 8366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ctl.querySelector('.find-next').click(); 8466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertTrue(didFindNext); 8566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 8666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 8766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('findControllerNoTimeline', function() { 8866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var controller = new tracing.FindController(); 8966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.findNext(); 9066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.findPrevious(); 9166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 9266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 9366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('findControllerEmptyHit', function() { 9466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var timeline = new FakeTimeline(); 9566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var controller = new tracing.FindController(); 9666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.timeline = timeline; 9766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 9866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis timeline.selection = new tracing.Selection(); 9966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.findNext(); 10066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertArrayShallowEquals([], timeline.selection); 10166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.findPrevious(); 10266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertArrayShallowEquals([], timeline.selection); 10366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 10466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 10566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('findControllerOneHit', function() { 10666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var timeline = new FakeTimeline(); 10766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var controller = new tracing.FindController(); 10866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.timeline = timeline; 10966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 11066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis timeline.addAllObjectsMatchingFilterToSelectionReturnValue = [1]; 11166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.filterText = 'asdf'; 11266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 11366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.findNext(); 11466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertArrayShallowEquals([1], timeline.selection); 11566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.findNext(); 11666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertArrayShallowEquals([1], timeline.selection); 11766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.findPrevious(); 11866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertArrayShallowEquals([1], timeline.selection); 11966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 12066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 12166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('findControllerMultipleHits', function() { 12266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var timeline = new FakeTimeline(); 12366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var controller = new tracing.FindController(); 12466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.timeline = timeline; 12566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 12666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis timeline.addAllObjectsMatchingFilterToSelectionReturnValue = [1, 2, 3]; 12766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.filterText = 'asdf'; 12866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 12966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // Loop through hits then when we wrap, try moving backward. 13066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.findNext(); 13166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertArrayShallowEquals([1], timeline.selection); 13266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.findNext(); 13366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertArrayShallowEquals([2], timeline.selection); 13466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.findNext(); 13566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertArrayShallowEquals([3], timeline.selection); 13666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.findNext(); 13766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertArrayShallowEquals([1], timeline.selection); 13866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.findPrevious(); 13966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertArrayShallowEquals([3], timeline.selection); 14066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.findPrevious(); 14166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertArrayShallowEquals([2], timeline.selection); 14266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 14366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 14466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('findControllerChangeFilterAfterNext', function() { 14566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var timeline = new FakeTimeline(); 14666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var controller = new tracing.FindController(); 14766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.timeline = timeline; 14866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 14966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis timeline.addAllObjectsMatchingFilterToSelectionReturnValue = [1, 2, 3]; 15066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.filterText = 'asdf'; 15166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 15266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // Loop through hits then when we wrap, try moving backward. 15366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.findNext(); 15466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis timeline.addAllObjectsMatchingFilterToSelectionReturnValue = [4]; 15566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.filterText = 'asdfsf'; 15666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.findNext(); 15766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertArrayShallowEquals([4], timeline.selection); 15866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 15966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 16066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('findControllerSelectsAllItemsFirst', function() { 16166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var timeline = new FakeTimeline(); 16266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var controller = new tracing.FindController(); 16366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.timeline = timeline; 16466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 16566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis timeline.addAllObjectsMatchingFilterToSelectionReturnValue = [1, 2, 3]; 16666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.filterText = 'asdfsf'; 16766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertArrayShallowEquals([1, 2, 3], timeline.selection); 16866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.findNext(); 16966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertArrayShallowEquals([1], timeline.selection); 17066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.findNext(); 17166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertArrayShallowEquals([2], timeline.selection); 17266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 17366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 17466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('findControllerWithRealTimeline', function() { 17566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var model = new tracing.TraceModel(); 17666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var p1 = model.getOrCreateProcess(1); 17766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var t1 = p1.getOrCreateThread(1); 17866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis t1.sliceGroup.pushSlice(new tracing.trace_model.ThreadSlice( 17966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis '', 'a', 0, 1, {}, 3)); 18066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 18166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var timeline = new tracing.TimelineTrackView(); 18266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis timeline.model = model; 18366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 18466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var controller = new tracing.FindController(); 18566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.timeline = timeline; 18666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 18766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // Test find with no filterText. 18866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.findNext(); 18966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 19066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // Test find with filter txt. 19166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.filterText = 'a'; 19266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.findNext(); 19366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(1, timeline.selection.length); 19466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(t1.sliceGroup.slices[0], timeline.selection[0].slice); 19566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 19666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.filterText = 'xxx'; 19766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.findNext(); 19866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(0, timeline.selection.length); 19966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis controller.findNext(); 20066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(0, timeline.selection.length); 20166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 20266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis}); 203