Skip to content

Commit

Permalink
Add a test for an issue with external text visibility.
Browse files Browse the repository at this point in the history
I promised Theodore to add a test for this.
A Lannister always pays his (technical)  debts.

Issue shaka-project#1938

Change-Id: I9741b8c65a4a26b1c07ed1feb9082751dab49505
  • Loading branch information
ismena authored and AnteWall committed Jul 17, 2019
1 parent dc39fd1 commit fbd1fea
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 8 deletions.
46 changes: 41 additions & 5 deletions test/player_integration.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,10 @@ describe('Player', () => {
document.body.appendChild(video);

compiledShaka = await Util.loadShaka(getClientArg('uncompiled'));
await shaka.test.TestScheme.createManifests(compiledShaka, '_compiled');
});

beforeEach(() => {
beforeEach(async () => {
await shaka.test.TestScheme.createManifests(compiledShaka, '_compiled');
player = new compiledShaka.Player(video);

// Grab event manager from the uncompiled library:
Expand Down Expand Up @@ -125,6 +125,7 @@ describe('Player', () => {
// Using mode='disabled' on TextTrack causes cues to go null, which leads
// to a crash in TextEngine. This validates that we do not trigger this
// behavior when changing visibility of text.

it('does not cause cues to be null', async () => {
await player.load('test:sintel_compiled');
video.play();
Expand Down Expand Up @@ -239,9 +240,7 @@ describe('Player', () => {
displayer.appendSpy.and.callFake((added) => {
cues = cues.concat(added);
});
displayer.removeSpy.and.callFake(() => {
cues = [];
});

player.configure('textDisplayFactory', Util.factoryReturns(displayer));

const preferredTextLanguage = 'fa'; // The same as in the content itself
Expand All @@ -254,6 +253,43 @@ describe('Player', () => {
expect(displayer.isTextVisible()).toBe(true);
expect(cues.length).toBeGreaterThan(0);
});

it('actually appends cues for external text', async () => {
let cues = [];
/** @const {!shaka.test.FakeTextDisplayer} */
const displayer = new shaka.test.FakeTextDisplayer();
displayer.appendSpy.and.callFake((added) => {
cues = cues.concat(added);
});

player.configure({textDisplayFactory: () => displayer});

const eventManager = new shaka.util.EventManager();
/** @type {shaka.test.Waiter} */
const waiter = new shaka.test.Waiter(eventManager);


await player.load('test:sintel_no_text_compiled');
const locationUri = new goog.Uri(location.href);
const partialUri = new goog.Uri('/base/test/test/assets/text-clip.vtt');
const absoluteUri = locationUri.resolve(partialUri);
await player.addTextTrack(absoluteUri.toString(), 'en', 'subtitles',
'text/vtt');

const textTracks = player.getTextTracks();
expect(textTracks).toBeTruthy();
expect(textTracks.length).toBe(1);

player.setTextTrackVisibility(true);
await waiter.waitForEvent(player, 'texttrackvisibility');
// Wait for the text cues to get appended.
// TODO: this should be based on an event instead.
await Util.delay(1);

expect(player.isTextTrackVisible()).toBe(true);
expect(displayer.isTextVisible()).toBe(true);
expect(cues.length).toBeGreaterThan(0);
});
});

describe('plays', () => {
Expand Down
5 changes: 2 additions & 3 deletions test/test/util/test_scheme.js
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,6 @@ shaka.test.TestScheme = class {

MANIFESTS[name + suffix] = gen.build();
}

// Custom generators:

const data = DATA['sintel'];
Expand Down Expand Up @@ -600,13 +599,13 @@ shaka.test.TestScheme.ManifestParser = class {
if (!manifestParts) {
// Use expect so the URI is printed on errors.
expect(uri).toMatch(re);
return Promise.reject();
throw new Error('Malformed uri!');
}

const manifest = shaka.test.TestScheme.MANIFESTS[manifestParts[1]];
expect(manifest).toBeTruthy();
if (!manifest) {
return Promise.reject();
throw new Error('Unknown manifest!');
}

// Invoke filtering interfaces similar to how a real parser would.
Expand Down

0 comments on commit fbd1fea

Please sign in to comment.