2014-01-12 17:57:53 +00:00
|
|
|
/**
|
2018-07-17 20:51:01 +00:00
|
|
|
* 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/>.
|
|
|
|
*
|
|
|
|
*/
|
2014-01-12 17:57:53 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* 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.
|
|
|
|
*
|
2014-01-27 20:15:21 +00:00
|
|
|
* 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.
|
2014-01-12 17:57:53 +00:00
|
|
|
*/
|
2014-01-27 20:15:21 +00:00
|
|
|
|
|
|
|
/* jshint node: true */
|
2014-01-12 17:57:53 +00:00
|
|
|
module.exports = function(config) {
|
2014-01-27 20:15:21 +00:00
|
|
|
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
|
2014-05-21 10:54:34 +00:00
|
|
|
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',
|
2014-06-02 13:59:06 +00:00
|
|
|
'apps/files_sharing/js/sharedfilelist.js',
|
2015-01-21 10:26:54 +00:00
|
|
|
'apps/files_sharing/js/share.js',
|
2016-10-10 08:15:42 +00:00
|
|
|
'apps/files_sharing/js/sharebreadcrumbview.js',
|
2015-09-15 08:27:33 +00:00
|
|
|
'apps/files_sharing/js/public.js',
|
2017-04-18 14:58:25 +00:00
|
|
|
'apps/files_sharing/js/sharetabview.js',
|
2018-10-16 07:02:48 +00:00
|
|
|
'apps/files_sharing/js/files_drop.js',
|
|
|
|
'apps/files_sharing/js/templates.js',
|
2014-05-21 10:54:34 +00:00
|
|
|
],
|
|
|
|
testFiles: ['apps/files_sharing/tests/js/*.js']
|
2014-06-13 08:02:19 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
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',
|
2018-10-19 13:54:22 +00:00
|
|
|
'apps/files_external/js/templates.js',
|
2014-10-31 10:41:07 +00:00
|
|
|
'apps/files_external/js/mountsfilelist.js',
|
2015-11-20 15:00:16 +00:00
|
|
|
'apps/files_external/js/settings.js',
|
|
|
|
'apps/files_external/js/statusmanager.js'
|
2014-06-13 08:02:19 +00:00
|
|
|
],
|
|
|
|
testFiles: ['apps/files_external/tests/js/*.js']
|
2014-09-11 13:56:00 +00:00
|
|
|
},
|
2015-09-01 17:29:55 +00:00
|
|
|
{
|
|
|
|
name: 'files_versions',
|
|
|
|
srcFiles: [
|
|
|
|
// need to enforce loading order...
|
|
|
|
'apps/files_versions/js/versionmodel.js',
|
2018-10-01 18:53:35 +00:00
|
|
|
'apps/files_versions/js/templates.js',
|
2015-09-01 17:29:55 +00:00
|
|
|
'apps/files_versions/js/versioncollection.js',
|
|
|
|
'apps/files_versions/js/versionstabview.js'
|
|
|
|
],
|
|
|
|
testFiles: ['apps/files_versions/tests/js/**/*.js']
|
|
|
|
},
|
2016-02-02 14:13:45 +00:00
|
|
|
{
|
|
|
|
name: 'comments',
|
|
|
|
srcFiles: [
|
|
|
|
// need to enforce loading order...
|
|
|
|
'apps/comments/js/app.js',
|
2018-10-01 17:11:22 +00:00
|
|
|
'apps/comments/js/templates.js',
|
2017-11-01 10:27:04 +00:00
|
|
|
'apps/comments/js/vendor/Caret.js/dist/jquery.caret.min.js',
|
|
|
|
'apps/comments/js/vendor/At.js/dist/js/jquery.atwho.min.js',
|
2016-02-02 14:13:45 +00:00
|
|
|
'apps/comments/js/commentmodel.js',
|
|
|
|
'apps/comments/js/commentcollection.js',
|
2016-02-03 15:18:14 +00:00
|
|
|
'apps/comments/js/commentsummarymodel.js',
|
2018-03-26 20:04:00 +00:00
|
|
|
'apps/comments/js/commentsmodifymenu.js',
|
2016-02-02 14:13:45 +00:00
|
|
|
'apps/comments/js/commentstabview.js',
|
2016-02-03 12:00:55 +00:00
|
|
|
'apps/comments/js/filesplugin.js'
|
2016-02-02 14:13:45 +00:00
|
|
|
],
|
|
|
|
testFiles: ['apps/comments/tests/js/**/*.js']
|
|
|
|
},
|
2015-11-30 14:40:17 +00:00
|
|
|
{
|
|
|
|
name: 'systemtags',
|
|
|
|
srcFiles: [
|
|
|
|
// need to enforce loading order...
|
|
|
|
'apps/systemtags/js/app.js',
|
|
|
|
'apps/systemtags/js/systemtagsinfoview.js',
|
2017-06-09 07:09:41 +00:00
|
|
|
'apps/systemtags/js/systemtagsinfoviewtoggleview.js',
|
2016-02-08 10:43:42 +00:00
|
|
|
'apps/systemtags/js/systemtagsfilelist.js',
|
2015-11-30 14:40:17 +00:00
|
|
|
'apps/systemtags/js/filesplugin.js'
|
|
|
|
],
|
|
|
|
testFiles: ['apps/systemtags/tests/js/**/*.js']
|
|
|
|
},
|
2014-09-11 13:56:00 +00:00
|
|
|
{
|
|
|
|
name: 'settings',
|
|
|
|
srcFiles: [
|
2015-02-23 14:29:25 +00:00
|
|
|
'settings/js/apps.js',
|
2017-04-25 09:31:55 +00:00
|
|
|
'core/vendor/marked/marked.min.js'
|
2015-02-23 14:29:25 +00:00
|
|
|
]
|
2014-09-11 13:56:00 +00:00
|
|
|
}
|
|
|
|
];
|
2014-01-27 20:15:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// 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);
|
2018-07-17 20:51:01 +00:00
|
|
|
console.log(
|
|
|
|
'Coverage preprocessor: ',
|
|
|
|
enableCoverage ? 'enabled' : 'disabled'
|
|
|
|
);
|
2014-01-27 20:15:21 +00:00
|
|
|
|
2014-01-12 17:57:53 +00:00
|
|
|
// default apps to test when none is specified (TODO: read from filesystem ?)
|
2014-01-27 20:15:21 +00:00
|
|
|
var appsToTest = process.env.KARMA_TESTSUITE;
|
2018-07-17 20:51:01 +00:00
|
|
|
if (appsToTest) {
|
2014-01-27 20:15:21 +00:00
|
|
|
appsToTest = appsToTest.split(' ');
|
2018-07-17 20:51:01 +00:00
|
|
|
} else {
|
2014-01-27 20:15:21 +00:00
|
|
|
appsToTest = ['core'].concat(findApps());
|
|
|
|
}
|
|
|
|
|
|
|
|
console.log('Apps to test: ', appsToTest);
|
2014-01-12 17:57:53 +00:00
|
|
|
|
|
|
|
// 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/';
|
2014-11-03 10:18:52 +00:00
|
|
|
var vendorPath = 'core/vendor/';
|
2014-01-27 20:15:21 +00:00
|
|
|
var coreModule = require('../' + corePath + 'core.json');
|
2014-01-12 17:57:53 +00:00
|
|
|
var testCore = false;
|
|
|
|
var files = [];
|
|
|
|
var index;
|
2014-01-27 20:15:21 +00:00
|
|
|
var preprocessors = {};
|
2014-01-12 17:57:53 +00:00
|
|
|
|
|
|
|
// find out what apps to test from appsToTest
|
|
|
|
index = appsToTest.indexOf('core');
|
|
|
|
if (index > -1) {
|
|
|
|
appsToTest.splice(index, 1);
|
|
|
|
testCore = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
// core mocks
|
|
|
|
files.push(corePath + 'tests/specHelper.js');
|
|
|
|
|
2014-06-24 14:27:39 +00:00
|
|
|
var srcFile, i;
|
2014-11-04 11:51:29 +00:00
|
|
|
// add vendor library files
|
2018-07-17 20:51:01 +00:00
|
|
|
for (i = 0; i < coreModule.vendor.length; i++) {
|
2014-11-04 11:51:29 +00:00
|
|
|
srcFile = vendorPath + coreModule.vendor[i];
|
|
|
|
files.push(srcFile);
|
|
|
|
}
|
|
|
|
|
2014-01-27 20:15:21 +00:00
|
|
|
// add core library files
|
2018-07-17 20:51:01 +00:00
|
|
|
for (i = 0; i < coreModule.libraries.length; i++) {
|
2014-06-24 14:27:39 +00:00
|
|
|
srcFile = corePath + coreModule.libraries[i];
|
2014-01-27 20:15:21 +00:00
|
|
|
files.push(srcFile);
|
|
|
|
}
|
|
|
|
|
|
|
|
// add core modules files
|
2018-07-17 20:51:01 +00:00
|
|
|
for (i = 0; i < coreModule.modules.length; i++) {
|
2014-06-24 14:27:39 +00:00
|
|
|
srcFile = corePath + coreModule.modules[i];
|
2014-01-27 20:15:21 +00:00
|
|
|
files.push(srcFile);
|
|
|
|
if (enableCoverage) {
|
|
|
|
preprocessors[srcFile] = 'coverage';
|
|
|
|
}
|
2014-01-12 17:57:53 +00:00
|
|
|
}
|
|
|
|
|
2014-01-27 20:15:21 +00:00
|
|
|
// TODO: settings pages
|
|
|
|
|
2014-01-12 17:57:53 +00:00
|
|
|
// need to test the core app as well ?
|
|
|
|
if (testCore) {
|
|
|
|
// core tests
|
2015-07-13 15:31:47 +00:00
|
|
|
files.push(corePath + 'tests/specs/**/*.js');
|
2014-01-12 17:57:53 +00:00
|
|
|
}
|
|
|
|
|
2014-05-21 10:54:34 +00:00
|
|
|
function addApp(app) {
|
|
|
|
// if only a string was specified, expand to structure
|
2018-07-17 20:51:01 +00:00
|
|
|
if (typeof app === 'string') {
|
2014-05-21 10:54:34 +00:00
|
|
|
app = {
|
2015-07-13 15:31:47 +00:00
|
|
|
srcFiles: 'apps/' + app + '/js/**/*.js',
|
|
|
|
testFiles: 'apps/' + app + '/tests/js/**/*.js'
|
2014-05-21 10:54:34 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
// add source files/patterns
|
|
|
|
files = files.concat(app.srcFiles || []);
|
|
|
|
// add test files/patterns
|
|
|
|
files = files.concat(app.testFiles || []);
|
2014-01-27 20:15:21 +00:00
|
|
|
if (enableCoverage) {
|
2014-05-21 10:54:34 +00:00
|
|
|
// add coverage entry for each file/pattern
|
|
|
|
for (var i = 0; i < app.srcFiles.length; i++) {
|
|
|
|
preprocessors[app.srcFiles[i]] = 'coverage';
|
|
|
|
}
|
2014-01-27 20:15:21 +00:00
|
|
|
}
|
2014-05-21 10:54:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// add source files for apps to test
|
2018-07-17 20:51:01 +00:00
|
|
|
for (i = 0; i < appsToTest.length; i++) {
|
2014-05-21 10:54:34 +00:00
|
|
|
addApp(appsToTest[i]);
|
2014-01-12 17:57:53 +00:00
|
|
|
}
|
|
|
|
|
2014-04-11 13:25:40 +00:00
|
|
|
// serve images to avoid warnings
|
2018-07-17 20:51:01 +00:00
|
|
|
files.push({
|
|
|
|
pattern: 'core/img/**/*',
|
|
|
|
watched: false,
|
|
|
|
included: false,
|
|
|
|
served: true
|
|
|
|
});
|
|
|
|
files.push({
|
|
|
|
pattern: 'core/css/images/*',
|
|
|
|
watched: false,
|
|
|
|
included: false,
|
|
|
|
served: true
|
|
|
|
});
|
2018-03-26 20:04:00 +00:00
|
|
|
|
2014-06-24 14:27:39 +00:00
|
|
|
// include core CSS
|
2018-07-17 20:51:01 +00:00
|
|
|
files.push({
|
|
|
|
pattern: 'core/css/*.css',
|
|
|
|
watched: true,
|
|
|
|
included: true,
|
|
|
|
served: true
|
|
|
|
});
|
|
|
|
files.push({
|
|
|
|
pattern: 'tests/css/*.css',
|
|
|
|
watched: true,
|
|
|
|
included: true,
|
|
|
|
served: true
|
|
|
|
});
|
2014-04-11 13:25:40 +00:00
|
|
|
|
2017-01-13 10:46:06 +00:00
|
|
|
// Allow fonts
|
2018-07-17 20:51:01 +00:00
|
|
|
files.push({
|
|
|
|
pattern: 'core/fonts/*',
|
|
|
|
watched: false,
|
|
|
|
included: false,
|
|
|
|
served: true
|
|
|
|
});
|
2017-01-13 10:46:06 +00:00
|
|
|
|
2014-01-12 17:57:53 +00:00
|
|
|
config.set({
|
|
|
|
// base path, that will be used to resolve files and exclude
|
|
|
|
basePath: '..',
|
|
|
|
|
|
|
|
// frameworks to use
|
2017-10-20 15:11:59 +00:00
|
|
|
frameworks: ['jasmine', 'jasmine-sinon', 'viewport'],
|
2014-01-12 17:57:53 +00:00
|
|
|
|
|
|
|
// list of files / patterns to load in the browser
|
|
|
|
files: files,
|
|
|
|
|
|
|
|
// list of files to exclude
|
2018-07-17 20:51:01 +00:00
|
|
|
exclude: [],
|
2014-01-12 17:57:53 +00:00
|
|
|
|
2014-04-11 13:25:40 +00:00
|
|
|
proxies: {
|
|
|
|
// prevent warnings for images
|
2017-01-10 12:50:22 +00:00
|
|
|
'/base/tests/img/': 'http://localhost:9876/base/core/img/',
|
|
|
|
'/base/tests/css/': 'http://localhost:9876/base/core/css/',
|
2017-01-13 10:49:37 +00:00
|
|
|
'/base/core/css/images/': 'http://localhost:9876/base/core/css/images/',
|
2017-01-10 12:50:22 +00:00
|
|
|
'/actions/': 'http://localhost:9876/base/core/img/actions/',
|
2017-01-13 10:46:06 +00:00
|
|
|
'/base/core/fonts/': 'http://localhost:9876/base/core/fonts/'
|
2014-04-11 13:25:40 +00:00
|
|
|
},
|
|
|
|
|
2014-01-12 17:57:53 +00:00
|
|
|
// test results reporter to use
|
|
|
|
// possible values: 'dots', 'progress', 'junit', 'growl', 'coverage'
|
2014-01-20 23:57:18 +00:00
|
|
|
reporters: ['dots', 'junit', 'coverage'],
|
2014-01-12 17:57:53 +00:00
|
|
|
|
|
|
|
junitReporter: {
|
|
|
|
outputFile: 'tests/autotest-results-js.xml'
|
|
|
|
},
|
|
|
|
|
|
|
|
// web server port
|
|
|
|
port: 9876,
|
|
|
|
|
2014-01-27 20:15:21 +00:00
|
|
|
preprocessors: preprocessors,
|
2014-01-20 23:57:18 +00:00
|
|
|
|
|
|
|
coverageReporter: {
|
2018-07-17 20:51:01 +00:00
|
|
|
dir: 'tests/karma-coverage',
|
2014-01-20 23:57:18 +00:00
|
|
|
reporters: [
|
|
|
|
{ type: 'html' },
|
2016-11-08 19:42:51 +00:00
|
|
|
{ type: 'cobertura' },
|
2017-01-13 10:49:37 +00:00
|
|
|
{ type: 'lcovonly' }
|
2014-01-20 23:57:18 +00:00
|
|
|
]
|
|
|
|
},
|
2014-01-12 17:57:53 +00:00
|
|
|
|
|
|
|
// 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
|
2014-04-08 15:21:11 +00:00
|
|
|
autoWatch: true,
|
2014-01-12 17:57:53 +00:00
|
|
|
|
|
|
|
// 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`)
|
2018-07-17 20:51:01 +00:00
|
|
|
// use PhantomJS_debug for extra local debug
|
2014-01-12 17:57:53 +00:00
|
|
|
browsers: ['PhantomJS'],
|
|
|
|
|
2018-07-17 20:51:01 +00:00
|
|
|
plugins: [
|
|
|
|
'karma-phantomjs-launcher',
|
|
|
|
'karma-coverage',
|
|
|
|
'karma-jasmine',
|
|
|
|
'karma-jasmine-sinon',
|
|
|
|
'karma-viewport',
|
|
|
|
'karma-junit-reporter'
|
|
|
|
],
|
|
|
|
// you can define custom flags
|
|
|
|
customLaunchers: {
|
|
|
|
PhantomJS_debug: {
|
|
|
|
base: 'PhantomJS',
|
|
|
|
debug: true
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2014-01-12 17:57:53 +00:00
|
|
|
// 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
|
2018-07-17 20:51:01 +00:00
|
|
|
});
|
2014-01-12 17:57:53 +00:00
|
|
|
};
|