diff --git a/SUBMITTING_PATCHES.md b/SUBMITTING_PATCHES.md index 07f76616..e8a72e87 100644 --- a/SUBMITTING_PATCHES.md +++ b/SUBMITTING_PATCHES.md @@ -1,3 +1,5 @@ +[TOC] + # Short Version - Make small logical changes. @@ -52,17 +54,29 @@ Run `flake8` on changes modules: flake8 file.py -Note that repo generally follows [Google's python style guide] -(https://google.github.io/styleguide/pyguide.html) rather than [PEP 8] -(https://www.python.org/dev/peps/pep-0008/), so it's possible that -the output of `flake8` will be quite noisy. It's not mandatory to -avoid all warnings, but at least the maximum line length should be -followed. +Note that repo generally follows [Google's python style guide] rather than +[PEP 8], so it's possible that the output of `flake8` will be quite noisy. +It's not mandatory to avoid all warnings, but at least the maximum line +length should be followed. If there are many occurrences of the same warning that cannot be avoided without going against the Google style guide, these may be suppressed in the included `.flake8` file. +[Google's python style guide]: https://google.github.io/styleguide/pyguide.html +[PEP 8]: https://www.python.org/dev/peps/pep-0008/ + + +## Running tests + +There is a [`./run_tests`](./run_tests) helper script for quickly invoking all +of our unittests. The coverage isn't great currently, but it should still be +run for all commits. + +Adding more unittests for changes you make would be greatly appreciated :). +Check out the [tests/](./tests/) subdirectory for more details. + + ## Check the license repo is licensed under the Apache License, 2.0. diff --git a/run_tests b/run_tests new file mode 100755 index 00000000..f72b22c5 --- /dev/null +++ b/run_tests @@ -0,0 +1,54 @@ +#!/usr/bin/python +# -*- coding:utf-8 -*- +# Copyright 2019 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Wrapper to run pytest with the right settings.""" + +from __future__ import print_function + +import errno +import os +import subprocess +import sys + + +def run_pytest(cmd, argv): + """Run the unittests via |cmd|.""" + try: + subprocess.check_call([cmd] + argv) + return 0 + except OSError as e: + if e.errno == errno.ENOENT: + print('%s: unable to run `%s`: %s' % (__file__, cmd, e), file=sys.stderr) + print('%s: Try installing pytest: sudo apt-get install python-pytest' % + (__file__,), file=sys.stderr) + return 1 + else: + raise + + +def main(argv): + """The main entry.""" + # Add the repo tree to PYTHONPATH as the tests expect to be able to import + # modules directly. + topdir = os.path.dirname(os.path.realpath(__file__)) + pythonpath = os.environ.get('PYTHONPATH', '') + os.environ['PYTHONPATH'] = '%s:%s' % (topdir, pythonpath) + + return run_pytest('pytest', argv) + + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) diff --git a/tests/fixtures/.gitignore b/tests/fixtures/.gitignore new file mode 100644 index 00000000..7b3d2db9 --- /dev/null +++ b/tests/fixtures/.gitignore @@ -0,0 +1,2 @@ +/.repo_not.present.gitconfig.json +/.repo_test.gitconfig.json