openmct/platform/features/plot/test/elements/PlotUpdaterSpec.js
Victor Woeltjen ed0e0709c5 [Plot] Spec for plot updater
Spec for plot updater, added for WTD-751.
2015-02-02 18:14:08 -08:00

112 lines
4.2 KiB
JavaScript

/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine,Float32Array*/
/**
* MergeModelsSpec. Created by vwoeltje on 11/6/14.
*/
define(
["../../src/elements/PlotUpdater"],
function (PlotUpdater) {
"use strict";
describe("A plot updater", function () {
var mockSubscription,
testDomain,
testRange,
testDomainValues,
testRangeValues,
updater;
function makeMockDomainObject(id) {
var mockDomainObject = jasmine.createSpyObj(
"object-" + id,
[ "getId", "getCapability", "getModel" ]
);
mockDomainObject.getId.andReturn(id);
return mockDomainObject;
}
beforeEach(function () {
var ids = [ 'a', 'b', 'c' ],
mockObjects = ids.map(makeMockDomainObject);
mockSubscription = jasmine.createSpyObj(
"subscription",
[ "getDomainValue", "getRangeValue", "getTelemetryObjects" ]
);
testDomain = "testDomain";
testRange = "testRange";
testDomainValues = { a: 3, b: 7, c: 13 };
testRangeValues = { a: 123, b: 456, c: 789 };
mockSubscription.getTelemetryObjects.andReturn(mockObjects);
mockSubscription.getDomainValue.andCallFake(function (mockObject) {
return testDomainValues[mockObject.getId()];
});
mockSubscription.getRangeValue.andCallFake(function (mockObject) {
return testRangeValues[mockObject.getId()];
});
updater = new PlotUpdater(
mockSubscription,
testDomain,
testRange
);
});
it("provides one buffer per telemetry object", function () {
expect(updater.getBuffers().length).toEqual(3);
});
it("changes buffer count if telemetry object counts change", function () {
mockSubscription.getTelemetryObjects
.andReturn([makeMockDomainObject('a')]);
updater.update();
expect(updater.getBuffers().length).toEqual(1);
});
it("maintains a buffer of received telemetry", function () {
// Count should be large enough to trigger a buffer resize
var count = 1000,
i;
// Increment values exposed by subscription
function increment() {
Object.keys(testDomainValues).forEach(function (k) {
testDomainValues[k] += 1;
testRangeValues[k] += 1;
});
}
// Simulate a lot of telemetry updates
for (i = 0; i < count; i += 1) {
updater.update();
expect(updater.getLength(0)).toEqual(i + 1);
expect(updater.getLength(1)).toEqual(i + 1);
expect(updater.getLength(2)).toEqual(i + 1);
increment();
}
// Domain offset should be lowest domain value
expect(updater.getDomainOffset()).toEqual(3);
// Test against initial values, offset by count,
// as was the case during each update
for (i = 0; i < count; i += 1) {
expect(updater.getBuffers()[0][i * 2])
.toEqual(3 + i - 3);
expect(updater.getBuffers()[0][i * 2 + 1])
.toEqual(123 + i);
expect(updater.getBuffers()[1][i * 2])
.toEqual(7 + i - 3);
expect(updater.getBuffers()[1][i * 2 + 1])
.toEqual(456 + i);
expect(updater.getBuffers()[2][i * 2])
.toEqual(13 + i - 3);
expect(updater.getBuffers()[2][i * 2 + 1])
.toEqual(789 + i);
}
});
});
}
);