realm-js/tests/index.js

98 lines
3.1 KiB
JavaScript

////////////////////////////////////////////////////////////////////////////
//
// Copyright 2016 Realm Inc.
//
// Licensed 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.
//
////////////////////////////////////////////////////////////////////////////
/* eslint-env es6, node */
/* eslint-disable no-console */
'use strict';
const fs = require('fs');
const path = require('path');
const mockery = require('mockery');
function runTests() {
const Realm = require('realm');
const RealmTests = require('./js');
RealmTests.registerTests({
WorkerTests: require('./js/worker-tests'),
});
const testNames = RealmTests.getTestNames();
let passed = true;
// Create this method with appropriate implementation for Node testing.
Realm.copyBundledRealmFiles = function() {
let sourceDir = path.join(__dirname, 'data');
let destinationDir = path.dirname(Realm.defaultPath);
for (let filename of fs.readdirSync(sourceDir)) {
let src = path.join(sourceDir, filename);
let dest = path.join(destinationDir, filename);
// If the destination file already exists, then don't overwrite it.
try {
fs.accessSync(dest);
continue;
} catch (e) {}
fs.writeFileSync(dest, fs.readFileSync(src));
}
};
return Object.keys(testNames).reduce((suitePromiseChain, suiteName) => {
return suitePromiseChain.then(() => {
console.log('Starting ' + suiteName);
return testNames[suiteName].reduce((testPromiseChain, testName) => {
return testPromiseChain.then(() => {
return RealmTests.runTest(suiteName, 'beforeEach');
}).then(() => {
return RealmTests.runTest(suiteName, testName);
}).then(() => {
console.log('+ ' + testName);
}, (err) => {
console.warn('- ' + testName);
console.warn(err.message || err);
passed = false;
}).then(() => {
return RealmTests.runTest(suiteName, 'afterEach');
});
}, Promise.resolve());
});
}, Promise.resolve()).then(() => passed);
}
if (require.main == module) {
mockery.enable();
mockery.warnOnUnregistered(false);
mockery.registerMock('realm', require('..'));
runTests().then(
(passed) => {
if (!passed) {
process.exit(1);
}
},
(err) => {
console.error(err);
process.exit(1);
}
);
}