From 344d59e25433d0db6a4122727f5bad1cf60ec9ea Mon Sep 17 00:00:00 2001 From: Daniel Schmidt Date: Mon, 5 Jun 2017 10:58:16 +0200 Subject: [PATCH] docs: architecture deep dive --- docs/Guide.Contributing.md | 7 ++----- docs/Introduction.HowDetoxWorks.md | 19 +++++++++++++++++++ docs/img-src/action-sequence.mmd | 19 +++++++++++++++++++ docs/img-src/build.sh | 3 +++ docs/img/action-sequence.mmd.png | Bin 0 -> 53291 bytes 5 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 docs/img-src/action-sequence.mmd create mode 100755 docs/img-src/build.sh create mode 100644 docs/img/action-sequence.mmd.png diff --git a/docs/Guide.Contributing.md b/docs/Guide.Contributing.md index 7ca7d46c99..d523ace36a 100644 --- a/docs/Guide.Contributing.md +++ b/docs/Guide.Contributing.md @@ -1,6 +1,5 @@ # Contributing to detox - ### Clone detox and submodules ```sh @@ -26,7 +25,7 @@ npm install -g react-native-cli For all the internal projects (detox, detox-server, detox-cli, demos, test) `lerna` will create symbolic links in `node_modules` instead of `npm` copying the content of the projects. This way, any change you do on any code is there immediately. There is no need to update node modules or copy files between projects. -### Install `fbsimctl` +### Install `fbsimctl` ```sh brew tap facebook/fb @@ -58,7 +57,7 @@ lerna run test Detox JS code is 100% test covered and is set to break the build if coverage gets below, so make sure you run unit tests (`lerna run test`) locally before pushing. -Alternatively, to run only the JS tests, run the following from the `detox/detox` directory: +Alternatively, to run only the JS tests, run the following from the `detox/detox` directory: ```sh npm run unit @@ -93,5 +92,3 @@ To run the e2e tests, after the application was built. ```sh npm run e2e ``` - -**NOTE: The updated flow can always be found in [our CI build script](../scripts/ci.sh)** diff --git a/docs/Introduction.HowDetoxWorks.md b/docs/Introduction.HowDetoxWorks.md index f7c7d2f738..57d719eefa 100644 --- a/docs/Introduction.HowDetoxWorks.md +++ b/docs/Introduction.HowDetoxWorks.md @@ -28,3 +28,22 @@ Detox eliminates flakiness by automatically synchronizing your tests with the ap * Keeping track of the React Native bridge which carries asynchronous messages * Keeping track of asynchronous React Native layout and the shadow queue * Keeping track of the JavaScript event loop which may contain pending asynchronous actions + + +### Architecture +The sequence diagram below shows the general communication scheme between the components in Detox. +![architecture overview](img/action-sequence.mmd.png) + +To understand this topic more thoroughly we need to have a look at an example action in detail. The numbers in the listing below correlate with the ones in the diagram. + +### Action (`element.tap`) + +1. `element.tap()` in your test case is invoked. +2. `TapAction` in [`expect.js`](https://github.com/wix/detox/blob/master/detox/src/ios/expect.js) gets invoked +3. `TapAction` instance gets passed to [`invoke.js`](https://github.com/wix/detox/blob/master/detox/src/invoke.js), where it gets transformed to JSON. The resulting JSON correlates more with the native code than with the JS code for better extensibility. +4. JSON gets send to detox-server by [`Client.js`](https://github.com/wix/detox/blob/master/detox/src/client/Client.js) +6. detox-server forwards it to the testee in [`DetoxServer.js`](https://github.com/wix/detox/blob/master/detox-server/src/DetoxServer.js) +7. [`DetoxManager.m`](https://github.com/wix/detox/blob/master/detox/ios/Detox/DetoxManager.m) invokes the [`TestRunner.m`](https://github.com/wix/detox/blob/master/detox/ios/Detox/TestRunner.m). `TestRunner.m` uses [`MethodInvocation.m`](https://github.com/wix/detox/blob/master/detox/ios/Detox/MethodInvocation.m) to map the JSON representation of the native commands into the actual native command and executes it. *(8)* + + +*NOTE: the images can be updated with [mermaid](http://knsv.github.io/mermaid/#mermaid). The files can be found under `img-src`* diff --git a/docs/img-src/action-sequence.mmd b/docs/img-src/action-sequence.mmd new file mode 100644 index 0000000000..d4294862cc --- /dev/null +++ b/docs/img-src/action-sequence.mmd @@ -0,0 +1,19 @@ +sequenceDiagram + participant Test Runner(1) + participant Tester(3) + participant Detox Server(5) + participant Testee(7) + participant Earl Grey(9) + + %% Note over Test Runner(1),Detox Server(5): Runs on your computer + %% Note over Testee(7),Earl Grey(9): Runs on the device + + Test Runner(1)->>Tester(3): assertion / action (2) + Tester(3)->>Detox Server(5): native code as JSON (4) + Detox Server(5)->>Testee(7): Websocket connection (6) + Testee(7)-x+Earl Grey(9): native invocation (8) + Note left of Earl Grey(9): EarlGrey waits for device to become idle again + Earl Grey(9)->>-Testee(7): (10) + Testee(7)->>Detox Server(5): (11) + Detox Server(5)->>Tester(3): (12) + Tester(3)->>Test Runner(1): (13) diff --git a/docs/img-src/build.sh b/docs/img-src/build.sh new file mode 100755 index 0000000000..15bec021d6 --- /dev/null +++ b/docs/img-src/build.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +mermaid -o '../img' *.mmd diff --git a/docs/img/action-sequence.mmd.png b/docs/img/action-sequence.mmd.png new file mode 100644 index 0000000000000000000000000000000000000000..429f89445b6115e1c31502053922df6382e21b31 GIT binary patch literal 53291 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�#Kls{|t0y@OwOvx{?xpT51_^qe%vp}( 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