blob: e2efba20bf7c43903d07f4e9f10c1951c710e88e [file] [log] [blame]
#!/usr/bin/env node
'use strict';
var watch = require('glob-watcher');
var http_server = require('http-server');
const { debounce } = require('lodash');
var browserify = require('browserify');
var fs = require('fs');
var queryParams = {};
if (process.env.ADAPTERS) {
queryParams.adapters = process.env.ADAPTERS;
}
if (process.env.VIEW_ADAPTERS) {
queryParams.viewAdapters = process.env.VIEW_ADAPTERS;
}
if (process.env.AUTO_COMPACTION) {
queryParams.autoCompaction = true;
}
if (process.env.POUCHDB_SRC) {
queryParams.src = process.env.POUCHDB_SRC;
}
if (process.env.PLUGINS) {
queryParams.plugins = process.env.PLUGINS;
}
if (process.env.COUCH_HOST) {
queryParams.couchHost = process.env.COUCH_HOST;
}
if (process.env.ITERATIONS) {
queryParams.iterations = process.env.ITERATIONS;
}
if (process.env.SRC_ROOT) {
queryParams.srcRoot = process.env.SRC_ROOT;
}
if (process.env.USE_MINIFIED) {
queryParams.useMinified = process.env.USE_MINIFIED;
}
var rebuildPromise = Promise.resolve();
function rebuildPouch() {
const buildPouchDB = require('./build-pouchdb');
rebuildPromise = rebuildPromise.then(buildPouchDB).then(function () {
console.log('Rebuilt packages/node_modules/pouchdb');
}).catch(console.error);
return rebuildPromise;
}
function browserifyPromise(src, dest) {
return new Promise(function (resolve, reject) {
browserify(src, {debug: true}).bundle().pipe(fs.createWriteStream(dest))
.on('finish', resolve)
.on('error', reject);
});
}
function rebuildTestUtils() {
rebuildPromise = rebuildPromise.then(function () {
return browserifyPromise('tests/integration/utils.js',
'tests/integration/utils-bundle.js');
}).then(function () {
console.log('Rebuilt tests/integration/utils-bundle.js');
}).catch(console.error);
return rebuildPromise;
}
function rebuildPerf() {
rebuildPromise = rebuildPromise.then(function () {
return browserifyPromise('tests/performance/index.js',
'tests/performance-bundle.js');
}).then(function () {
console.log('Rebuilt tests/performance-bundle.js');
}).catch(console.error);
return rebuildPromise;
}
function watchAll() {
watch(['packages/node_modules/*/src/**/*.js'],
debounce(rebuildPouch, 700, {leading: true}));
watch(['tests/integration/utils.js'],
debounce(rebuildTestUtils, 700, {leading: true}));
watch(['tests/performance/**/*.js'],
debounce(rebuildPerf, 700, {leading: true}));
}
var HTTP_PORT = 8000;
var serversStarted;
var readyCallback;
function startServers(callback) {
readyCallback = callback;
http_server.createServer().listen(HTTP_PORT, function () {
var testRoot = 'http://127.0.0.1:' + HTTP_PORT;
const query = new URLSearchParams(queryParams);
console.log(`Integration tests: ${testRoot}/tests/integration/?${query}`);
console.log(`Map/reduce tests: ${testRoot}/tests/mapreduce/?${query}`);
console.log(`pouchdb-find tests: ${testRoot}/tests/find/?${query}`);
console.log(`Performance tests: ${testRoot}/tests/performance/?${query}`);
serversStarted = true;
checkReady();
});
}
function checkReady() {
if (serversStarted && readyCallback) {
readyCallback();
}
}
if (require.main === module) {
startServers();
watchAll();
} else {
module.exports.start = startServers;
}