Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
325 lines
10 KiB
JavaScript
Executable file
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());
|
|
});
|
|
});
|
|
|
|
});
|