mirror of
https://github.com/zhigang1992/react-native-code-push.git
synced 2026-06-10 15:49:36 +08:00
105 lines
4.8 KiB
JavaScript
105 lines
4.8 KiB
JavaScript
"use strict";
|
|
var Q = require("q");
|
|
var ServerUtil = require("./serverUtil");
|
|
var testBuilder_1 = require("./testBuilder");
|
|
var TestConfig = require("./testConfig");
|
|
var testUtil_1 = require("./testUtil");
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
/**
|
|
* Call this function to initialize the automated tests.
|
|
*/
|
|
function initializeTests(projectManager, supportedTargetPlatforms, describeTests) {
|
|
// DETERMINE PLATFORMS TO TEST //
|
|
/** The platforms to test on. */
|
|
var targetPlatforms = [];
|
|
supportedTargetPlatforms.forEach(function (supportedPlatform) {
|
|
if (testUtil_1.TestUtil.readMochaCommandLineFlag(supportedPlatform.getCommandLineFlagName()))
|
|
targetPlatforms.push(supportedPlatform);
|
|
});
|
|
// Log current configuration
|
|
console.log("Initializing tests for " + testUtil_1.TestUtil.getPluginName());
|
|
console.log(TestConfig.TestAppName + "\n" + TestConfig.TestNamespace);
|
|
console.log("Testing " + TestConfig.thisPluginPath + ".");
|
|
targetPlatforms.forEach(function (platform) {
|
|
console.log("On " + platform.getName());
|
|
});
|
|
console.log("test run directory = " + TestConfig.testRunDirectory);
|
|
console.log("updates directory = " + TestConfig.updatesDirectory);
|
|
if (TestConfig.onlyRunCoreTests)
|
|
console.log("--only running core tests--");
|
|
if (TestConfig.shouldSetup)
|
|
console.log("--setting up--");
|
|
if (TestConfig.restartEmulators)
|
|
console.log("--restarting emulators--");
|
|
// FUNCTIONS //
|
|
function cleanupTest() {
|
|
console.log("Cleaning up!");
|
|
ServerUtil.updateResponse = undefined;
|
|
ServerUtil.testMessageCallback = undefined;
|
|
ServerUtil.updateCheckCallback = undefined;
|
|
ServerUtil.testMessageResponse = undefined;
|
|
}
|
|
/**
|
|
* Sets up tests for each platform.
|
|
* Creates the test project directory and the test update directory.
|
|
* Starts required emulators.
|
|
*/
|
|
function setupTests() {
|
|
it("sets up tests correctly", function (done) {
|
|
var promises = [];
|
|
targetPlatforms.forEach(function (platform) {
|
|
promises.push(platform.getEmulatorManager().bootEmulator(TestConfig.restartEmulators));
|
|
});
|
|
console.log("Building test project.");
|
|
// create the test project
|
|
promises.push(createTestProject(TestConfig.testRunDirectory)
|
|
.then(function () {
|
|
console.log("Building update project.");
|
|
// create the update project
|
|
return createTestProject(TestConfig.updatesDirectory);
|
|
}).then(function () { return null; }));
|
|
Q.all(promises).then(function () { done(); }, function (error) { done(error); });
|
|
});
|
|
}
|
|
/**
|
|
* Creates a test project directory at the given path.
|
|
*/
|
|
function createTestProject(directory) {
|
|
return projectManager.setupProject(directory, TestConfig.templatePath, TestConfig.TestAppName, TestConfig.TestNamespace);
|
|
}
|
|
/**
|
|
* Creates and runs the tests from the projectManager and TestBuilderDescribe objects passed to initializeTests.
|
|
*/
|
|
function createAndRunTests(targetPlatform) {
|
|
describe("CodePush", function () {
|
|
before(function () {
|
|
ServerUtil.setupServer(targetPlatform);
|
|
return targetPlatform.getEmulatorManager().uninstallApplication(TestConfig.TestNamespace)
|
|
.then(projectManager.preparePlatform.bind(projectManager, TestConfig.testRunDirectory, targetPlatform))
|
|
.then(projectManager.preparePlatform.bind(projectManager, TestConfig.updatesDirectory, targetPlatform));
|
|
});
|
|
after(function () {
|
|
ServerUtil.cleanupServer();
|
|
return projectManager.cleanupAfterPlatform(TestConfig.testRunDirectory, targetPlatform).then(projectManager.cleanupAfterPlatform.bind(projectManager, TestConfig.updatesDirectory, targetPlatform));
|
|
});
|
|
testBuilder_1.TestContext.projectManager = projectManager;
|
|
testBuilder_1.TestContext.targetPlatform = targetPlatform;
|
|
// Build the tests.
|
|
describeTests(projectManager, targetPlatform);
|
|
});
|
|
}
|
|
// BEGIN TESTING //
|
|
describe("CodePush " + projectManager.getPluginName() + " Plugin", function () {
|
|
this.timeout(100 * 60 * 1000);
|
|
if (TestConfig.shouldSetup)
|
|
describe("Setting Up For Tests", function () { return setupTests(); });
|
|
else {
|
|
targetPlatforms.forEach(function (platform) {
|
|
var prefix = (TestConfig.onlyRunCoreTests ? "Core Tests " : "Tests ") + TestConfig.thisPluginPath + " on ";
|
|
describe(prefix + platform.getName(), function () { return createAndRunTests(platform); });
|
|
});
|
|
}
|
|
});
|
|
}
|
|
exports.initializeTests = initializeTests;
|