diff --git a/.gitignore b/.gitignore index 8c8b61d701..25cb1b227f 100644 --- a/.gitignore +++ b/.gitignore @@ -88,6 +88,7 @@ nbproject # Tests - auto-generated files /data-autotest /tests/coverage* +/tests/karma-coverage /tests/autoconfig* /tests/autotest* /tests/data/lorem-copy.txt diff --git a/autotest-js.sh b/autotest-js.sh index 78f4948e7a..8b9a106b02 100755 --- a/autotest-js.sh +++ b/autotest-js.sh @@ -33,5 +33,5 @@ then exit 2 fi -KARMA_TESTSUITE="$1" $KARMA start tests/karma.config.js --single-run +NODE_PATH='build/node_modules' KARMA_TESTSUITE="$1" $KARMA start tests/karma.config.js --single-run diff --git a/core/js/core.json b/core/js/core.json index 79cfc42f58..4beab7cf79 100644 --- a/core/js/core.json +++ b/core/js/core.json @@ -1,28 +1,23 @@ { + "libraries": [ + "jquery-1.10.0.min.js", + "jquery-migrate-1.2.1.min.js", + "jquery-ui-1.10.0.custom.js", + "jquery-showpassword.js", + "jquery.infieldlabel.js", + "jquery.placeholder.js", + "jquery-tipsy.js" + ], "modules": [ - "jquery-1.10.0.min.js", - "jquery-migrate-1.2.1.min.js", - "jquery-ui-1.10.0.custom.js", - "jquery-showpassword.js", - "jquery.infieldlabel.js", - "jquery.placeholder.js", - "jquery-tipsy.js", - "compatibility.js", - "jquery.ocdialog.js", - "oc-dialogs.js", - "js.js", - "octemplate.js", - "eventsource.js", - "config.js", - "multiselect.js", - "search.js", - "router.js", - "oc-requesttoken.js", - "styles.js", - "apps.js", - "fixes.js", - "jquery-ui-2.10.0.custom.js", - "jquery-tipsy.js", - "jquery.ocdialog.js" + "compatibility.js", + "jquery.ocdialog.js", + "oc-dialogs.js", + "js.js", + "octemplate.js", + "eventsource.js", + "config.js", + "multiselect.js", + "router.js", + "oc-requesttoken.js" ] } diff --git a/tests/karma.config.js b/tests/karma.config.js index f73ade0f3c..529bd31338 100644 --- a/tests/karma.config.js +++ b/tests/karma.config.js @@ -29,25 +29,52 @@ * 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']; + } + + // 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 defaultApps = 'core files'; - var appsToTest = process.env.KARMA_TESTSUITE || defaultApps; + 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 coreFiles = require('../' + corePath + 'core.json').modules; + var coreModule = require('../' + corePath + 'core.json'); var testCore = false; var files = []; var index; + var preprocessors = {}; // find out what apps to test from appsToTest - appsToTest = appsToTest.split(' '); index = appsToTest.indexOf('core'); if (index > -1) { appsToTest.splice(index, 1); @@ -60,11 +87,23 @@ module.exports = function(config) { // core mocks files.push(corePath + 'tests/specHelper.js'); - // add core files - for ( var i = 0; i < coreFiles.length; i++ ) { - files.push( corePath + coreFiles[i] ); + // add core library files + for ( var i = 0; i < coreModule.libraries.length; i++ ) { + var srcFile = corePath + coreModule.libraries[i]; + files.push(srcFile); } + // add core modules files + for ( var i = 0; i < coreModule.modules.length; i++ ) { + var 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 @@ -73,7 +112,11 @@ module.exports = function(config) { for ( var i = 0; i < appsToTest.length; i++ ) { // add app JS - files.push('apps/' + appsToTest[i] + '/js/*.js'); + var srcFile = 'apps/' + appsToTest[i] + '/js/*.js'; + files.push(srcFile); + if (enableCoverage) { + preprocessors[srcFile] = 'coverage'; + } // add test specs files.push('apps/' + appsToTest[i] + '/tests/js/*.js'); } @@ -83,7 +126,6 @@ module.exports = function(config) { // base path, that will be used to resolve files and exclude basePath: '..', - // frameworks to use frameworks: ['jasmine'], @@ -106,9 +148,7 @@ module.exports = function(config) { // web server port port: 9876, - preprocessors: { - 'apps/files/js/*.js': 'coverage' - }, + preprocessors: preprocessors, coverageReporter: { dir:'tests/karma-coverage',