From 9eeddcab6e9692fbcdbe16dd8c4c89738d67f0f7 Mon Sep 17 00:00:00 2001 From: Salakar Date: Sat, 24 Mar 2018 02:02:59 +0000 Subject: [PATCH] ignore --- tests-new/android/app/build.gradle | 6 +- .../main/java/com/testing/MainActivity.java | 2 +- .../java/com/testing/MainApplication.java | 8 +- tests-new/android/settings.gradle | 4 + tests-new/app.js | 22 +-- tests-new/bridge/env/node/index.js | 61 +++++++ tests-new/bridge/env/node/vm.js | 158 ++++++++++++++++++ tests-new/bridge/env/node/ws.js | 12 ++ tests-new/bridge/env/rn.js | 28 ++++ tests-new/e2e/bridge.spec.js | 60 +++++++ tests-new/e2e/example.spec.js | 31 +++- tests-new/e2e/mocha.opts | 3 +- tests-new/index.js | 2 +- tests-new/package-lock.json | 126 +++++++------- tests-new/package.json | 9 +- 15 files changed, 447 insertions(+), 85 deletions(-) create mode 100644 tests-new/bridge/env/node/index.js create mode 100644 tests-new/bridge/env/node/vm.js create mode 100644 tests-new/bridge/env/node/ws.js create mode 100644 tests-new/bridge/env/rn.js create mode 100755 tests-new/e2e/bridge.spec.js diff --git a/tests-new/android/app/build.gradle b/tests-new/android/app/build.gradle index 2f7f3bab..fce8183a 100755 --- a/tests-new/android/app/build.gradle +++ b/tests-new/android/app/build.gradle @@ -87,9 +87,13 @@ dependencies { transitive = false } + implementation(project(':react-native-restart')) { + transitive = false + } + compile fileTree(dir: "libs", include: ["*.jar"]) compile "com.google.android.gms:play-services-base:$firebaseVersion" -// compile "com.google.firebase:firebase-ads:$firebaseVersion" + compile "com.google.firebase:firebase-ads:$firebaseVersion" compile "com.google.firebase:firebase-auth:$firebaseVersion" compile "com.google.firebase:firebase-config:$firebaseVersion" compile "com.google.firebase:firebase-core:$firebaseVersion" diff --git a/tests-new/android/app/src/main/java/com/testing/MainActivity.java b/tests-new/android/app/src/main/java/com/testing/MainActivity.java index 50575705..286ab301 100755 --- a/tests-new/android/app/src/main/java/com/testing/MainActivity.java +++ b/tests-new/android/app/src/main/java/com/testing/MainActivity.java @@ -31,7 +31,7 @@ public class MainActivity extends ReactActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); -// checkWindowPerms(); + checkWindowPerms(); } public void checkWindowPerms() { diff --git a/tests-new/android/app/src/main/java/com/testing/MainApplication.java b/tests-new/android/app/src/main/java/com/testing/MainApplication.java index 0039f9d0..653ceee8 100755 --- a/tests-new/android/app/src/main/java/com/testing/MainApplication.java +++ b/tests-new/android/app/src/main/java/com/testing/MainApplication.java @@ -9,7 +9,8 @@ import com.facebook.react.shell.MainReactPackage; import com.facebook.soloader.SoLoader; import io.invertase.firebase.RNFirebasePackage; -//import io.invertase.firebase.admob.RNFirebaseAdMobPackage; +import com.avishayil.rnrestart.ReactNativeRestartPackage; +import io.invertase.firebase.admob.RNFirebaseAdMobPackage; import io.invertase.firebase.analytics.RNFirebaseAnalyticsPackage; import io.invertase.firebase.auth.RNFirebaseAuthPackage; import io.invertase.firebase.config.RNFirebaseRemoteConfigPackage; @@ -25,6 +26,7 @@ import io.invertase.firebase.notifications.RNFirebaseNotificationsPackage; import io.invertase.firebase.perf.RNFirebasePerformancePackage; import io.invertase.firebase.storage.RNFirebaseStoragePackage; + import java.util.Arrays; import java.util.List; @@ -39,8 +41,9 @@ public class MainApplication extends Application implements ReactApplication { protected List getPackages() { return Arrays.asList( new MainReactPackage(), + new ReactNativeRestartPackage(), new RNFirebasePackage(), -// new RNFirebaseAdMobPackage(), + new RNFirebaseAdMobPackage(), new RNFirebaseAnalyticsPackage(), new RNFirebaseAuthPackage(), new RNFirebaseRemoteConfigPackage(), @@ -67,6 +70,7 @@ public class MainApplication extends Application implements ReactApplication { @Override public void onCreate() { super.onCreate(); + getReactNativeHost().getReactInstanceManager().getDevSupportManager().getDevSettings().setRemoteJSDebugEnabled(true); SoLoader.init(this, /* native exopackage */ false); } diff --git a/tests-new/android/settings.gradle b/tests-new/android/settings.gradle index 2b21f7b0..3a8b98ad 100755 --- a/tests-new/android/settings.gradle +++ b/tests-new/android/settings.gradle @@ -1,7 +1,11 @@ rootProject.name = 'RNFTests' + include ':react-native-firebase' project(':react-native-firebase').projectDir = new File(rootProject.projectDir, './../../android') +include ':react-native-restart' +project(':react-native-restart').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-restart/android') + include ':app' include ':detox' diff --git a/tests-new/app.js b/tests-new/app.js index 8bdffe2d..80af3871 100755 --- a/tests-new/app.js +++ b/tests-new/app.js @@ -4,26 +4,20 @@ * @flow */ -import React, { Component } from 'react'; -import rnModule, { AppRegistry, Text, View } from 'react-native'; +// must import before all else +import Bridge from './bridge/env/rn'; -import testModule from './firebase'; +import React, { Component } from 'react'; +import { AppRegistry, Text, View } from 'react-native'; + +import firebase from './firebase'; class Root extends Component { constructor(props) { super(props); this.state = {}; - } - - componentDidMount() { - if (global.__initializeEnvironment) { - console.log('Initializing environment...'); - global.__initializeEnvironment({ - root: this, - rnModule, - testModule, - }); - } + Bridge.provideRoot(this); + Bridge.provideModule(firebase); } render() { diff --git a/tests-new/bridge/env/node/index.js b/tests-new/bridge/env/node/index.js new file mode 100644 index 00000000..8a506d01 --- /dev/null +++ b/tests-new/bridge/env/node/index.js @@ -0,0 +1,61 @@ +const detox = require('detox'); +const vm = require('./vm'); +const ws = require('./ws'); + +const detoxOriginalInit = detox.init.bind(detox); +const detoxOriginalCleanup = detox.cleanup.bind(detox); +let detoxOriginalReloadReactNative = null; + +let bridgeReady = false; +process.on('rn-ready', () => { + // console.log('READY', true); + bridgeReady = true; +}); + +function onceBridgeReady() { + if (bridgeReady) return Promise.resolve(); + return new Promise(resolve => { + process.once('rn-ready', resolve); + }); +} + +detox.init = async (...args) => { + bridgeReady = false; + console.log('detox.init.start'); + + return detoxOriginalInit(...args).then(() => { + console.log('detox.init.complete'); + + detoxOriginalReloadReactNative = device.reloadReactNative.bind(device); + device.reloadReactNative = async () => { + console.log('reloadReactNative.start'); + bridgeReady = false; + // return device.launchApp({ newInstance: true }).then(() => { + global.bridge.reload(); + + return onceBridgeReady(); + }; + + return onceBridgeReady(); + }); +}; + +detox.cleanup = async (...args) => { + console.log('detox.cleanup'); + + return detoxOriginalCleanup(...args).then(() => { + console.log('detox.cleanup.end'); + + ws.close(); + process.exit(); + }); +}; + +global.bridge = { + _ws: null, + + rootSetState(state) { + // todo + return Promise.resolve(); + }, +}; diff --git a/tests-new/bridge/env/node/vm.js b/tests-new/bridge/env/node/vm.js new file mode 100644 index 00000000..6185bc08 --- /dev/null +++ b/tests-new/bridge/env/node/vm.js @@ -0,0 +1,158 @@ +const url = require('url'); +const http = require('http'); +const invariant = require('assert'); +const { createContext, Script } = require('vm'); +const ws = require('./ws'); + +let currentContext = null; +let scriptCached = null; + +// this is a dummy file path - without a file name the source map is not used in the vm +const TEMP_BUNDLE_PATH = '/tmp/bridge/react-native.js'; + +/** + * + * @param replyId + * @param result + */ +function sendResult(replyID, result) { + ws.send( + JSON.stringify({ + replyID, + result, + }) + ); +} + +/** + * + * @param message + */ +function sendError(message) { + console.error(message); +} + +/** + * + * @param src + * @param callback + */ +function getScript(src, callback) { + if (scriptCached) return callback(null, scriptCached); + return http + .get(src, res => { + let buff = ''; + + res.setEncoding('utf8'); + + res.on('data', chunk => { + buff += chunk; + }); + + res.on('end', () => { + scriptCached = new Script(buff, { + // lineOffset: -1, + // columnOffset: -1, + timeout: 120000, + displayErrors: true, + produceCachedData: true, + filename: TEMP_BUNDLE_PATH, + }); + + callback(null, scriptCached); + }); + }) + .on('error', err => { + callback(err); + }); +} + +process.on('ws-message', request => { + // console.log(request.method); + switch (request.method) { + case 'prepareJSRuntime': + currentContext = undefined; + currentContext = createContext({ + console, + __bridgeNode: { + ready() { + process.emit('rn-ready'); + }, + provideReactNativeModule(rnModule) { + global.bridge.rn = undefined; + global.bridge.rn = rnModule; + }, + provideModule(moduleExports) { + global.bridge.module = undefined; + global.bridge.module = moduleExports; + }, + provideReload(reloadFn) { + global.bridge.reload = undefined; + global.bridge.reload = reloadFn; + }, + provideRoot(rootComponent) { + global.bridge.root = undefined; + global.bridge.root = rootComponent; + }, + }, + }); + sendResult(request.id); + return; + + case 'executeApplicationScript': + // Modify the URL to make sure we get the inline source map. + const parsedUrl = url.parse(request.url, /* parseQueryString */ true); + invariant(parsedUrl.query); + parsedUrl.query.inlineSourceMap = true; + delete parsedUrl.search; + // $FlowIssue url.format() does not accept what url.parse() returns. + const scriptUrl = url.format(parsedUrl); + + getScript(scriptUrl, (err, script) => { + if (err != null) { + sendError(`Failed to get script from packager: ${err.message}`); + return; + } + + if (currentContext == null) { + sendError('JS runtime not prepared'); + return; + } + + if (request.inject) { + for (const name in request.inject) { + currentContext[name] = JSON.parse(request.inject[name]); + } + } + + try { + script.runInContext(currentContext, TEMP_BUNDLE_PATH); + } catch (e) { + sendError(`Failed to exec script: ${e.message}`); + } + sendResult(request.id); + }); + + return; + + default: + let returnValue = [[], [], [], 0]; + try { + if ( + currentContext != null && + typeof currentContext.__fbBatchedBridge === 'object' + ) { + returnValue = currentContext.__fbBatchedBridge[request.method].apply( + null, + request.arguments + ); + } + } catch (e) { + sendError( + `Failed while making a call ${request.method}:::${e.message}` + ); + } finally { + sendResult(request.id, JSON.stringify(returnValue)); + } + } +}); diff --git a/tests-new/bridge/env/node/ws.js b/tests-new/bridge/env/node/ws.js new file mode 100644 index 00000000..0d4c4684 --- /dev/null +++ b/tests-new/bridge/env/node/ws.js @@ -0,0 +1,12 @@ +const WebSocket = require('ws'); + +const ws = new WebSocket( + // todo read url from somewhere + 'ws://' + 'localhost:8081' + '/debugger-proxy?role=debugger&name=Chrome' +); + +ws.onmessage = message => process.emit('ws-message', JSON.parse(message.data)); +ws.onopen = () => console.log('WS open'); +ws.onclose = event => (!event.wasClean ? console.log('WS close', event) : ''); + +module.exports = ws; diff --git a/tests-new/bridge/env/rn.js b/tests-new/bridge/env/rn.js new file mode 100644 index 00000000..39763587 --- /dev/null +++ b/tests-new/bridge/env/rn.js @@ -0,0 +1,28 @@ +import reactNative, { Platform, NativeModules } from 'react-native'; +import RNRestart from 'react-native-restart'; // Import package from node modules + +const bridgeNode = global.__bridgeNode; + +// https://github.com/ptmt/react-native-macos/blob/master/React/Modules/RCTDevSettings.mm +if (Platform.OS === 'ios' && !bridgeNode) { + NativeModules.RCTDevSettings.setIsDebuggingRemotely(true); +} + +if (bridgeNode) { + bridgeNode.provideReactNativeModule(reactNative); + bridgeNode.provideReload(RNRestart.Restart); +} + +export default { + provideModule(moduleExports) { + if (bridgeNode) { + bridgeNode.provideModule(moduleExports); + bridgeNode.ready(); + } + }, + provideRoot(rootComponent) { + if (bridgeNode) { + bridgeNode.provideRoot(rootComponent); + } + }, +}; diff --git a/tests-new/e2e/bridge.spec.js b/tests-new/e2e/bridge.spec.js new file mode 100755 index 00000000..98aaa7a8 --- /dev/null +++ b/tests-new/e2e/bridge.spec.js @@ -0,0 +1,60 @@ +// describe('Example', () => { +// beforeEach(async () => { +// await device.reloadReactNative(); +// }); +// +// it('should have welcome screen', async () => { +// await expect(element(by.id('welcome'))).toBeVisible(); +// }); +// +// it('should show hello screen after tap', async () => { +// await element(by.id('hello_button')).tap(); +// await expect(element(by.text('Hello!!!'))).toBeVisible(); +// }); +// +// it('should show world screen after tap', async () => { +// await element(by.id('world_button')).tap(); +// await expect(element(by.text('World!!!'))).toBeVisible(); +// }); +// }); + +describe('should work inside node', () => { + beforeEach(async () => { + await device.reloadReactNative(); + }); + + it('should provide bridge global', () => { + const firebase = bridge.module; + + + return Promise.resolve(); + }); + + it('should require 2', () => { + const firebase = bridge.module; + // const { Platform } = bridge.rnModule; + // should.equal(firebase.auth.nativeModuleExists, true); + return Promise.resolve(); + }); + + it('should require 3', () => { + const firebase = bridge.module; + // const { Platform } = bridge.rnModule; + // should.equal(firebase.auth.nativeModuleExists, true); + return Promise.resolve(); + }); + + it('should require 4', () => { + const firebase = bridge.module; + // const { Platform } = bridge.rnModule; + // should.equal(firebase.auth.nativeModuleExists, true); + return Promise.resolve(); + }); + + it('should require 5', () => { + const firebase = bridge.module; + // const { Platform } = bridge.rnModule; + // should.equal(firebase.auth.nativeModuleExists, true); + return Promise.resolve(); + }); +}); diff --git a/tests-new/e2e/example.spec.js b/tests-new/e2e/example.spec.js index e18ea21d..5b4e6e74 100755 --- a/tests-new/e2e/example.spec.js +++ b/tests-new/e2e/example.spec.js @@ -25,7 +25,36 @@ describe('should work inside node', () => { it('should require', () => { const firebase = bridge.module; + + + return Promise.resolve(); + }); + + it('should require 2', () => { + const firebase = bridge.module; // const { Platform } = bridge.rnModule; - should.equal(firebase.auth.nativeModuleExists, true); + // should.equal(firebase.auth.nativeModuleExists, true); + return Promise.resolve(); + }); + + it('should require 3', () => { + const firebase = bridge.module; + // const { Platform } = bridge.rnModule; + // should.equal(firebase.auth.nativeModuleExists, true); + return Promise.resolve(); + }); + + it('should require 4', () => { + const firebase = bridge.module; + // const { Platform } = bridge.rnModule; + // should.equal(firebase.auth.nativeModuleExists, true); + return Promise.resolve(); + }); + + it('should require 5', () => { + const firebase = bridge.module; + // const { Platform } = bridge.rnModule; + // should.equal(firebase.auth.nativeModuleExists, true); + return Promise.resolve(); }); }); diff --git a/tests-new/e2e/mocha.opts b/tests-new/e2e/mocha.opts index 8e9cd41e..131492bb 100755 --- a/tests-new/e2e/mocha.opts +++ b/tests-new/e2e/mocha.opts @@ -1,5 +1,4 @@ ---delay --recursive --timeout 120000 --bail ---require bridge +--require ./bridge/env/node diff --git a/tests-new/index.js b/tests-new/index.js index 3a208360..4cd59214 100755 --- a/tests-new/index.js +++ b/tests-new/index.js @@ -1 +1 @@ -require('./app'); \ No newline at end of file +require('./app'); diff --git a/tests-new/package-lock.json b/tests-new/package-lock.json index 6d6af682..b3fc04c7 100644 --- a/tests-new/package-lock.json +++ b/tests-new/package-lock.json @@ -1,5 +1,5 @@ { - "name": "example", + "name": "rnfirebase-tests", "version": "7.2.0", "lockfileVersion": 1, "requires": true, @@ -337,8 +337,7 @@ "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, "arch": { "version": "2.1.0", @@ -520,6 +519,11 @@ "dev": true, "optional": true }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -1458,8 +1462,7 @@ "bluebird": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", - "dev": true + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" }, "body-parser": { "version": "1.13.3", @@ -1544,8 +1547,7 @@ "browser-stdout": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", - "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", - "dev": true + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=" }, "bser": { "version": "2.0.0", @@ -1639,7 +1641,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/child-process-promise/-/child-process-promise-2.2.1.tgz", "integrity": "sha1-RzChHvYQ+tRQuPIjx50x172tgHQ=", - "dev": true, "requires": { "cross-spawn": "4.0.2", "node-version": "1.1.3", @@ -1650,7 +1651,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true, "requires": { "lru-cache": "4.1.2", "which": "1.3.0" @@ -2052,8 +2052,7 @@ "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "contains-path": { "version": "0.1.0", @@ -2304,7 +2303,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/detox/-/detox-7.2.0.tgz", "integrity": "sha512-hj+GgnXJWmNit0lzeDY1KjZZv3nvNWsB3V6oGIvwCe3Jdl2JXqg6Qn2USa137loTpuvdR77Zgl5m3u1iG1Am/Q==", - "dev": true, "requires": { "child-process-promise": "2.2.1", "commander": "2.15.1", @@ -2324,7 +2322,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dev": true, "requires": { "graceful-fs": "4.1.11", "jsonfile": "4.0.0", @@ -2335,7 +2332,6 @@ "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, "requires": { "aproba": "1.2.0", "console-control-strings": "1.1.0", @@ -2351,7 +2347,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, "requires": { "number-is-nan": "1.0.1" } @@ -2360,7 +2355,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, "requires": { "graceful-fs": "4.1.11" } @@ -2369,7 +2363,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, "requires": { "are-we-there-yet": "1.1.4", "console-control-strings": "1.1.0", @@ -2381,12 +2374,20 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, "requires": { "code-point-at": "1.1.0", "is-fullwidth-code-point": "1.0.0", "strip-ansi": "3.0.1" } + }, + "ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + } } } }, @@ -2394,7 +2395,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/detox-server/-/detox-server-7.0.0.tgz", "integrity": "sha512-zs9ZP/MgeEmaZD/+MCl5PVcYHRjUtFBkBx3xQRPcsjJ/PmpCKy/BvygjLO6tRsR/2SC9UYay6W+BdguEYeft8g==", - "dev": true, "requires": { "lodash": "4.17.5", "npmlog": "4.1.2", @@ -2405,7 +2405,6 @@ "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, "requires": { "aproba": "1.2.0", "console-control-strings": "1.1.0", @@ -2421,7 +2420,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, "requires": { "number-is-nan": "1.0.1" } @@ -2430,7 +2428,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, "requires": { "are-we-there-yet": "1.1.4", "console-control-strings": "1.1.0", @@ -2442,20 +2439,27 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, "requires": { "code-point-at": "1.1.0", "is-fullwidth-code-point": "1.0.0", "strip-ansi": "3.0.1" } + }, + "ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + } } } }, "diff": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", - "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", - "dev": true + "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==" }, "doctrine": { "version": "2.1.0", @@ -4214,7 +4218,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/get-port/-/get-port-2.1.0.tgz", "integrity": "sha1-h4P53OvR7qSVozThpqJR54iHqxo=", - "dev": true, "requires": { "pinkie-promise": "2.0.1" } @@ -4311,8 +4314,7 @@ "growl": { "version": "1.10.3", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", - "dev": true + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==" }, "growly": { "version": "1.3.0", @@ -4482,8 +4484,7 @@ "he": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" }, "hoek": { "version": "4.2.1", @@ -4561,8 +4562,7 @@ "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { "version": "3.3.0", @@ -5554,6 +5554,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + } } } }, @@ -5675,7 +5684,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==", - "dev": true, "requires": { "browser-stdout": "1.3.0", "commander": "2.11.0", @@ -5692,14 +5700,12 @@ "commander": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -5707,14 +5713,12 @@ "has-flag": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" }, "supports-color": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "dev": true, "requires": { "has-flag": "2.0.0" } @@ -5862,8 +5866,7 @@ "node-version": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/node-version/-/node-version-1.1.3.tgz", - "integrity": "sha512-rEwE51JWn0yN3Wl5BXeGn5d52OGbSXzWiiXRjAQeuyvcGKyvuSILW2rb3G7Xh+nexzLwhTpek6Ehxd6IjvHePg==", - "dev": true + "integrity": "sha512-rEwE51JWn0yN3Wl5BXeGn5d52OGbSXzWiiXRjAQeuyvcGKyvuSILW2rb3G7Xh+nexzLwhTpek6Ehxd6IjvHePg==" }, "normalize-package-data": { "version": "2.4.0", @@ -6273,14 +6276,12 @@ "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" }, "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, "requires": { "pinkie": "2.0.4" } @@ -6392,8 +6393,7 @@ "promise-polyfill": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-6.1.0.tgz", - "integrity": "sha1-36lpQ+qcEh/KTem1hoyznTRy4Fc=", - "dev": true + "integrity": "sha1-36lpQ+qcEh/KTem1hoyznTRy4Fc=" }, "prop-types": { "version": "15.6.1", @@ -6605,9 +6605,23 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-1.1.1.tgz", "integrity": "sha1-rDydOfMgxtzlM5lp0FTvQ90zMxk=" + }, + "ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + } } } }, + "react-native-restart": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/react-native-restart/-/react-native-restart-0.0.6.tgz", + "integrity": "sha512-ysKvNOjCeCS8A4ouQkJ8DZRYH4wgPdPEJqqqSGFuNzK4eAi3VPOeneQ3w0HHYeOui5fc6fV9y9ClOB9LcKbKpQ==" + }, "react-proxy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/react-proxy/-/react-proxy-1.1.8.tgz", @@ -7430,7 +7444,6 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/shell-utils/-/shell-utils-1.0.9.tgz", "integrity": "sha512-JbTHnKpMyj9TUUbL+Us2Rx2iVHFvH5QyQoke9SN1L0pueiZeO2Gzlzopmloi7oqObL4qtvdSuZPE3UfdIzmlag==", - "dev": true, "requires": { "lodash": "4.17.5" } @@ -7906,14 +7919,12 @@ "tail": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/tail/-/tail-1.2.3.tgz", - "integrity": "sha1-sI1vp5+5KIaWMaNBpRwUSXwcQlU=", - "dev": true + "integrity": "sha1-sI1vp5+5KIaWMaNBpRwUSXwcQlU=" }, "telnet-client": { "version": "0.15.3", "resolved": "https://registry.npmjs.org/telnet-client/-/telnet-client-0.15.3.tgz", "integrity": "sha512-GSfdzQV0BKIYsmeXq7bJFJ2wHeJud6icaIxCUf6QCGQUD6R0BBGbT1+yLDhq67JRdgRpwyPwUbV7JxFeRrZomQ==", - "dev": true, "requires": { "bluebird": "3.5.1" } @@ -8522,8 +8533,7 @@ "universalify": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", - "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", - "dev": true + "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=" }, "unpipe": { "version": "1.0.0", @@ -8704,7 +8714,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "dev": true, "requires": { "string-width": "1.0.2" }, @@ -8713,7 +8722,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, "requires": { "number-is-nan": "1.0.1" } @@ -8722,7 +8730,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, "requires": { "code-point-at": "1.1.0", "is-fullwidth-code-point": "1.0.0", @@ -8798,12 +8805,11 @@ } }, "ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.1.0.tgz", + "integrity": "sha512-7KU/qkUXtJW9aa5WRKlo0puE1ejEoAgDb0D/Pt+lWpTkKF7Kp+MqFOtwNFwnuiYeeDpFjp0qyMniE84OjKIEqQ==", "requires": { - "options": "0.0.6", - "ultron": "1.0.2" + "async-limiter": "1.0.0" } }, "xcode": { diff --git a/tests-new/package.json b/tests-new/package.json index 2d3e4cb4..0db469f8 100755 --- a/tests-new/package.json +++ b/tests-new/package.json @@ -3,7 +3,8 @@ "version": "7.2.0", "private": true, "scripts": { - "start": "REACT_DEBUGGER='todo' node node_modules/react-native/local-cli/cli.js start --platforms ios,android --skipflow", + "start-local-debug": "node node_modules/react-native/local-cli/cli.js start --platforms ios,android --skipflow", + "start": "REACT_DEBUGGER='echo nope' node node_modules/react-native/local-cli/cli.js start --platforms ios,android --skipflow", "start-ci": "REACT_DEBUGGER='todo' node node_modules/react-native/local-cli/cli.js start --platforms ios,android --skipflow --nonPersistent", "android:dev": "react-native run-android", "android:prod": "react-native run-android --configuration=release", @@ -12,10 +13,12 @@ "ios:pod:install": "cd ios && rm -rf ReactNativeFirebaseDemo.xcworkspace && pod install && cd .." }, "dependencies": { + "detox": "^7.2.0", + "mocha": "^4.0.1", "react": "^16.2.0", "react-native": "^0.52.3", - "detox": "^7.2.0", - "mocha": "^4.0.1" + "react-native-restart": "0.0.6", + "ws": "^5.1.0" }, "devDependencies": { "babel-cli": "^6.24.0",