ng-cordova
Version:
[ngCordova](http://ngcordova.com/) ==========
157 lines (130 loc) • 3.89 kB
JavaScript
/**
* @ngdoc service
* @name ngCordovaMocks.cordovaDialogs
*
* @description
* A service for testing dialogs
* in an app build with ngCordova.
*/
ngCordovaMocks.factory('$cordovaDialogs', ['$q', function ($q) {
var dialogText = false;
var dialogTitle = '';
var defaultValue = '';
var promptResponse = '';
var beepCount = 0;
var useHostAbilities = true;
return {
/**
@ngdoc property
@name dialogText
@propertyOf ngCordovaMocks.cordovaDialogs
@description
The main content in the dialog.
This property should only be used in automated tests.
*/
dialogText: dialogText,
/**
@ngdoc property
@name dialogTitle
@propertyOf ngCordovaMocks.cordovaDialogs
@description
The title of the dialog.
This property should only be used in automated tests.
*/
dialogTitle: dialogTitle,
/**
@ngdoc property
@name defaultValue
@propertyOf ngCordovaMocks.cordovaDialogs
@description
The default value to be used in a prompt.
This property should only be used in automated tests.
*/
defaultValue: defaultValue,
/**
@ngdoc property
@name promptResponse
@propertyOf ngCordovaMocks.cordovaDialogs
@description
Used to simulate a user's response to a prompt.
This property should only be used in automated tests.
*/
promptResponse: promptResponse,
/**
@ngdoc property
@name buttonLabels
@propertyOf ngCordovaMocks.cordovaDialogs
@description
An array of the text of each button in the dialog.
This property should only be used in automated tests.
*/
buttonLabels: [],
/**
@ngdoc property
@name beepCount
@propertyOf ngCordovaMocks.cordovaDialogs
@description
The number of times a beep has occurred.
This property should only be used in automated tests.
*/
beepCount: beepCount,
/**
@ngdoc property
@name useHostAbilities
@propertyOf ngCordovaMocks.cordovaDialogs
@description
A flag that signals whether or not to try and use the host's
(browser or otherwise) prompting capabilities.
This property should only be used in automated tests.
*/
useHostAbilities: useHostAbilities,
alert: function (message, title, buttonName) {
var d = $q.defer();
if (this.useHostAbilities) {
// NOTE: The window.alert method doesn't support a title or callbacks.
alert(message);
d.resolve();
} else {
this.dialogText = message;
this.dialogTitle = title;
this.buttonLabels.push(buttonName);
d.resolve();
}
return d.promise;
},
confirm: function (message, title, buttonName) {
var d = $q.defer();
if (this.useHostAbilities) {
// NOTE: The window.confirm method doesn't support a title or custom button naming.
var result = confirm(message);
d.resolve(result ? 2 : 1);
} else {
this.dialogText = message;
this.dialogTitle = title;
this.buttonLabels.push(buttonName);
d.resolve(0);
}
return d.promise;
},
prompt: function (message, title, buttonLabels, defaultText) {
var d = $q.defer();
if (this.useHostAbilities) {
// NOTE: The window.prompt method doesn't support a title or custom button naming.
var result = prompt(message, defaultText);
d.resolve(result);
} else {
this.dialogText = message;
this.dialogTitle = title;
this.defaultValue = defaultText;
for (var i = 0; i < buttonLabels.length; i++) {
this.buttonLabels.push(buttonLabels[i]);
}
d.resolve(this.promptResponse);
}
return d.promise;
},
beep: function (times) {
this.beepCount = times;
}
};
}]);