2015-11-05 20:45:51 +00:00
|
|
|
/*****************************************************************************
|
|
|
|
* Open MCT Web, Copyright (c) 2009-2015, United States Government
|
|
|
|
* as represented by the Administrator of the National Aeronautics and Space
|
|
|
|
* Administration. All rights reserved.
|
|
|
|
*
|
|
|
|
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
|
|
|
|
* "License"); you may not use this file except in compliance with the License.
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
|
|
* License for the specific language governing permissions and limitations
|
|
|
|
* under the License.
|
|
|
|
*
|
|
|
|
* Open MCT Web includes source code licensed under additional open source
|
|
|
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
|
|
* this source code distribution or the Licensing information page available
|
|
|
|
* at runtime from the About dialog for additional information.
|
|
|
|
*****************************************************************************/
|
2015-09-14 23:45:38 +00:00
|
|
|
|
|
|
|
define(
|
|
|
|
['../../../src/controllers/graph/TimelineGraph'],
|
|
|
|
function (TimelineGraph) {
|
|
|
|
|
|
|
|
describe("A Timeline's resource graph", function () {
|
|
|
|
var mockDomainObjects,
|
|
|
|
mockRenderer,
|
|
|
|
testColors,
|
|
|
|
mockGraphs,
|
|
|
|
graph;
|
|
|
|
|
|
|
|
function asPromise(v) {
|
|
|
|
return (v || {}).then ? v : {
|
|
|
|
then: function (callback) {
|
|
|
|
return asPromise(callback(v));
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
beforeEach(function () {
|
|
|
|
testColors = {
|
2016-05-19 18:29:13 +00:00
|
|
|
a: [0, 1, 0],
|
|
|
|
b: [1, 0, 1],
|
|
|
|
c: [1, 0, 0]
|
2015-09-14 23:45:38 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
mockGraphs = [];
|
|
|
|
mockDomainObjects = {};
|
|
|
|
|
|
|
|
['a', 'b', 'c'].forEach(function (k, i) {
|
|
|
|
var mockGraph = jasmine.createSpyObj(
|
|
|
|
'utilization-' + k,
|
2016-05-19 18:29:13 +00:00
|
|
|
['getPointCount', 'getDomainValue', 'getRangeValue']
|
2015-09-14 23:45:38 +00:00
|
|
|
);
|
|
|
|
mockDomainObjects[k] = jasmine.createSpyObj(
|
|
|
|
'domainObject-' + k,
|
2016-05-19 18:29:13 +00:00
|
|
|
['getCapability', 'useCapability']
|
2015-09-14 23:45:38 +00:00
|
|
|
);
|
|
|
|
mockDomainObjects[k].useCapability.andReturn(asPromise({
|
|
|
|
testResource: mockGraph
|
|
|
|
}));
|
|
|
|
mockGraph.getPointCount.andReturn(i + 2);
|
|
|
|
mockGraph.testField = k;
|
|
|
|
mockGraph.testIndex = i;
|
|
|
|
|
|
|
|
// Store to allow changes later
|
|
|
|
mockGraphs.push(mockGraph);
|
|
|
|
});
|
|
|
|
|
|
|
|
mockRenderer = jasmine.createSpyObj(
|
|
|
|
'renderer',
|
2016-05-19 18:29:13 +00:00
|
|
|
['render', 'decode']
|
2015-09-14 23:45:38 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
mockRenderer.render.andCallFake(function (utilization) {
|
|
|
|
var result = [];
|
|
|
|
while (result.length < (utilization.testIndex + 2) * 2) {
|
|
|
|
result.push(Math.floor(result.length / 2));
|
|
|
|
// Alternate +/- to give something to test to
|
|
|
|
result.push(
|
|
|
|
((result.length % 4 > 1) ? -1 : 1) *
|
|
|
|
(10 * utilization.testIndex)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
});
|
|
|
|
|
|
|
|
mockRenderer.decode.andCallFake(function (color) {
|
|
|
|
return testColors[color];
|
|
|
|
});
|
|
|
|
|
|
|
|
graph = new TimelineGraph(
|
|
|
|
'testResource',
|
|
|
|
mockDomainObjects,
|
|
|
|
mockRenderer
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("exposes minimum/maximum", function () {
|
|
|
|
expect(graph.minimum()).toEqual(-20);
|
|
|
|
expect(graph.maximum()).toEqual(20);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("exposes resource key", function () {
|
|
|
|
expect(graph.key).toEqual('testResource');
|
|
|
|
});
|
|
|
|
|
|
|
|
it("exposes a rendered drawing object", function () {
|
|
|
|
// Much of the work here is done by the renderer,
|
|
|
|
// so just check that it got used and assigned
|
|
|
|
expect(graph.drawingObject.lines).toEqual([
|
|
|
|
{
|
|
|
|
color: testColors.a,
|
|
|
|
buffer: [0, 0, 1, 0],
|
|
|
|
points: 2
|
|
|
|
},
|
|
|
|
{
|
|
|
|
color: testColors.b,
|
|
|
|
buffer: [0, 10, 1, -10, 2, 10],
|
|
|
|
points: 3
|
|
|
|
},
|
|
|
|
{
|
|
|
|
color: testColors.c,
|
|
|
|
buffer: [0, 20, 1, -20, 2, 20, 3, -20],
|
|
|
|
points: 4
|
|
|
|
}
|
|
|
|
]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("allows its bounds to be specified", function () {
|
|
|
|
graph.setBounds(42, 12321);
|
|
|
|
expect(graph.drawingObject.origin[0]).toEqual(42);
|
|
|
|
expect(graph.drawingObject.dimensions[0]).toEqual(12321);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("provides a minimum/maximum even with no data", function () {
|
|
|
|
mockGraphs.forEach(function (mockGraph) {
|
|
|
|
mockGraph.getPointCount.andReturn(0);
|
|
|
|
});
|
|
|
|
|
|
|
|
// Create a graph of these utilizations
|
|
|
|
graph = new TimelineGraph(
|
|
|
|
'testResource',
|
|
|
|
mockDomainObjects,
|
|
|
|
mockRenderer
|
|
|
|
);
|
|
|
|
|
|
|
|
// Verify that we get some usable defaults
|
|
|
|
expect(graph.minimum()).toEqual(jasmine.any(Number));
|
|
|
|
expect(graph.maximum()).toEqual(jasmine.any(Number));
|
|
|
|
expect(graph.maximum() > graph.minimum()).toBeTruthy();
|
|
|
|
});
|
|
|
|
|
|
|
|
it("refreshes lines upon request", function () {
|
|
|
|
// Mock renderer looks at testIndex, so change it here...
|
|
|
|
mockGraphs[0].testIndex = 3;
|
|
|
|
// Should trigger a new render
|
|
|
|
graph.refresh();
|
|
|
|
// Values correspond to the new index now
|
|
|
|
expect(graph.drawingObject.lines[0].buffer).toEqual(
|
|
|
|
[0, 30, 1, -30, 2, 30, 3, -30, 4, 30]
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
}
|
2016-05-19 18:29:13 +00:00
|
|
|
);
|