Skip to content

Commit

Permalink
(test) Extract file: mediaGenerateAndAssert.js to reduce code duplica…
Browse files Browse the repository at this point in the history
…tion.
  • Loading branch information
Lindsay-Needs-Sleep committed Oct 31, 2020
1 parent 374ca1a commit ab21a67
Show file tree
Hide file tree
Showing 9 changed files with 299 additions and 336 deletions.
1 change: 1 addition & 0 deletions tests/www/html/tests_auto.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
<script type="text/javascript" src="../vendor/mocha.js"></script>
<script type="text/javascript" src="../vendor/chai.js"></script>
<script type="text/javascript" src="../lib/utils.js"></script>
<script type="text/javascript" src="../lib/mediaGenerateAndAssert.js"></script>
<script type="text/javascript" src="../lib/custom_mocha_html_reporter.js"></script>
</head>
<body>
Expand Down
1 change: 1 addition & 0 deletions tests/www/html/tests_interaction_primary.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
<script type="text/javascript" src="../vendor/mocha.js"></script>
<script type="text/javascript" src="../vendor/chai.js"></script>
<script type="text/javascript" src="../lib/utils.js"></script>
<script type="text/javascript" src="../lib/mediaGenerateAndAssert.js"></script>
<script type="text/javascript" src="../lib/custom_mocha_html_reporter.js"></script>
</head>
<body>
Expand Down
1 change: 1 addition & 0 deletions tests/www/html/tests_interaction_secondary.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
<script type="text/javascript" src="../vendor/mocha.js"></script>
<script type="text/javascript" src="../vendor/chai.js"></script>
<script type="text/javascript" src="../lib/utils.js"></script>
<script type="text/javascript" src="../lib/mediaGenerateAndAssert.js"></script>
<script type="text/javascript" src="../lib/custom_mocha_html_reporter.js"></script>
</head>
<body>
Expand Down
1 change: 1 addition & 0 deletions tests/www/html/tests_manual.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
<script type="text/javascript" src="../vendor/mocha.js"></script>
<script type="text/javascript" src="../vendor/chai.js"></script>
<script type="text/javascript" src="../lib/utils.js"></script>
<script type="text/javascript" src="../lib/mediaGenerateAndAssert.js"></script>
<script type="text/javascript" src="../lib/custom_mocha_html_reporter.js"></script>
</head>
<body>
Expand Down
222 changes: 59 additions & 163 deletions tests/www/js/tests_auto.js

Large diffs are not rendered by default.

36 changes: 22 additions & 14 deletions tests/www/js/tests_interaction_primary.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

var assert = window.chai.assert;
var utils = window['cordova-plugin-chromecast-tests'].utils;
var mediaUtils = window['cordova-plugin-chromecast-tests'].mediaUtils;

mocha.setup({
bail: true,
Expand All @@ -26,20 +27,28 @@
});

describe('Interaction Tests - Primary Device', function () {
var videoUrl = 'https://ia801302.us.archive.org/1/items/TheWater_201510/TheWater.mp4';
var audioUrl = 'https://ia800306.us.archive.org/26/items/1939RadioNews/1939-10-24-CBS-Elmer-Davis-Reports-City-Of-Flint-Still-Missing.mp3';

// callOrder constants that are re-used frequently
var success = 'success';
var stopped = 'stopped';
var update = 'update';

var session;
var media;
var videoItem;
var audioItem;

var cookieName = 'primary-p2_restart-reload';
var runningNum = parseInt(utils.getValue(cookieName) || '-1');

before('setup constants', function () {
// This must be identical to the before('setup constants'.. in tests_interaction_secondary.js
videoItem = mediaUtils.getMediaInfoItem('VIDEO', chrome.cast.media.MetadataType.TV_SHOW, new Date(2020, 10, 31));
audioItem = mediaUtils.getMediaInfoItem('AUDIO', chrome.cast.media.MetadataType.MUSIC_TRACK, new Date(2020, 10, 31));
// TODO desktop chrome does not send all metadata attributes for some reason,
// So delete the metadata so that assertMediaInfoEquals does not compare it
videoItem.metadata = null;
audioItem.metadata = null;
});
before('Api should be available and initialize successfully', function (done) {
this.timeout(15000);
session = null;
Expand Down Expand Up @@ -127,19 +136,16 @@
}
utils.setAction('Tests running...');
media = m;
var interval = setInterval(function () {
if (media.media.tracks != null && media.media.tracks !== undefined) {
clearInterval(interval);
utils.testMediaProperties(media);
finished = true;
done();
}
}, 400);
utils.testMediaProperties(media);
mediaUtils.assertMediaInfoItemEquals(media.media, videoItem);
finished = true;
done();
});
});
it('External media stop should trigger media updateListener', function (done) {
utils.setAction('On <u>secondary</u> click "<b>Stop Media</b>"');
media.addUpdateListener(function listener (isAlive) {
mediaUtils.assertMediaInfoItemEquals(media.media, videoItem);
if (media.playerState === chrome.cast.media.PlayerState.IDLE) {
media.removeUpdateListener(listener);
assert.equal(media.idleReason, chrome.cast.media.IdleReason.CANCELLED);
Expand All @@ -157,19 +163,20 @@
}
finished = true;
media = m;
mediaUtils.assertMediaInfoItemEquals(media.media, audioItem);
var interval = setInterval(function () {
if (media.currentItemId > -1 && media.media.tracks) {
if (media.currentItemId > -1) {
clearInterval(interval);
finished = true;
utils.testMediaProperties(media);
var items = media.items;
var startTime = 40;
assert.isTrue(items[0].autoplay);
assert.equal(items[0].startTime, startTime);
assert.equal(items[0].media.contentId, videoUrl);
mediaUtils.assertMediaInfoItemEquals(items[0].media, videoItem);
assert.isTrue(items[1].autoplay);
assert.equal(items[1].startTime, startTime * 2);
assert.equal(items[1].media.contentId, audioUrl);
mediaUtils.assertMediaInfoItemEquals(items[1].media, audioItem);
done();
}
}, 400);
Expand Down Expand Up @@ -198,6 +205,7 @@
session.removeMediaListener(mediaListener);
media.removeUpdateListener(listener);
utils.testMediaProperties(media);
mediaUtils.assertMediaInfoItemEquals(media.media, videoItem);
called(update);
}
});
Expand Down
104 changes: 22 additions & 82 deletions tests/www/js/tests_interaction_secondary.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

var assert = window.chai.assert;
var utils = window['cordova-plugin-chromecast-tests'].utils;
var mediaUtils = window['cordova-plugin-chromecast-tests'].mediaUtils;

mocha.setup({
bail: true,
Expand All @@ -26,10 +27,6 @@
});

describe('Manual Tests - Secondary Device', function () {
var imageUrl = 'https://ia800705.us.archive.org/1/items/GoodHousekeeping193810/Good%20Housekeeping%201938-10.jpg';
var videoUrl = 'https://ia801302.us.archive.org/1/items/TheWater_201510/TheWater.mp4';
var audioUrl = 'https://ia800306.us.archive.org/26/items/1939RadioNews/1939-10-24-CBS-Elmer-Davis-Reports-City-Of-Flint-Still-Missing.mp3';

// callOrder constants that are re-used frequently
var success = 'success';
var stopped = 'stopped';
Expand All @@ -46,36 +43,21 @@
var checkItems = function (items) {
assert.isTrue(items[0].autoplay);
assert.equal(items[0].startTime, startTime);
assert.equal(items[0].media.contentId, videoUrl);
mediaUtils.assertMediaInfoItemEquals(items[0].media, videoItem);
assert.isTrue(items[1].autoplay);
assert.equal(items[1].startTime, startTime * 2);
assert.equal(items[1].media.contentId, audioUrl);
mediaUtils.assertMediaInfoItemEquals(items[1].media, audioItem);
};

before('setup constants', function () {
videoItem = new chrome.cast.media.MediaInfo(videoUrl, 'video/mp4');
videoItem.metadata = new chrome.cast.media.TvShowMediaMetadata();
videoItem.metadata.title = 'DaTitle';
videoItem.metadata.subtitle = 'DaSubtitle';
videoItem.metadata.originalAirDate = new Date().valueOf();
videoItem.metadata.episode = 15;
videoItem.metadata.season = 2;
videoItem.metadata.seriesTitle = 'DaSeries';
videoItem.metadata.images = [new chrome.cast.Image(imageUrl)];

audioItem = new chrome.cast.media.MediaInfo(audioUrl, 'audio/mpeg');
audioItem.metadata = new chrome.cast.media.MusicTrackMediaMetadata();
audioItem.metadata.albumArtist = 'DaAlmbumArtist';
audioItem.metadata.albumName = 'DaAlbum';
audioItem.metadata.artist = 'DaArtist';
audioItem.metadata.composer = 'DaComposer';
audioItem.metadata.title = 'DaTitle';
audioItem.metadata.songName = 'DaSongName';
audioItem.metadata.myMadeUpMetadata = '15';
audioItem.metadata.releaseDate = new Date().valueOf();
audioItem.metadata.images = [new chrome.cast.Image(imageUrl)];
// This must be identical to the before('setup constants'.. in tests_interaction_primary.js
videoItem = mediaUtils.getMediaInfoItem('VIDEO', chrome.cast.media.MetadataType.TV_SHOW, new Date(2020, 10, 31));
audioItem = mediaUtils.getMediaInfoItem('AUDIO', chrome.cast.media.MetadataType.MUSIC_TRACK, new Date(2020, 10, 31));
// TODO desktop chrome does not send all metadata attributes for some reason,
// So delete the metadata so that assertMediaInfoEquals does not compare it
videoItem.metadata = null;
audioItem.metadata = null;
});

before('Api should be available and initialize successfully', function (done) {
session = null;
var interval = setInterval(function () {
Expand Down Expand Up @@ -123,43 +105,17 @@
done();
});
});
it('session.loadMedia should be able to load a remote video and handle GenericMediaMetadata', function (done) {
it('session.loadMedia should be able to load a remote video', function (done) {
utils.setAction('On <u>primary</u> click "<b>Listen for External Load Media</b>"', 'Load Media', function () {
var mediaInfo = new chrome.cast.media.MediaInfo(videoUrl, 'video/mp4');
mediaInfo.metadata = new chrome.cast.media.GenericMediaMetadata();
mediaInfo.metadata.title = 'DaTitle';
mediaInfo.metadata.subtitle = 'DaSubtitle';
mediaInfo.metadata.releaseDate = new Date().valueOf();
mediaInfo.metadata.someTrueBoolean = true;
mediaInfo.metadata.someFalseBoolean = false;
mediaInfo.metadata.someSmallNumber = 15;
mediaInfo.metadata.someLargeNumber = 1234567890123456;
mediaInfo.metadata.someSmallDecimal = 15.15;
mediaInfo.metadata.someLargeDecimal = 1234567.123456789;
mediaInfo.metadata.someString = 'SomeString';
mediaInfo.metadata.images = [new chrome.cast.Image(imageUrl)];
session.loadMedia(new chrome.cast.media.LoadRequest(mediaInfo), function (m) {
session.loadMedia(new chrome.cast.media.LoadRequest(videoItem), function (m) {
media = m;
utils.testMediaProperties(media);
assert.isUndefined(media.queueData);
assert.equal(media.media.metadata.title, mediaInfo.metadata.title);
assert.equal(media.media.metadata.subtitle, mediaInfo.metadata.subtitle);
assert.equal(media.media.metadata.releaseDate, mediaInfo.metadata.releaseDate);
// TODO figure out how to maintain the data types for custom params on the native side
// so that we don't have to do turn each actual and expected into a string
assert.equal(media.media.metadata.someTrueBoolean + '', mediaInfo.metadata.someTrueBoolean + '');
assert.equal(media.media.metadata.someFalseBoolean + '', mediaInfo.metadata.someFalseBoolean + '');
assert.equal(media.media.metadata.someSmallNumber + '', mediaInfo.metadata.someSmallNumber + '');
assert.equal(media.media.metadata.someLargeNumber + '', mediaInfo.metadata.someLargeNumber + '');
assert.equal(media.media.metadata.someSmallDecimal + '', mediaInfo.metadata.someSmallDecimal + '');
assert.equal(media.media.metadata.someLargeDecimal + '', mediaInfo.metadata.someLargeDecimal + '');
assert.equal(media.media.metadata.someString, mediaInfo.metadata.someString);
assert.equal(media.media.metadata.images[0].url, mediaInfo.metadata.images[0].url);
assert.equal(media.media.metadata.metadataType, chrome.cast.media.MetadataType.GENERIC);
assert.equal(media.media.metadata.type, chrome.cast.media.MetadataType.GENERIC);
mediaUtils.assertMediaInfoItemEquals(media.media, videoItem);
media.addUpdateListener(function listener (isAlive) {
assert.isTrue(isAlive);
utils.testMediaProperties(media);
mediaUtils.assertMediaInfoItemEquals(media.media, videoItem);
assert.oneOf(media.playerState, [
chrome.cast.media.PlayerState.PLAYING,
chrome.cast.media.PlayerState.BUFFERING]);
Expand All @@ -182,6 +138,7 @@
done();
});
media.addUpdateListener(function listener (isAlive) {
mediaUtils.assertMediaInfoItemEquals(media.media, videoItem);
if (media.playerState === chrome.cast.media.PlayerState.IDLE) {
media.removeUpdateListener(listener);
assert.equal(media.idleReason, chrome.cast.media.IdleReason.CANCELLED);
Expand All @@ -190,6 +147,7 @@
}
});
media.stop(null, function () {
mediaUtils.assertMediaInfoItemEquals(media.media, videoItem);
assert.equal(media.playerState, chrome.cast.media.PlayerState.IDLE);
assert.equal(media.idleReason, chrome.cast.media.IdleReason.CANCELLED);
called(success);
Expand Down Expand Up @@ -227,23 +185,14 @@
assert.isFalse(media.queueData.shuffle);
assert.equal(media.queueData.startIndex, request.startIndex);
utils.testQueueItems(media.items);
assert.equal(media.media.contentId, audioUrl);
mediaUtils.assertMediaInfoItemEquals(media.media, audioItem);
assert.equal(media.items.length, 2);
checkItems(media.items);
assert.equal(media.items[i].media.metadata.albumArtist, audioItem.metadata.albumArtist);
assert.equal(media.items[i].media.metadata.albumName, audioItem.metadata.albumName);
assert.equal(media.items[i].media.metadata.artist, audioItem.metadata.artist);
assert.equal(media.items[i].media.metadata.composer, audioItem.metadata.composer);
assert.equal(media.items[i].media.metadata.title, audioItem.metadata.title);
assert.equal(media.items[i].media.metadata.songName, audioItem.metadata.songName);
assert.equal(media.items[i].media.metadata.releaseDate, audioItem.metadata.releaseDate);
assert.equal(media.items[i].media.metadata.images[0].url, audioItem.metadata.images[0].url);
assert.equal(media.items[i].media.metadata.myMadeUpMetadata, audioItem.metadata.myMadeUpMetadata);
assert.equal(media.items[i].media.metadata.metadataType, chrome.cast.media.MetadataType.MUSIC_TRACK);
assert.equal(media.items[i].media.metadata.type, chrome.cast.media.MetadataType.MUSIC_TRACK);
mediaUtils.assertMediaInfoItemEquals(media.items[i].media, audioItem);
media.addUpdateListener(function listener (isAlive) {
assert.isTrue(isAlive);
utils.testMediaProperties(media);
mediaUtils.assertMediaInfoItemEquals(media.media, audioItem);
assert.oneOf(media.playerState, [
chrome.cast.media.PlayerState.PLAYING,
chrome.cast.media.PlayerState.BUFFERING]);
Expand Down Expand Up @@ -280,25 +229,16 @@
assert.isTrue(isAlive);
calledOrder(stopped);
}
if (media.currentItemId !== media.items[i].itemId && media.media.contentId === videoUrl) {
if (media.currentItemId !== media.items[i].itemId) {
i = utils.getCurrentItemIndex(media);
media.removeUpdateListener(listener);
utils.testMediaProperties(media);
assert.equal(media.currentItemId, media.items[i].itemId);
utils.testQueueItems(media.items);
assert.equal(media.media.contentId, videoUrl);
mediaUtils.assertMediaInfoItemEquals(media.media, videoItem);
assert.equal(media.items.length, 2);
checkItems(media.items);
assert.equal(media.items[i].media.contentId, videoUrl);
assert.equal(media.items[i].media.metadata.title, videoItem.metadata.title);
assert.equal(media.items[i].media.metadata.subtitle, videoItem.metadata.subtitle);
assert.equal(media.items[i].media.metadata.originalAirDate, videoItem.metadata.originalAirDate);
assert.equal(media.items[i].media.metadata.episode, videoItem.metadata.episode);
assert.equal(media.items[i].media.metadata.season, videoItem.metadata.season);
assert.equal(media.items[i].media.metadata.seriesTitle, videoItem.metadata.seriesTitle);
assert.equal(media.items[i].media.metadata.images[0].url, videoItem.metadata.images[0].url);
assert.equal(media.items[i].media.metadata.metadataType, chrome.cast.media.MetadataType.TV_SHOW);
assert.equal(media.items[i].media.metadata.type, chrome.cast.media.MetadataType.TV_SHOW);
mediaUtils.assertMediaInfoItemEquals(media.media, videoItem);
assert.closeTo(media.getEstimatedTime(), startTime, 5);
calledOrder(newMedia);
}
Expand Down
Loading

0 comments on commit ab21a67

Please sign in to comment.