| /* |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| */ |
| |
| var fs = require('fs'), |
| util = require('util'), |
| _path = require('path'), |
| tests = [], |
| packager = require('../build/packager'), |
| exec = require('child_process').exec; |
| |
| function collect(path, files, matches) { |
| matches = matches || function (path) { |
| return path.match(/test\.(\w|-)+\.js$/); |
| }; |
| |
| if (fs.statSync(path).isDirectory()) { |
| fs.readdirSync(path).forEach(function (item) { |
| collect(_path.join(path, item), files, matches); |
| }); |
| } else if (matches(path)) { |
| files.push(path); |
| } |
| } |
| |
| module.exports = { |
| node: function () { |
| console.log('starting node-based tests') |
| var jas = require("../thirdparty/jasmine/jasmine"), |
| TerminalReporter = require('./reporter').TerminalReporter, |
| jsdom, document, window; |
| |
| try { |
| jsdom = require("jsdom").jsdom; |
| document = jsdom("<html><head></head></html>"); |
| window = document.createWindow(); |
| } catch (e) { |
| //no jsDom (some people don't have compilers) |
| console.log("can't run tests in node: run jake btest instead, or install jsdom via: npm install"); |
| return; |
| } |
| |
| //Put jasmine in scope |
| Object.keys(jas).forEach(function (key) { |
| this[key] = window[key] = global[key] = jas[key]; |
| }); |
| |
| //regenerate platform file |
| packager.generate('test'); |
| |
| //load in our modules |
| var testLibName = _path.join(__dirname, '..', 'pkg', 'cordova.test.js') |
| var testLib = fs.readFileSync(testLibName, 'utf8') |
| try { |
| eval(testLib); |
| } |
| catch (e) { |
| console.log("error eval()ing " + testLibName + ": " + e) |
| console.log(e.stack) |
| throw e |
| } |
| |
| //hijack require |
| require = window.cordova.require; |
| define = window.cordova.define; |
| |
| //load in our tests |
| collect(__dirname, tests); |
| for (var x in tests) { |
| eval(fs.readFileSync(tests[x], "utf-8")); |
| } |
| |
| var env = jasmine.getEnv(); |
| env.addReporter(new TerminalReporter({ |
| color: true, |
| onComplete: process.exit |
| })); |
| |
| console.log("------------"); |
| console.log("Unit Tests:"); |
| env.execute(); |
| }, |
| browser: function () { |
| console.log('starting browser-based tests') |
| var connect = require('connect'), |
| html = fs.readFileSync(__dirname + "/suite.html", "utf-8"), |
| doc, |
| modules, |
| specs, |
| app = connect( |
| connect.static(_path.join(__dirname, '..', 'thirdparty')), |
| connect.static(__dirname), |
| connect.router(function (app) { |
| app.get('/cordova.test.js', function (req, res) { |
| res.writeHead(200, { |
| "Cache-Control": "no-cache", |
| "Content-Type": "text/javascript" |
| }); |
| res.end(packager.bundle('test')); |
| }), |
| app.get('/', function (req, res) { |
| res.writeHead(200, { |
| "Cache-Control": "no-cache", |
| "Content-Type": "text/html" |
| }); |
| |
| //create the script tags to include |
| tests = []; |
| collect(__dirname, tests); |
| specs = tests.map(function (file, path) { |
| return '<script src="' + file.replace(/^.*\/test\//, "/") + |
| '" type="text/javascript" charset="utf-8"></script>'; |
| }).join(''); |
| |
| //inject in the test script includes and write the document |
| doc = html.replace(/<!-- ##TESTS## -->/g, specs); |
| res.end(doc); |
| }); |
| }) |
| ); |
| |
| app.listen(3000); |
| |
| process.stdout.write("Test Server running on:\n"); |
| process.stdout.write("http://127.0.0.1:3000\n"); |
| |
| exec('open http://127.0.0.1:3000'); |
| } |
| }; |