Merge pull request #400 from codegangsta/coverage

Add a vet/test runner script with coverage on by default
This commit is contained in:
Jesse Szwedko 2016-05-09 22:16:32 -07:00
commit 9f09b40642
4 changed files with 99 additions and 5 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*.coverprofile

View File

@ -1,4 +1,5 @@
language: go language: go
sudo: false sudo: false
go: go:
@ -8,16 +9,16 @@ go:
- 1.4 - 1.4
- 1.5.4 - 1.5.4
- 1.6.2 - 1.6.2
- tip - master
matrix: matrix:
allow_failures: allow_failures:
- go: tip - go: master
before_script: before_script:
- go get github.com/meatballhat/gfmxr/... - go get github.com/meatballhat/gfmxr/...
script: script:
- go vet ./... - ./runtests vet
- go test -v ./... - ./runtests test
- gfmxr -c $(grep -c 'package main' README.md) -s README.md - ./runtests gfmxr

View File

@ -10,6 +10,7 @@
- `context.GlobalBoolT` was added as an analogue to `context.GlobalBool` - `context.GlobalBoolT` was added as an analogue to `context.GlobalBool`
- Support for hiding commands by setting `Hidden: true` -- this will hide the - Support for hiding commands by setting `Hidden: true` -- this will hide the
commands in help output commands in help output
- `./runtests` test runner with coverage tracking by default
### Changed ### Changed
- `Float64Flag`, `IntFlag`, and `DurationFlag` default values are no longer - `Float64Flag`, `IntFlag`, and `DurationFlag` default values are no longer

91
runtests Executable file
View File

@ -0,0 +1,91 @@
#!/usr/bin/env python
from __future__ import print_function
import os
import sys
import tempfile
from subprocess import check_call, check_output
PACKAGE_NAME = os.environ.get(
'CLI_PACKAGE_NAME', 'github.com/codegangsta/cli'
)
def main(sysargs=sys.argv[:]):
target = 'test'
if len(sysargs) > 1:
target = sysargs[1]
{
'vet': _vet,
'test': _test,
'gfmxr': _gfmxr
}[target]()
return 0
def _test():
if check_output('go version'.split()).split()[2] < 'go1.2':
_run('go test -v ./...'.split())
return
coverprofiles = []
for subpackage in ['', 'altsrc']:
coverprofile = 'cli.coverprofile'
if subpackage != '':
coverprofile = '{}.coverprofile'.format(subpackage)
coverprofiles.append(coverprofile)
_run('go test -v'.split() + [
'-coverprofile={}'.format(coverprofile),
('{}/{}'.format(PACKAGE_NAME, subpackage)).rstrip('/')
])
combined = _combine_coverprofiles(coverprofiles)
_run('go tool cover -func={}'.format(combined.name).split())
combined.close()
def _gfmxr():
_run(['gfmxr', '-c', str(_gfmxr_count()), '-s', 'README.md'])
def _vet():
_run('go vet ./...'.split())
def _run(command):
print('runtests: {}'.format(' '.join(command)), file=sys.stderr)
check_call(command)
def _gfmxr_count():
with open('README.md') as infile:
lines = infile.read().splitlines()
return len(filter(_is_go_runnable, lines))
def _is_go_runnable(line):
return line.startswith('package main')
def _combine_coverprofiles(coverprofiles):
combined = tempfile.NamedTemporaryFile(suffix='.coverprofile')
combined.write('mode: set\n')
for coverprofile in coverprofiles:
with open(coverprofile, 'r') as infile:
for line in infile.readlines():
if not line.startswith('mode: '):
combined.write(line)
combined.flush()
return combined
if __name__ == '__main__':
sys.exit(main())