Skip to content

Commit

Permalink
Add test for audio channels in same app
Browse files Browse the repository at this point in the history
  • Loading branch information
evanxd committed Apr 17, 2015
1 parent a2708df commit 01ff922
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 15 deletions.
15 changes: 7 additions & 8 deletions apps/system/js/audio_channel_policy.js
Expand Up @@ -144,7 +144,8 @@
isNewAudioChannelsAppPlaying = true;
}
});
activeAudioChannels.forEach((audioChannel) => {
!isNewAudioChannelsAppPlaying &&
activeAudioChannels.forEach((audioChannel) => {
var activeAudioChannelName = audioChannel.name;
var results = AUDIO_CHANNEL_COMPETITION_RESULTS
[activeAudioChannelName][newAudioChannelName];
Expand All @@ -170,13 +171,11 @@
audioChannel.setPolicy(policy);
this.debug('Policy for ' + audioChannel.instanceID +
': ' + JSON.stringify(policy));
if (!isNewAudioChannelsAppPlaying) {
isAllowedToPlayForNewAudioChannel.push(results.newAudioChannel);
results.newAudioChannel && isNeededToFadeOutForNewAudioChannel.push(
this._isNeededToFadeOutForNewAudioChannel
(activeAudioChannelName, newAudioChannelName)
);
}
isAllowedToPlayForNewAudioChannel.push(results.newAudioChannel);
results.newAudioChannel && isNeededToFadeOutForNewAudioChannel.push(
this._isNeededToFadeOutForNewAudioChannel
(activeAudioChannelName, newAudioChannelName)
);
});
// Normal channel could not play in background.
if (newAudioChannelName === 'normal' &&
Expand Down
70 changes: 63 additions & 7 deletions apps/system/test/unit/audio_channel_policy_test.js
Expand Up @@ -262,21 +262,76 @@ suite('system/AudioChannelPolicy', function() {
);
});

function checkPolicy(audioChannels, policy) {
test('All audio channels belong to same app', function() {
checkPolicy(
[
{ newAudioChannel: 'normal', activeAudioChannels: 'content' },
{ newAudioChannel: 'telephony', activeAudioChannels: 'content' },
{ newAudioChannel: 'alarm', activeAudioChannels: 'telephony' },
{ newAudioChannel: 'ringer', activeAudioChannels: 'telephony' },
{ newAudioChannel: 'notification', activeAudioChannels: 'telephony' },
],
{
newAudioChannel: {
isAllowedToPlay: true,
isNeededToFadeOut: false,
},
// Do nothing for active audio channels.
activeAudioChannels: {}
},
// All audio channels belong to same app.
true
);

checkPolicy(
{
newAudioChannel: 'normal',
activeAudioChannels: [
'content', 'alarm', 'system', 'ringer', 'telephony',
'notification', 'publicNotification'
]
},
{
newAudioChannel: {
isAllowedToPlay: true,
isNeededToFadeOut: false,
},
activeAudioChannels: [{}, {}, {}, {}, {}, {}, {}]
},
true
);
});

/**
* Check the policies.
*
* @param {Array|Object} audioChannels
* The audio channels for generating policies.
* @param {Object} expectedPolicy
* The policy for the audio channels.
* @param {Boolean} [isSameApp]
* If true, the audio channels belong to same app.
* Otherwise each audio channel belong to different app.
*/
function checkPolicy(audioChannels, expectedPolicy, isSameApp) {
var appID = 0;
audioChannels = Array.isArray(audioChannels) ?
audioChannels : [audioChannels];
policy.activeAudioChannels = Array.isArray(policy.activeAudioChannels) ?
policy.activeAudioChannels : [policy.activeAudioChannels];
expectedPolicy.activeAudioChannels =
Array.isArray(expectedPolicy.activeAudioChannels) ?
expectedPolicy.activeAudioChannels :
[expectedPolicy.activeAudioChannels];
audioChannels.map(function(obj) {
var activeAudioChannels = new Map();
obj.activeAudioChannels = Array.isArray(obj.activeAudioChannels) ?
obj.activeAudioChannels : [obj.activeAudioChannels];
var appID = 0;
var newAudioChannel =
new MockAudioChannelController(appID, obj.newAudioChannel);
// Array to map.
obj.activeAudioChannels.forEach(function(audioChannel, i) {
var appID = i + 1;
if (!isSameApp) {
appID++;
}
activeAudioChannels.set(i,
new MockAudioChannelController(appID, audioChannel));
});
Expand All @@ -288,11 +343,12 @@ suite('system/AudioChannelPolicy', function() {
var newAudioChannel = obj.newAudioChannel;
var activeAudioChannels = obj.activeAudioChannels;
subject.applyPolicy(newAudioChannel, activeAudioChannels);
assert.deepEqual(newAudioChannel._policy, policy.newAudioChannel);
assert.deepEqual(newAudioChannel._policy,
expectedPolicy.newAudioChannel);
activeAudioChannels.forEach(function(audioChannel, i) {
assert.deepEqual(
audioChannel._policy,
policy.activeAudioChannels[i]
expectedPolicy.activeAudioChannels[i]
);
});
});
Expand Down

0 comments on commit 01ff922

Please sign in to comment.