blob: 0c366a089bdb81b9325c87eb325d66943e36248a [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright 2015 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="/extras/tquery/tquery.html">
<polymer-element name='tv-e-tquery-fake-timeline'>
<script>
'use strict';
Polymer({
ready: function() {
this.allObjects = [];
},
addAllObjectsMatchingFilterToSelectionAsTask: function(filter, selection) {
return new tv.b.Task(function() {
var n = this.allObjects.length;
for (var i = 0; i < n; i++) {
this.addSubtreeToSelection_(selection, this.allObjects[i]);
}
}, this);
},
addSubtreeToSelection_: function(selection, event) {
selection.push(event);
if (event.subSlices) {
for (var i = 0; i < event.subSlices.length; i++) {
this.addSubtreeToSelection_(selection, event.subSlices[i]);
}
}
},
setHighlightAndClearSelection: function(highlight) {
this.highlight = highlight;
}
});
</script>
</polymer-element>
<script>
'use strict';
tv.b.unittest.testSuite(function() {
function createFakeTimeline_(sliceCount) {
var timeline = document.createElement('tv-e-tquery-fake-timeline');
timeline.allObjects = [];
for (var i = 0; i < sliceCount; i++) {
timeline.allObjects.push({guid: i});
}
return timeline;
}
function createFakeTimelineWithEvents_(events) {
var timeline = document.createElement('tv-e-tquery-fake-timeline');
timeline.allObjects = events;
return timeline;
}
test('tqueryAsyncSelection', function() {
var tquery = document.createElement('tv-e-tquery');
var timeline = createFakeTimeline_(3);
tquery.onTimelineChanged(timeline);
var result = tquery.show();
tv.b.Task.RunSynchronously(result);
assert.equal(timeline.highlight.length, 3);
});
test('tquerySyncSelection', function() {
var tquery = document.createElement('tv-e-tquery');
var timeline = createFakeTimeline_(3);
tquery.onTimelineChanged(timeline);
assert.equal(tquery.selection.length, 3);
// Selection should get reset when the timeline changes.
tquery.onTimelineChanged(createFakeTimeline_(5));
assert.equal(tquery.selection.length, 5);
});
test('tqueryPassThroughFiltering', function() {
var tquery = document.createElement('tv-e-tquery');
var timeline = createFakeTimeline_(3);
tquery.onTimelineChanged(timeline);
var result = tquery.filter().filter().show();
tv.b.Task.RunSynchronously(result);
assert.equal(timeline.highlight.length, 3);
});
test('tqueryFilterHasTitle', function() {
var tquery = document.createElement('tv-e-tquery');
var hasTitle = document.createElement(
'tv-e-tquery-filter-has-title').scriptValue;
var timeline = createFakeTimelineWithEvents_([
{guid: 1, title: 'a'},
{guid: 2, title: 'b'},
{guid: 3, title: 'c'}
]);
tquery.onTimelineChanged(timeline);
var result = tquery.filter(hasTitle('a')).selection;
assert.equal(result.length, 1);
assert.equal(result[0].guid, 1);
var result = tquery.filter('b').selection;
assert.equal(result.length, 1);
assert.equal(result[0].guid, 2);
var result = tquery.filter(/^c$/).selection;
assert.equal(result.length, 1);
assert.equal(result[0].guid, 3);
});
test('tqueryFilterHasAncestor', function() {
var tquery = document.createElement('tv-e-tquery');
var hasAncestor = document.createElement(
'tv-e-tquery-filter-has-ancestor').scriptValue;
var timeline = createFakeTimelineWithEvents_([
{guid: 1, title: 'a'},
{guid: 2, title: 'b', subSlices: [{guid: 4}]},
{guid: 3, title: 'c'}
]);
tquery.onTimelineChanged(timeline);
var result = tquery.filter(hasAncestor('b')).selection;
assert.equal(result.length, 1);
assert.equal(result[0].guid, 4);
var result = tquery.filter(hasAncestor()).selection;
assert.equal(result.length, 1);
assert.equal(result[0].guid, 4);
var result = tquery.filter(hasAncestor('a')).selection;
assert.equal(result.length, 0);
});
test('tqueryFilterAllOf', function() {
var tquery = document.createElement('tv-e-tquery');
var allOf = document.createElement(
'tv-e-tquery-filter-all-of').scriptValue;
var timeline = createFakeTimelineWithEvents_([
{guid: 1, title: 'a1'},
{guid: 2, title: 'b1'},
{guid: 3, title: 'c1'}
]);
tquery.onTimelineChanged(timeline);
var result = tquery.filter(allOf('a1')).selection;
assert.equal(result.length, 1);
assert.equal(result[0].guid, 1);
var result = tquery.filter(allOf('a1', /1/)).selection;
assert.equal(result.length, 1);
assert.equal(result[0].guid, 1);
var result = tquery.filter(allOf()).selection;
assert.equal(result.length, 3);
});
test('tqueryFilterAnyOf', function() {
var tquery = document.createElement('tv-e-tquery');
var anyOf = document.createElement(
'tv-e-tquery-filter-any-of').scriptValue;
var timeline = createFakeTimelineWithEvents_([
{guid: 1, title: 'a'},
{guid: 2, title: 'b'},
{guid: 3, title: 'c'}
]);
tquery.onTimelineChanged(timeline);
var result = tquery.filter(anyOf('a', 'b')).selection;
assert.equal(result.length, 2);
assert.equal(result[0].guid, 1);
assert.equal(result[1].guid, 2);
var result = tquery.filter(anyOf('not there', 'a')).selection;
assert.equal(result.length, 1);
assert.equal(result[0].guid, 1);
var result = tquery.filter(anyOf()).selection;
assert.equal(result.length, 3);
});
test('tqueryFilterIsTopLevel', function() {
var tquery = document.createElement('tv-e-tquery');
var isTopLevel = document.createElement(
'tv-e-tquery-filter-is-top-level').scriptValue;
var timeline = createFakeTimelineWithEvents_([
{guid: 1, title: 'a'},
{guid: 2, title: 'b', subSlices: [{guid: 4}]},
{guid: 3, title: 'c'}
]);
tquery.onTimelineChanged(timeline);
var result = tquery.filter(isTopLevel()).selection;
assert.equal(result.length, 3);
assert.equal(result[0].guid, 1);
assert.equal(result[1].guid, 2);
assert.equal(result[2].guid, 3);
var result = tquery.filter(isTopLevel('a')).selection;
assert.equal(result.length, 1);
assert.equal(result[0].guid, 1);
});
test('tqueryFilterHasDuration', function() {
var tquery = document.createElement('tv-e-tquery');
var hasDuration = document.createElement(
'tv-e-tquery-filter-has-duration').scriptValue;
var timeline = createFakeTimelineWithEvents_([
{guid: 1, title: 'a', duration: 1},
{guid: 2, title: 'b', duration: 2},
{guid: 3, title: 'c', duration: 3},
{guid: 4, title: 'no duration'}
]);
tquery.onTimelineChanged(timeline);
var result = tquery.filter(hasDuration(1.5, 2.5)).selection;
assert.equal(result.length, 1);
assert.equal(result[0].guid, 2);
var result = tquery.filter(hasDuration(3, Infinity)).selection;
assert.equal(result.length, 1);
assert.equal(result[0].guid, 3);
var result = tquery.filter(hasDuration(-1, 0)).selection;
assert.equal(result.length, 0);
var result = tquery.filter(hasDuration(function(d) {
return d > 2;
})).selection;
assert.equal(result.length, 1);
assert.equal(result[0].guid, 3);
});
});
</script>