gopy: add support for sub-tests

This CL adds support for sub-tests for Go >= 1.7 and adds the needed
fallback code for Go < 1.7.

This allows to run sub-tests in parallel, where each sub-test tests a
backend (py2-cffi, py3-cffi, py3, ...).
This commit is contained in:
Sebastien Binet 2017-08-08 11:01:56 +02:00
parent b2daa0909e
commit 70ab2b0b03
3 changed files with 96 additions and 29 deletions

View File

@ -98,35 +98,6 @@ type pkg struct {
want []byte
}
func testPkg(t *testing.T, table pkg) {
backends := table.lang
if backends == nil {
backends = []string{"py2"}
}
for _, be := range backends {
if _, ok := testBackends[be]; !ok {
// backend not available.
continue
}
switch be {
case "py2":
testPkgBackend(t, be, "python2", table)
case "py2-cffi":
testPkgBackend(t, "cffi", "python2", table)
case "py3":
testPkgBackend(t, be, "python3", table)
case "py3-cffi":
testPkgBackend(t, "cffi", "python3", table)
case "pypy2-cffi":
testPkgBackend(t, "cffi", "pypy", table)
case "pypy3-cffi":
testPkgBackend(t, "cffi", "pypy3", table)
default:
t.Errorf("invalid backend name %q", be)
}
}
}
func testPkgBackend(t *testing.T, lang, pycmd string, table pkg) {
workdir, err := ioutil.TempDir("", "gopy-")
if err != nil {

38
zsupport_go16_test.go Normal file
View File

@ -0,0 +1,38 @@
// Copyright 2017 The go-python Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build !go1.7
package main
import "testing"
func testPkg(t *testing.T, table pkg) {
backends := table.lang
if backends == nil {
backends = []string{"py2"}
}
for _, be := range backends {
if _, ok := testBackends[be]; !ok {
// backend not available.
continue
}
switch be {
case "py2":
testPkgBackend(t, be, "python2", table)
case "py2-cffi":
testPkgBackend(t, "cffi", "python2", table)
case "py3":
testPkgBackend(t, be, "python3", table)
case "py3-cffi":
testPkgBackend(t, "cffi", "python3", table)
case "pypy2-cffi":
testPkgBackend(t, "cffi", "pypy", table)
case "pypy3-cffi":
testPkgBackend(t, "cffi", "pypy3", table)
default:
t.Errorf("invalid backend name %q", be)
}
}
}

58
zsupport_test.go Normal file
View File

@ -0,0 +1,58 @@
// Copyright 2017 The go-python Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build go1.7
package main
import (
"testing"
)
func testPkg(t *testing.T, table pkg) {
backends := table.lang
if backends == nil {
backends = []string{"py2"}
}
for _, be := range backends {
if _, ok := testBackends[be]; !ok {
// backend not available.
continue
}
switch be {
case "py2":
t.Run("py2-python2", func(t *testing.T) {
t.Parallel()
testPkgBackend(t, "py2", "python2", table)
})
case "py2-cffi":
t.Run(be, func(t *testing.T) {
t.Parallel()
testPkgBackend(t, "cffi", "python2", table)
})
case "py3":
t.Run(be, func(t *testing.T) {
t.Parallel()
testPkgBackend(t, be, "python3", table)
})
case "py3-cffi":
t.Run(be, func(t *testing.T) {
t.Parallel()
testPkgBackend(t, "cffi", "python3", table)
})
case "pypy2-cffi":
t.Run(be, func(t *testing.T) {
t.Parallel()
testPkgBackend(t, "cffi", "pypy", table)
})
case "pypy3-cffi":
t.Run(be, func(t *testing.T) {
t.Parallel()
testPkgBackend(t, "cffi", "pypy3", table)
})
default:
t.Errorf("invalid backend name %q", be)
}
}
}