Files
shaka-player/test/offline/download_progress_estimator_unit.js
T
Joey Parrish fbbd63d96b test: Late load tests, fix Chromecast test flake (#4115)
This change fixes tests on Chromecast by loading tests later in the process.  Test scripts are now dynamically inserted by boot.js, rather than loaded by Karma.  The bootstrapping code then awaits the completion of that before starting the Karma frameworks (Jasmine) to run the tests.

This also removes the use of goog.provide/goog.require in tests and test utils.  We don't need to load test utils or library sources dynamically in each test, and this gives us more explicit control over script loading and ordering.

Closes #4094
2022-04-11 15:47:48 -07:00

91 lines
3.2 KiB
JavaScript

/*! @license
* Shaka Player
* Copyright 2016 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
describe('DownloadProgressEstimator', () => {
/** @type {!shaka.offline.DownloadProgressEstimator} */
let estimator;
beforeEach(() => {
estimator = new shaka.offline.DownloadProgressEstimator();
});
it('closing updates total download', () => {
const id = estimator.open(/* estimate= */ 12);
estimator.close(id, /* actual= */ 13);
expect(estimator.getTotalDownloaded()).toBe(13);
});
// If we call |close| with an id that was not returned by |open|, then it
// should be ignored.
it('closing with invalid id is ignored', () => {
expect(estimator.getTotalDownloaded()).toBe(0);
estimator.close(72, /* actual= */ 13);
expect(estimator.getTotalDownloaded()).toBe(0);
});
it('closing the same id twice has no effect', () => {
expect(estimator.getEstimatedProgress()).toBe(0);
estimator.open(/* estimate= */ 15);
const id = estimator.open(/* estimate= */ 5);
expect(estimator.getEstimatedProgress()).toBe(0);
estimator.close(id, /* actual= */ 5);
expect(estimator.getEstimatedProgress()).toBeCloseTo(0.25);
expect(estimator.getTotalDownloaded()).toBe(5);
// We will close |id| again, but nothing should change. We will even say
// the downloaded size is different, but that should not change anything.
estimator.close(id, /* actual= */ 200);
expect(estimator.getEstimatedProgress()).toBeCloseTo(0.25);
expect(estimator.getTotalDownloaded()).toBe(5);
});
// Calling both |open| and |close| should affect our progress. Calling |open|
// should cause our progress to grow smaller (we are saying there is more work
// to do) and calling |close| should cause our progress to grow larger (we are
// saying we completed work).
it('opening and closing updates progress', () => {
expect(estimator.getEstimatedProgress()).toBe(0);
const id0 = estimator.open(/* estimate= */ 5);
const id1 = estimator.open(/* estimate= */ 15);
expect(estimator.getEstimatedProgress()).toBe(0);
estimator.close(id0, /* actual= */ 5);
expect(estimator.getEstimatedProgress()).toBeCloseTo(0.25);
estimator.close(id1, /* actual= */ 15);
expect(estimator.getEstimatedProgress()).toBeCloseTo(1.0);
// Open a new estimate with a size equal to all previous estimates. Since
// everything else was closed, this should drop our progress from 100% to
// 50%.
estimator.open(/* estimate= */ 20);
expect(estimator.getEstimatedProgress()).toBeCloseTo(0.5);
});
// When tracking progress, we want to use the estimated size. This means no
// matter what value we provide for the actual downloaded size, it should not
// affect the progress (the original estimate should be used).
it('actual bytes do not affect progres', () => {
expect(estimator.getEstimatedProgress()).toBe(0);
estimator.open(/* estimate= */ 15);
const id = estimator.open(/* estimate= */ 5);
expect(estimator.getEstimatedProgress()).toBe(0);
// Use an actual value so large that if used for progress, it would break
// the progress value bounds.
estimator.close(id, /* actual= */ 200);
expect(estimator.getEstimatedProgress()).toBeCloseTo(0.25);
});
});