Add contributing docs

Reviewed By: danielbuechele

Differential Revision: D6976258

fbshipit-source-id: 71b3d0ab4a071ce0c4a9c1241cd6295aa6d52b8e
This commit is contained in:
Emil Sjölander
2018-02-13 07:06:31 -08:00
committed by Facebook Github Bot
parent 49f1d7b5f6
commit cac77e5ffa
6 changed files with 94 additions and 29 deletions

View File

@@ -1,7 +0,0 @@
---
path: "contributing/adding-a-test"
title: "Adding a Test"
hasPlayground: false
---
## Adding a Test

View File

@@ -1,7 +0,0 @@
---
path: "contributing/checking-out-the-code"
title: "Checking Out the Code"
hasPlayground: false
---
## Checking Out the Code

View File

@@ -1,7 +0,0 @@
---
path: "contributing/making-a-change"
title: "Making a change"
hasPlayground: false
---
## Making a change

View File

@@ -4,4 +4,52 @@ title: "Opening a Pull Request"
hasPlayground: false
---
## Opening a Pull Request
# Opening a Pull Request
Before opening your first pull request to Yoga you have to know how to get the code,
install build time dependencies, and test the code locally.
### Clone
```
$> git clone https://github.com/facebook/yoga.git
$> cd yoga
```
### Install dependencies
```
$> git submodule init
$> git submodule update
$> brew install buck
```
### Build and Test
```
$> buck build //:yoga
$> buck test //:yoga
```
## Making a Change
Now all you need to do is make your change and test it before submitting a pull request for review.
Below is the general structure of the repo and where you may want to make your change. One you have
made your change see the [testing documentation](/contributing/testing) for more on how to test your change.
``` bash
/yoga
|-- yoga # Home to the main Yoga codebase written in C++. Any algorithmic changes should be made here
|-- lib # Yoga external dependencies. Be thoughtful adding any new ones
|-- tests # Yoga's C++ test suite. Both manaul and generated tests
|-- gentest
| |-- fixtures # html fixtures for generated tests
|-- java
| |-- com/facebook/yoga # Java binding code
| |-- jni # JNI binding code
|-- yogacore # Android bindings without View support
|-- android # Android View bindings
|-- YogaKit # iOS UIView bindings
|-- javascript # emscripten / javascript bindings
|-- csharp # .NET bindings in c#
```

View File

@@ -1,7 +0,0 @@
---
path: "contributing/running-the-test-suite"
title: "Running the Test Suite"
hasPlayground: false
---
## Running the Test Suite

View File

@@ -0,0 +1,45 @@
---
path: "contributing/testing"
title: "Testing"
hasPlayground: false
---
# Testing
Yoga tries to be as close as possible to chrome in its flexbox behaviour.
To ensure this most of Yoga's test suite is automatically generateded from
running the corresponding layout in chrome using a webdriver which then generates
C++ test which asserts that Yoga will produce matching outputs for that layout.
## Running the Test Suite
1. Yoga builds with [buck](https://buckbuild.com). Follow their documentation to get up and running.
2. For testing Yoga relies on [gtest](https://github.com/google/googletest) as a submodule. After cloning Yoga run `git submodule init` followed by `git submodule update`.
3. In a terminal from the root of your Yoga checkout run `buck test //:yoga`.
## Adding a Test
Instead of manually writing a test which ensures parity with web implementations
of Flexbox we make use of a generated test suite. We use `gentest/gentest.rb` to
generate this test suite. Write the html which you want to verify in Yoga and put
it in the `gentest/fixtures` folder, such as the following.
```html
<div id="my_test" style="width: 100px; height: 100px; align-items: center;">
<div style="width: 50px; height: 50px;"></div>
</div>
```
Run `gentest/gentest.rb` to generate test code and re-run `buck test //:yoga`
to validate the behavior. One test case will be generated for every root `div`
in the input html with the string in the `id` corresponding to the test name.
You may need to install the latest watir gem (`gem install watir`) and
[ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/) to
run `gentest/gentest.rb` Ruby script.
## Manual test
For some aspects of Yoga we cannot generate a test using the test generation
infrastructure described earlier. For these cases we manually write a test in
the `/tests` directory.