| <!DOCTYPE html> |
| <!-- |
| Copyright (c) 2013 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. |
| --> |
| |
| <link rel="import" href="/base/task.html"> |
| <link rel="import" href="/core/test_utils.html"> |
| <link rel="import" href="/extras/importer/trace_event_importer.html"> |
| <link rel="import" href="/core/timeline_view.html"> |
| |
| <script> |
| 'use strict'; |
| |
| tr.b.unittest.testSuite(function() { |
| var newSliceEx = tr.c.test_utils.newSliceEx; |
| |
| var Selection = tr.c.Selection; |
| var SelectionState = tr.model.SelectionState; |
| var Task = tr.b.Task; |
| |
| function newSimpleFakeTimelineView() { |
| var m = tr.c.test_utils.newModel(function(m) { |
| m.p1 = m.getOrCreateProcess(1); |
| m.t2 = m.p1.getOrCreateThread(2); |
| |
| m.sA = m.t2.sliceGroup.pushSlice( |
| newSliceEx({title: 'a', start: 0, end: 5})); |
| m.sB = m.t2.sliceGroup.pushSlice( |
| newSliceEx({title: 'b', start: 10, end: 15})); |
| m.sC = m.t2.sliceGroup.pushSlice( |
| newSliceEx({title: 'c', start: 20, end: 20})); |
| }); |
| |
| // Fake timeline view. So fake its ... just wow. |
| var timelineView = { |
| model: m |
| }; |
| return timelineView; |
| } |
| |
| function doesCauseChangeToFire(selectionController, cb, opt_this) { |
| var didFire = false; |
| function didFireCb() { |
| didFire = true; |
| }; |
| selectionController.addEventListener('change', didFireCb); |
| cb.call(opt_this); |
| selectionController.removeEventListener('change', didFireCb); |
| return didFire; |
| } |
| |
| test('simpleStateChanges', function() { |
| var timelineView = newSimpleFakeTimelineView(); |
| var selectionController = new tr.c.SelectionController(timelineView); |
| var m = timelineView.model; |
| |
| // Setting causes change. |
| var bs = new tr.c.BrushingState(); |
| bs.selection = new Selection([m.sA]); |
| assert.isTrue(doesCauseChangeToFire( |
| selectionController, |
| function() { |
| selectionController.currentBrushingState = bs; |
| })); |
| assert.isTrue(bs.isAppliedToModel); |
| |
| // Setting value equivalent doesn't cause change event. |
| var bs2 = bs.clone(); |
| assert.isFalse(doesCauseChangeToFire( |
| selectionController, |
| function() { |
| selectionController.currentBrushingState = bs2; |
| })); |
| assert.equal(selectionController.currentBrushingState, bs2); |
| assert.isTrue(selectionController.currentBrushingState.isAppliedToModel); |
| |
| // Setting to something different unapplies the old bs. |
| var bs3 = new tr.c.BrushingState(); |
| bs3.findMatches = new Selection([m.sA, m.sB]); |
| selectionController.currentBrushingState = bs3; |
| assert.isTrue(bs3.isAppliedToModel); |
| assert.isFalse(bs2.isAppliedToModel); |
| }); |
| |
| }); |
| </script> |