1*481dde66SAndroid Build Coastguard Worker# How to become a contributor and submit your own code 2*481dde66SAndroid Build Coastguard Worker 3*481dde66SAndroid Build Coastguard Worker## Contributor License Agreements 4*481dde66SAndroid Build Coastguard Worker 5*481dde66SAndroid Build Coastguard WorkerWe'd love to accept your patches! Before we can take them, we have to jump a 6*481dde66SAndroid Build Coastguard Workercouple of legal hurdles. 7*481dde66SAndroid Build Coastguard Worker 8*481dde66SAndroid Build Coastguard WorkerPlease fill out either the individual or corporate Contributor License Agreement 9*481dde66SAndroid Build Coastguard Worker(CLA). 10*481dde66SAndroid Build Coastguard Worker 11*481dde66SAndroid Build Coastguard Worker* If you are an individual writing original source code and you're sure you 12*481dde66SAndroid Build Coastguard Worker own the intellectual property, then you'll need to sign an 13*481dde66SAndroid Build Coastguard Worker [individual CLA](https://developers.google.com/open-source/cla/individual). 14*481dde66SAndroid Build Coastguard Worker* If you work for a company that wants to allow you to contribute your work, 15*481dde66SAndroid Build Coastguard Worker then you'll need to sign a 16*481dde66SAndroid Build Coastguard Worker [corporate CLA](https://developers.google.com/open-source/cla/corporate). 17*481dde66SAndroid Build Coastguard Worker 18*481dde66SAndroid Build Coastguard WorkerFollow either of the two links above to access the appropriate CLA and 19*481dde66SAndroid Build Coastguard Workerinstructions for how to sign and return it. Once we receive it, we'll be able to 20*481dde66SAndroid Build Coastguard Workeraccept your pull requests. 21*481dde66SAndroid Build Coastguard Worker 22*481dde66SAndroid Build Coastguard Worker## Are you a Googler? 23*481dde66SAndroid Build Coastguard Worker 24*481dde66SAndroid Build Coastguard WorkerIf you are a Googler, please make an attempt to submit an internal contribution 25*481dde66SAndroid Build Coastguard Workerrather than a GitHub Pull Request. If you are not able to submit internally, a 26*481dde66SAndroid Build Coastguard WorkerPR is acceptable as an alternative. 27*481dde66SAndroid Build Coastguard Worker 28*481dde66SAndroid Build Coastguard Worker## Contributing A Patch 29*481dde66SAndroid Build Coastguard Worker 30*481dde66SAndroid Build Coastguard Worker1. Submit an issue describing your proposed change to the 31*481dde66SAndroid Build Coastguard Worker [issue tracker](https://github.com/google/googletest/issues). 32*481dde66SAndroid Build Coastguard Worker2. Please don't mix more than one logical change per submittal, because it 33*481dde66SAndroid Build Coastguard Worker makes the history hard to follow. If you want to make a change that doesn't 34*481dde66SAndroid Build Coastguard Worker have a corresponding issue in the issue tracker, please create one. 35*481dde66SAndroid Build Coastguard Worker3. Also, coordinate with team members that are listed on the issue in question. 36*481dde66SAndroid Build Coastguard Worker This ensures that work isn't being duplicated and communicating your plan 37*481dde66SAndroid Build Coastguard Worker early also generally leads to better patches. 38*481dde66SAndroid Build Coastguard Worker4. If your proposed change is accepted, and you haven't already done so, sign a 39*481dde66SAndroid Build Coastguard Worker Contributor License Agreement 40*481dde66SAndroid Build Coastguard Worker ([see details above](#contributor-license-agreements)). 41*481dde66SAndroid Build Coastguard Worker5. Fork the desired repo, develop and test your code changes. 42*481dde66SAndroid Build Coastguard Worker6. Ensure that your code adheres to the existing style in the sample to which 43*481dde66SAndroid Build Coastguard Worker you are contributing. 44*481dde66SAndroid Build Coastguard Worker7. Ensure that your code has an appropriate set of unit tests which all pass. 45*481dde66SAndroid Build Coastguard Worker8. Submit a pull request. 46*481dde66SAndroid Build Coastguard Worker 47*481dde66SAndroid Build Coastguard Worker## The Google Test and Google Mock Communities 48*481dde66SAndroid Build Coastguard Worker 49*481dde66SAndroid Build Coastguard WorkerThe Google Test community exists primarily through the 50*481dde66SAndroid Build Coastguard Worker[discussion group](https://groups.google.com/group/googletestframework) and the 51*481dde66SAndroid Build Coastguard WorkerGitHub repository. Likewise, the Google Mock community exists primarily through 52*481dde66SAndroid Build Coastguard Workertheir own [discussion group](https://groups.google.com/group/googlemock). You 53*481dde66SAndroid Build Coastguard Workerare definitely encouraged to contribute to the discussion and you can also help 54*481dde66SAndroid Build Coastguard Workerus to keep the effectiveness of the group high by following and promoting the 55*481dde66SAndroid Build Coastguard Workerguidelines listed here. 56*481dde66SAndroid Build Coastguard Worker 57*481dde66SAndroid Build Coastguard Worker### Please Be Friendly 58*481dde66SAndroid Build Coastguard Worker 59*481dde66SAndroid Build Coastguard WorkerShowing courtesy and respect to others is a vital part of the Google culture, 60*481dde66SAndroid Build Coastguard Workerand we strongly encourage everyone participating in Google Test development to 61*481dde66SAndroid Build Coastguard Workerjoin us in accepting nothing less. Of course, being courteous is not the same as 62*481dde66SAndroid Build Coastguard Workerfailing to constructively disagree with each other, but it does mean that we 63*481dde66SAndroid Build Coastguard Workershould be respectful of each other when enumerating the 42 technical reasons 64*481dde66SAndroid Build Coastguard Workerthat a particular proposal may not be the best choice. There's never a reason to 65*481dde66SAndroid Build Coastguard Workerbe antagonistic or dismissive toward anyone who is sincerely trying to 66*481dde66SAndroid Build Coastguard Workercontribute to a discussion. 67*481dde66SAndroid Build Coastguard Worker 68*481dde66SAndroid Build Coastguard WorkerSure, C++ testing is serious business and all that, but it's also a lot of fun. 69*481dde66SAndroid Build Coastguard WorkerLet's keep it that way. Let's strive to be one of the friendliest communities in 70*481dde66SAndroid Build Coastguard Workerall of open source. 71*481dde66SAndroid Build Coastguard Worker 72*481dde66SAndroid Build Coastguard WorkerAs always, discuss Google Test in the official GoogleTest discussion group. You 73*481dde66SAndroid Build Coastguard Workerdon't have to actually submit code in order to sign up. Your participation 74*481dde66SAndroid Build Coastguard Workeritself is a valuable contribution. 75*481dde66SAndroid Build Coastguard Worker 76*481dde66SAndroid Build Coastguard Worker## Style 77*481dde66SAndroid Build Coastguard Worker 78*481dde66SAndroid Build Coastguard WorkerTo keep the source consistent, readable, diffable and easy to merge, we use a 79*481dde66SAndroid Build Coastguard Workerfairly rigid coding style, as defined by the 80*481dde66SAndroid Build Coastguard Worker[google-styleguide](https://github.com/google/styleguide) project. All patches 81*481dde66SAndroid Build Coastguard Workerwill be expected to conform to the style outlined 82*481dde66SAndroid Build Coastguard Worker[here](https://google.github.io/styleguide/cppguide.html). Use 83*481dde66SAndroid Build Coastguard Worker[.clang-format](https://github.com/google/googletest/blob/main/.clang-format) to 84*481dde66SAndroid Build Coastguard Workercheck your formatting. 85*481dde66SAndroid Build Coastguard Worker 86*481dde66SAndroid Build Coastguard Worker## Requirements for Contributors 87*481dde66SAndroid Build Coastguard Worker 88*481dde66SAndroid Build Coastguard WorkerIf you plan to contribute a patch, you need to build Google Test, Google Mock, 89*481dde66SAndroid Build Coastguard Workerand their own tests from a git checkout, which has further requirements: 90*481dde66SAndroid Build Coastguard Worker 91*481dde66SAndroid Build Coastguard Worker* [Python](https://www.python.org/) v3.6 or newer (for running some of the 92*481dde66SAndroid Build Coastguard Worker tests and re-generating certain source files from templates) 93*481dde66SAndroid Build Coastguard Worker* [CMake](https://cmake.org/) v2.8.12 or newer 94*481dde66SAndroid Build Coastguard Worker 95*481dde66SAndroid Build Coastguard Worker## Developing Google Test and Google Mock 96*481dde66SAndroid Build Coastguard Worker 97*481dde66SAndroid Build Coastguard WorkerThis section discusses how to make your own changes to the Google Test project. 98*481dde66SAndroid Build Coastguard Worker 99*481dde66SAndroid Build Coastguard Worker### Testing Google Test and Google Mock Themselves 100*481dde66SAndroid Build Coastguard Worker 101*481dde66SAndroid Build Coastguard WorkerTo make sure your changes work as intended and don't break existing 102*481dde66SAndroid Build Coastguard Workerfunctionality, you'll want to compile and run Google Test and GoogleMock's own 103*481dde66SAndroid Build Coastguard Workertests. For that you can use CMake: 104*481dde66SAndroid Build Coastguard Worker 105*481dde66SAndroid Build Coastguard Worker``` 106*481dde66SAndroid Build Coastguard Workermkdir mybuild 107*481dde66SAndroid Build Coastguard Workercd mybuild 108*481dde66SAndroid Build Coastguard Workercmake -Dgtest_build_tests=ON -Dgmock_build_tests=ON ${GTEST_REPO_DIR} 109*481dde66SAndroid Build Coastguard Worker``` 110*481dde66SAndroid Build Coastguard Worker 111*481dde66SAndroid Build Coastguard WorkerTo choose between building only Google Test or Google Mock, you may modify your 112*481dde66SAndroid Build Coastguard Workercmake command to be one of each 113*481dde66SAndroid Build Coastguard Worker 114*481dde66SAndroid Build Coastguard Worker``` 115*481dde66SAndroid Build Coastguard Workercmake -Dgtest_build_tests=ON ${GTEST_DIR} # sets up Google Test tests 116*481dde66SAndroid Build Coastguard Workercmake -Dgmock_build_tests=ON ${GMOCK_DIR} # sets up Google Mock tests 117*481dde66SAndroid Build Coastguard Worker``` 118*481dde66SAndroid Build Coastguard Worker 119*481dde66SAndroid Build Coastguard WorkerMake sure you have Python installed, as some of Google Test's tests are written 120*481dde66SAndroid Build Coastguard Workerin Python. If the cmake command complains about not being able to find Python 121*481dde66SAndroid Build Coastguard Worker(`Could NOT find PythonInterp (missing: PYTHON_EXECUTABLE)`), try telling it 122*481dde66SAndroid Build Coastguard Workerexplicitly where your Python executable can be found: 123*481dde66SAndroid Build Coastguard Worker 124*481dde66SAndroid Build Coastguard Worker``` 125*481dde66SAndroid Build Coastguard Workercmake -DPYTHON_EXECUTABLE=path/to/python ... 126*481dde66SAndroid Build Coastguard Worker``` 127*481dde66SAndroid Build Coastguard Worker 128*481dde66SAndroid Build Coastguard WorkerNext, you can build Google Test and / or Google Mock and all desired tests. On 129*481dde66SAndroid Build Coastguard Worker\*nix, this is usually done by 130*481dde66SAndroid Build Coastguard Worker 131*481dde66SAndroid Build Coastguard Worker``` 132*481dde66SAndroid Build Coastguard Workermake 133*481dde66SAndroid Build Coastguard Worker``` 134*481dde66SAndroid Build Coastguard Worker 135*481dde66SAndroid Build Coastguard WorkerTo run the tests, do 136*481dde66SAndroid Build Coastguard Worker 137*481dde66SAndroid Build Coastguard Worker``` 138*481dde66SAndroid Build Coastguard Workermake test 139*481dde66SAndroid Build Coastguard Worker``` 140*481dde66SAndroid Build Coastguard Worker 141*481dde66SAndroid Build Coastguard WorkerAll tests should pass. 142