VulpesOS/gaia/apps/music/test/marionette/Player_test.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

325 lines
10 KiB
JavaScript
Executable file

/* global require, marionette, setup, suite, test, __dirname */
'use strict';
var assert = require('assert');
var Music = require('./lib/music.js');
var FakeRingtones = require('./lib/fakeringtones.js');
var FakeControls = require('./lib/fakecontrols.js');
var Statusbar = require('./lib/statusbar.js');
marionette('Music player tests', function() {
var apps = {};
apps[FakeRingtones.DEFAULT_ORIGIN] = __dirname + '/fakeringtones';
apps[FakeControls.DEFAULT_ORIGIN] = __dirname + '/fakecontrols';
var client = marionette.client({
profile: {
prefs: {
'device.storage.enabled': true,
'device.storage.testing': true,
'device.storage.prompt.testing': true
},
apps: apps
},
desiredCapabilities: { raisesAccessibilityExceptions: false }
});
var music;
setup(function() {
music = new Music(client);
client.fileManager.removeAllFiles();
client.fileManager.add([
// Album = 'A Minute With Brendan'
// Artist = 'Minute With'
// Title = 'Boot To Gecko (B2G)'
{ type: 'music', filePath: 'test_media/samples/Music/b2g.ogg' }
]);
});
suite('Audio channels tests', function() {
var ringtones, statusbar;
setup(function() {
ringtones = new FakeRingtones(client);
statusbar = new Statusbar(client);
});
// This test is skipped for not failing tpbl, please see bug 997360.
test.skip('Interrupted by a higher priority channel', function() {
// Launch Music app and wait for the first tile to come out. Switch to
// the all songs view then tap on the first song to play, also make sure
// the playing icon in the status bar shows up.
music.launch();
music.waitForFirstTile();
music.switchToSongsView();
music.playFirstSong();
statusbar.waitForPlayingIndicatorShown(true);
// Launch the fake ringtones app to interrupt the music app.
// Make sure the playing icon in the status bar disappears.
ringtones.launch();
statusbar.waitForPlayingIndicatorShown(false);
// Close the fake ringtones app so that the playing icon shows up again
// because the channel of music app is no more interrupted.
ringtones.close();
statusbar.waitForPlayingIndicatorShown(true);
// Bring the music app to foreground then tap the play button, see if the
// play button is still functioning to pause the player. Also check the
// style of the play button is PAUSED, and the playing icon disappears.
music.switchToMe();
music.tapPlayButton();
assert.equal(music.isPlaying, false);
statusbar.waitForPlayingIndicatorShown(false);
// Bring the music app to foreground then tap the play button, see if the
// play button is still functioning to resume the player. Also check the
// style of the play button is PLAYING, and the playing icon shows up.
music.switchToMe();
music.tapPlayButton();
assert.equal(music.isPlaying, true);
statusbar.waitForPlayingIndicatorShown(true);
});
});
suite('Playback tests', function() {
var controls;
setup(function() {
controls = new FakeControls(client);
});
// Disabled See bug 1032037.
test.skip('Check that progress bar updates when re-shown', function() {
music.launch();
music.waitForFirstTile();
music.switchToSongsView();
music.playFirstSong();
var dt = 5.0;
// We want to wait a few seconds while the music app is in the background.
controls.launch();
client.helper.wait(dt * 1000); // Convert to ms
controls.playPause();
controls.close();
// Try to get the songProgress when the music is still in the background
music.switchToMe({background: true});
var t0 = music.songProgress;
// Make sure the progress bar got updated when the music app is brought to
// the foreground.
music.launch();
var t1 = music.songProgress;
assert(t1 - t0 > 0, 'Progress bar not updated!');
});
});
suite('Player icon tests', function() {
test('Check the player icon hides before play some song', function() {
music.launch();
music.waitForFirstTile();
music.checkPlayerIconShown(false);
});
test('Check the player icon displays after play some song', function() {
music.launch();
music.waitForFirstTile();
music.switchToSongsView();
music.playFirstSong();
music.waitForPlayerView();
var frame = music.playerViewFrame;
assert.ok(frame);
client.switchToFrame(frame);
// Wait for cover overlay to hide to prevent intermittent fail
client.waitFor(function() {
var cover = client.findElement(Music.Selector.playerCover);
assert.ok(cover);
client.switchToShadowRoot(cover);
var container = client.findElement('#container');
assert.ok(container);
var isHidden = (container.getAttribute('class').split(' ').
indexOf('show-overlay') === -1);
client.switchToShadowRoot();
return isHidden;
}.bind(this));
music.switchToMe();
music.tapHeaderActionButton();
music.waitForSongsView();
music.checkPlayerIconShown(true);
});
});
suite('Status bar', function() {
var statusbar;
setup(function() {
statusbar = new Statusbar(client);
music.launch();
music.waitForFirstTile();
music.switchToSongsView();
// check the status bar for the hidden play icon
client.switchToFrame();
statusbar.waitForPlayingIndicatorShown(false);
music.switchToMe();
music.playFirstSong();
music.waitForPlayerView();
});
test('Check the play icon is in the status bar. moztrap:9742', function() {
// check the status bar
client.switchToFrame();
statusbar.waitForPlayingIndicatorShown(true);
// switch to the homescreen
var system = client.loader.getAppClass('system');
system.goHome();
client.waitFor(function() {
return client.findElement(system.Selector.activeHomescreenFrame)
.displayed();
});
// check the status bar again
statusbar.waitForPlayingIndicatorShown(true);
});
test('Check the play icon is hidden after close Music app', function() {
// ensure statusbar icon is visible
client.switchToFrame();
statusbar.waitForPlayingIndicatorShown(true);
// close the music app
music.switchToMe();
music.close();
// make sure statusbar icon goes away
client.switchToFrame();
statusbar.waitForPlayingIndicatorShown(false);
});
});
suite('Rating test', function() {
test('Check Rating is saved. moztrap:2683', function() {
music.launch();
music.waitForFirstTile();
music.switchToSongsView();
music.playFirstSong();
// check there is no rating.
music.showSongInfo();
var rating = music.getStarRating();
assert.equal(rating, 0);
var rating_value = 4;
music.tapRating(rating_value);
// wait that the rating bar disappear.
music.waitForRatingOverlayHidden();
// tap to make the rating bar reappear.
music.showSongInfo();
rating = music.getStarRating();
assert.equal(rating, rating_value, 'Check rating is shown.');
// switch back and forth
music.tapHeaderActionButton();
music.playFirstSong();
rating = music.getStarRating();
assert.equal(rating, rating_value,
'Incorrect rating after switching song.');
// close the app because we want to test things are saved.
music.close();
// start it over.
music.launch();
music.waitForFirstTile();
music.switchToSongsView();
music.playFirstSong();
rating = music.getStarRating();
assert.equal(rating, rating_value,
'Incorrect rating after restarting.');
});
});
suite('Player navigation. moztrap:2376', function() {
test('Check that the back button works', function() {
var title;
music.launch();
music.waitForFirstTile();
music.switchToSongsView();
title = music.header.findElement('#header-title').text();
music.playFirstSong();
music.waitForPlayerView();
assert.notEqual(title,
music.header.findElement('#header-title').text());
music.tapHeaderActionButton();
music.waitForSongsView();
client.switchToFrame(music.songsViewFrame);
music.firstSong;
music.switchToMe();
assert.equal(title,
music.header.findElement('#header-title').text());
music.switchToAlbumsView();
music.selectAlbum('A Minute With Brendan');
title = music.header.findElement('#header-title').text();
music.playFirstSongByAlbum();
music.waitForPlayerView();
assert.notEqual(title,
music.header.findElement('#header-title').text());
music.tapHeaderActionButton();
music.waitForAlbumDetailView();
client.switchToFrame(music.albumDetailViewFrame);
music.firstSong;
music.switchToMe();
assert.equal(title,
music.header.findElement('#header-title').text());
music.switchToArtistsView();
music.selectArtist('Minute With');
title = music.header.findElement('#header-title').text();
music.playFirstSongByArtist();
music.waitForPlayerView();
assert.notEqual(title,
music.header.findElement('#header-title').text());
music.tapHeaderActionButton();
music.waitForArtistDetailView();
client.switchToFrame(music.artistDetailViewFrame);
music.firstSong;
music.switchToMe();
assert.equal(title,
music.header.findElement('#header-title').text());
music.switchToPlaylistsView();
music.selectPlaylist('Recently added');
title = music.header.findElement('#header-title').text();
music.playFirstSongByPlaylist();
music.waitForPlayerView();
assert.notEqual(title,
music.header.findElement('#header-title').text());
music.tapHeaderActionButton();
music.waitForPlaylistDetailView();
client.switchToFrame(music.playlistDetailViewFrame);
music.firstSong;
music.switchToMe();
assert.equal(title,
music.header.findElement('#header-title').text());
});
});
});