aboutsummaryrefslogtreecommitdiffstats
path: root/tests/karma.config.js
blob: 111af7a1559da606b3ae19ae6081272febdd6c4a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888888 } /* Comment.Single */
.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { colo
/**
* ownCloud
*
* @author Vincent Petry
* @copyright 2014 Vincent Petry <pvince81@owncloud.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this library.  If not, see <http://www.gnu.org/licenses/>.
*
*/

/**
 * This node module is run by the karma executable to specify its configuration.
 *
 * The list of files from all needed JavaScript files including the ones from the
 * apps to test, and the test specs will be passed as configuration object.
 *
 * Note that it is possible to test a single app by setting the KARMA_TESTSUITE
 * environment variable to the apps name, for example "core" or "files_encryption".
 * Multiple apps can be specified by separating them with space.
 *
 * Setting the environment variable NOCOVERAGE to 1 will disable the coverage
 * preprocessor, which is needed to be able to debug tests properly in a browser.
 */

/* jshint node: true */
module.exports = function(config) {

	function findApps() {
		/*
		var fs = require('fs');
		var apps = fs.readdirSync('apps');
		return apps;
		*/
		// other apps tests don't run yet... needs further research / clean up
		return [
			'files',
			'files_trashbin',
			{
				name: 'files_sharing',
				srcFiles: [
					// only test these files, others are not ready and mess
					// up with the global namespace/classes/state
					'apps/files_sharing/js/app.js',
					'apps/files_sharing/js/sharedfilelist.js',
					'apps/files_sharing/js/share.js',
					'apps/files_sharing/js/external.js',
					'apps/files_sharing/js/public.js',
					'apps/files_sharing/js/sharetabview.js'
				],
				testFiles: ['apps/files_sharing/tests/js/*.js']
			},
			{
				name: 'files_external',
				srcFiles: [
					// only test these files, others are not ready and mess
					// up with the global namespace/classes/state
					'apps/files_external/js/app.js',
					'apps/files_external/js/mountsfilelist.js',
					'apps/files_external/js/settings.js',
					'apps/files_external/js/statusmanager.js'
				],
				testFiles: ['apps/files_external/tests/js/*.js']
			},
			{
				name: 'files_versions',
				srcFiles: [
					// need to enforce loading order...
					'apps/files_versions/js/versionmodel.js',
					'apps/files_versions/js/versioncollection.js',
					'apps/files_versions/js/versionstabview.js'
				],
				testFiles: ['apps/files_versions/tests/js/**/*.js']
			},
			{
				name: 'comments',
				srcFiles: [
					// need to enforce loading order...
					'apps/comments/js/app.js',
					'apps/comments/js/commentmodel.js',
					'apps/comments/js/commentcollection.js',
					'apps/comments/js/commentsummarymodel.js',
					'apps/comments/js/commentstabview.js',
					'apps/comments/js/filesplugin.js'
				],
				testFiles: ['apps/comments/tests/js/**/*.js']
			},
			{
				name: 'systemtags',
				srcFiles: [
					// need to enforce loading order...
					'apps/systemtags/js/app.js',
					'apps/systemtags/js/systemtagsinfoview.js',
					'apps/systemtags/js/systemtagsfilelist.js',
					'apps/systemtags/js/filesplugin.js'
				],
				testFiles: ['apps/systemtags/tests/js/**/*.js']
			},
			{
				name: 'settings',
				srcFiles: [
					'settings/js/apps.js',
					'settings/js/users/deleteHandler.js'
				],
				testFiles: [
					'settings/tests/js/appsSpec.js',
					'settings/tests/js/users/deleteHandlerSpec.js'
				]
			}
		];
	}

	// respect NOCOVERAGE env variable
	// it is useful to disable coverage for debugging
	// because the coverage preprocessor will wrap the JS files somehow
	var enableCoverage = !parseInt(process.env.NOCOVERAGE, 10);
	console.log('Coverage preprocessor: ', enableCoverage?'enabled':'disabled');

	// default apps to test when none is specified (TODO: read from filesystem ?)
	var appsToTest = process.env.KARMA_TESTSUITE;
    if (appsToTest) {
		appsToTest = appsToTest.split(' ');
	}
	else {
		appsToTest = ['core'].concat(findApps());
	}

	console.log('Apps to test: ', appsToTest);

	// read core files from core.json,
	// these are required by all apps so always need to be loaded
	// note that the loading order is important that's why they
	// are specified in a separate file
	var corePath = 'core/js/';
	var vendorPath = 'core/vendor/';
	var coreModule = require('../' + corePath + 'core.json');
	var testCore = false;
	var files = [];
	var index;
	var preprocessors = {};

	// find out what apps to test from appsToTest
	index = appsToTest.indexOf('core');
	if (index > -1) {
		appsToTest.splice(index, 1);
		testCore = true;
	}

	// extra test libs
	files.push(corePath + 'tests/lib/sinon-1.15.4.js');

	// core mocks
	files.push(corePath + 'tests/specHelper.js');

	var srcFile, i;
	// add vendor library files
	for ( i = 0; i < coreModule.vendor.length; i++ ) {
		srcFile = vendorPath + coreModule.vendor[i];
		files.push(srcFile);
	}

	// add core library files
	for ( i = 0; i < coreModule.libraries.length; i++ ) {
		srcFile = corePath + coreModule.libraries[i];
		files.push(srcFile);
	}

	// add core modules files
	for ( i = 0; i < coreModule.modules.length; i++ ) {
		srcFile = corePath + coreModule.modules[i];
		files.push(srcFile);
		if (enableCoverage) {
			preprocessors[srcFile] = 'coverage';
		}
	}

	// TODO: settings pages

	// need to test the core app as well ?
	if (testCore) {
		// core tests
		files.push(corePath + 'tests/specs/**/*.js');
	}

	function addApp(app) {
		// if only a string was specified, expand to structure
		if (typeof(app) === 'string') {
			app = {
				srcFiles: 'apps/' + app + '/js/**/*.js',
				testFiles: 'apps/' + app + '/tests/js/**/*.js'
			};
		}

		// add source files/patterns
		files = files.concat(app.srcFiles || []);
		// add test files/patterns
		files = files.concat(app.testFiles || []);
		if (enableCoverage) {
			// add coverage entry for each file/pattern
			for (var i = 0; i < app.srcFiles.length; i++) {
				preprocessors[app.srcFiles[i]] = 'coverage';
			}
		}
	}

	// add source files for apps to test
	for ( i = 0; i < appsToTest.length; i++ ) {
		addApp(appsToTest[i]);
	}

	// serve images to avoid warnings
	files.push({pattern: 'core/img/**/*', watched: false, included: false, served: true});
	
	// include core CSS
	files.push({pattern: 'core/css/*.css', watched: true, included: true, served: true});

	config.set({

		// base path, that will be used to resolve files and exclude
		basePath: '..',

		// frameworks to use
		frameworks: ['jasmine'],

		// list of files / patterns to load in the browser
		files: files,

		// list of files to exclude
		exclude: [

		],

		proxies: {
			// prevent warnings for images
			'/context.html//core/img/': 'http://localhost:9876/base/core/img/',
			'/context.html//core/css/': 'http://localhost:9876/base/core/css/',
			'/context.html//core/fonts/': 'http://localhost:9876/base/core/fonts/'
		},

		// test results reporter to use
		// possible values: 'dots', 'progress', 'junit', 'growl', 'coverage'
		reporters: ['dots', 'junit', 'coverage'],

		junitReporter: {
			outputFile: 'tests/autotest-results-js.xml'
		},

		// web server port
		port: 9876,

		preprocessors: preprocessors,

		coverageReporter: {
			dir:'tests/karma-coverage',
			reporters: [
				{ type: 'html' },
				{ type: 'cobertura' }
			]
		},

		// enable / disable colors in the output (reporters and logs)
		colors: true,


		// level of logging
		// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
		logLevel: config.LOG_INFO,

		// enable / disable watching file and executing tests whenever any file changes
		autoWatch: true,

		// Start these browsers, currently available:
		// - Chrome
		// - ChromeCanary
		// - Firefox
		// - Opera (has to be installed with `npm install karma-opera-launcher`)
		// - Safari (only Mac; has to be installed with `npm install karma-safari-launcher`)
		// - PhantomJS
		// - IE (only Windows; has to be installed with `npm install karma-ie-launcher`)
		browsers: ['PhantomJS'],

		// If browser does not capture in given timeout [ms], kill it
		captureTimeout: 60000,

		// Continuous Integration mode
		// if true, it capture browsers, run tests and exit
		singleRun: false
  });
};
ra en un servicio webcron para llamar a cron.php cada 15 minutos a través de HTTP.", "Use system's cron service to call the cron.php file every 15 minutes." : "Usar el servicio cron del sistema para llamar al archivo cron.php cada 15 minutos.", "Enable server-side encryption" : "Habilitar cifrado en el servidor", "Enable encryption" : "Habilitar cifrado", "Start migration" : "Iniciar migración", "This is used for sending out notifications." : "Esto se usa para enviar notificaciones.", "Send mode" : "Modo de envío", "Encryption" : "Cifrado", "From address" : "Desde la dirección", "mail" : "correo electrónico", "Authentication method" : "Método de autenticación", "Authentication required" : "Se necesita autenticación", "Server address" : "Dirección del servidor", "Port" : "Puerto", "Credentials" : "Credenciales", "SMTP Username" : "Nombre de usuario SMTP", "SMTP Password" : "Contraseña SMTP", "Store credentials" : "Almacenar credenciales", "Test email settings" : "Probar configuración de correo electrónico", "Send email" : "Enviar mensaje", "Log level" : "Nivel de registro", "Download logfile" : "Descargar archivo de registro", "More" : "Más", "Less" : "Menos", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "El archivo de registro es mayor de 100 MB. Descargarlo puede tardar.", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Se utiliza SQLite como base de datos. Para instalaciones mas grandes se recomiende cambiar a otro sistema de base de datos. ", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "El uso de SQLite está desaconsejado especialmente cuando se usa el cliente de escritorio para sincronizar los ficheros.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Para migrar a otra base de datos use la herramienta de línea de comandos: 'occ db:convert-type', o consulte la <a target=\"_blank\" href=\"%s\">documentación ↗</a>.", "How to do backups" : "Cómo hacer copias de seguridad", "Advanced monitoring" : "Monitorización avanzada", "Performance tuning" : "Ajuste de rendimiento", "Improving the config.php" : "Mejorar el config.php", "Theming" : "Personalizar el tema", "Hardening and security guidance" : "Guía de protección y seguridad", "Version" : "Versión", "Developer documentation" : "Documentación de desarrollador", "Experimental applications ahead" : "Aplicaciones experimentales más adelante", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Las aplicaciones experimentales no están verificadas por problemas de seguridad, recientes o conocidas por ser inestables y/o bajo un fuerte desarrollo. Instalándolas pueden causar pérdida de datos o violación de seguridades.", "by" : "por", "licensed" : "licenciado", "Documentation:" : "Documentación:", "User Documentation" : "Documentación de usuario", "Admin Documentation" : "Documentación para administradores", "Show description …" : "Mostrar descripción…", "Hide description …" : "Ocultar descripción…", "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede instalarse porque las siguientes dependencias no están cumplimentadas:", "Update to %s" : "Actualizar a %s", "Enable only for specific groups" : "Activar solamente para grupos específicos", "Uninstall App" : "Desinstalar aplicación", "Enable experimental apps" : "Habilitar aplicaciones experimentales", "No apps found for your version" : "No se han encontrado aplicaciones para su versión", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "¿Qué tal?,<br><br>este mensaje es para hacerle saber que ahora tiene una %s cuenta.<br><br>Su nombre de usuario: %s<br>Acceda en: <a href=\"%s\">%s</a><br><br>", "Cheers!" : "¡Saludos!", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hola, ¿qué tal?,\n\nEste mensaje es para hacerle saber que ahora tiene una cuenta %s.\n\nSu nombre de usuario: %s\nAcceda en: %s\n\n", "User documentation" : "Documentación de usuario", "Administrator documentation" : "Documentación del adminsitrador", "Online documentation" : "Documentación en linea", "Forum" : "Foro", "Issue tracker" : "Seguidor de problemas:", "Commercial support" : "Soporte Comercial", "Get the apps to sync your files" : "Obtener las aplicaciones para sincronizar sus archivos", "Desktop client" : "Cliente de escritorio", "Android app" : "Aplicación de Android", "iOS app" : "La aplicación de iOS", "If you want to support the project\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si quiere colaborar con el proyecto\n\t\t<a href=\"https://owncloud.org/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">participe en el desarrollo</a>\n\t\to\n\t\t¡<a href=\"https://owncloud.org/promote\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">difúndalo</a>!", "Show First Run Wizard again" : "Mostrar nuevamente el Asistente de ejecución inicial", "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "Ha usado <strong>%s</strong> de los <strong>%s</strong> disponibles", "Password" : "Contraseña", "Unable to change your password" : "No se ha podido cambiar su contraseña", "Current password" : "Contraseña actual", "New password" : "Nueva contraseña", "Change password" : "Cambiar contraseña", "Full name" : "Nombre completo", "No display name set" : "No se ha establecido ningún nombre para mostrar", "Email" : "Correo electrónico", "Your email address" : "Su dirección de correo", "Fill in an email address to enable password recovery and receive notifications" : "Introducir una dirección de correo electrónico para activar la recuperación de contraseñas y recibir notificaciones", "No email address set" : "Ninguna dirección de correo establecida", "You are member of the following groups:" : "Es miembro de los siguientes grupos:", "Profile picture" : "Foto de perfil", "Upload new" : "Subir otra", "Select new from Files" : "Seleccionar otra desde Archivos", "Remove image" : "Borrar imagen", "Either png or jpg. Ideally square but you will be able to crop it." : "Archivo PNG o JPG. Preferiblemente cuadrado, pero tendrás la posibilidad de recortarlo.", "Your avatar is provided by your original account." : "Su avatar es proporcionado por su cuenta original.", "Cancel" : "Cancelar", "Choose as profile image" : "Seleccionar como imagen de perfil", "Language" : "Idioma", "Help translate" : "Ayúdanos a traducir", "Common Name" : "Nombre común", "Valid until" : "Válido hasta", "Issued By" : "Emitido por", "Valid until %s" : "Válido hasta %s", "Import root certificate" : "Importar certificado raíz", "Developed by the {communityopen}ownCloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Desarrollado por la {communityopen}comunidad Owncloud{linkclose}, el {githubopen}código fuente{linkclose} está licenciado bajo {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", "Show storage location" : "Mostrar la ubicación del almacenamiento", "Show last log in" : "Mostrar el último inicio de sesión", "Show user backend" : "Mostrar motor de usuario", "Send email to new user" : "Enviar correo al usuario nuevo", "Show email address" : "Mostrar dirección de correo electrónico", "Username" : "Nombre de usuario", "E-Mail" : "Correo electrónico", "Create" : "Crear", "Admin Recovery Password" : "Recuperación de la contraseña de administración", "Enter the recovery password in order to recover the users files during password change" : "Introduzca la contraseña de recuperación a fin de recuperar los archivos de los usuarios durante el cambio de contraseña.", "Search Users" : "Buscar usuarios", "Add Group" : "Agregar grupo", "Group" : "Grupo", "Everyone" : "Todos", "Admins" : "Administradores", "Default Quota" : "Cuota predeterminada", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Por favor indique la cúota de almacenamiento (ej: \"512 MB\" o \"12 GB\")", "Unlimited" : "Ilimitado", "Other" : "Otro", "Full Name" : "Nombre completo", "Group Admin for" : "Grupo administrador para", "Quota" : "Cuota", "Storage Location" : "Ubicación de almacenamiento", "User Backend" : "Motor de usuario", "Last Login" : "Último inicio de sesión", "change full name" : "cambiar el nombre completo", "set new password" : "establecer nueva contraseña", "change email address" : "cambiar dirección de correo electrónico", "Default" : "Predeterminado" },"pluralForm" :"nplurals=2; plural=(n != 1);" }