main: add support for -c and -o flags to tinygo test
Этот коммит содержится в:
родитель
c10dcd429c
коммит
54602fe0c3
1 изменённых файлов: 27 добавлений и 5 удалений
32
main.go
32
main.go
|
@ -74,7 +74,12 @@ func copyFile(src, dst string) error {
|
||||||
}
|
}
|
||||||
defer source.Close()
|
defer source.Close()
|
||||||
|
|
||||||
destination, err := os.Create(dst)
|
st, err := source.Stat()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
destination, err := os.OpenFile(dst, os.O_RDWR|os.O_CREATE|os.O_TRUNC, st.Mode())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -120,14 +125,27 @@ func Build(pkgName, outpath string, options *compileopts.Options) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test runs the tests in the given package.
|
// Test runs the tests in the given package.
|
||||||
func Test(pkgName string, options *compileopts.Options) error {
|
func Test(pkgName string, options *compileopts.Options, testCompileOnly bool, outpath string) error {
|
||||||
options.TestConfig.CompileTestBinary = true
|
options.TestConfig.CompileTestBinary = true
|
||||||
config, err := builder.NewConfig(options)
|
config, err := builder.NewConfig(options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return builder.Build(pkgName, ".elf", config, func(result builder.BuildResult) error {
|
return builder.Build(pkgName, outpath, config, func(result builder.BuildResult) error {
|
||||||
|
if testCompileOnly || outpath != "" {
|
||||||
|
// Write test binary to the specified file name.
|
||||||
|
if outpath == "" {
|
||||||
|
// No -o path was given, so create one now.
|
||||||
|
// This matches the behavior of go test.
|
||||||
|
outpath = filepath.Base(result.MainDir) + ".test"
|
||||||
|
}
|
||||||
|
copyFile(result.Binary, outpath)
|
||||||
|
}
|
||||||
|
if testCompileOnly {
|
||||||
|
// Do not run the test.
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(config.Target.Emulator) == 0 {
|
if len(config.Target.Emulator) == 0 {
|
||||||
// Run directly.
|
// Run directly.
|
||||||
cmd := exec.Command(result.Binary)
|
cmd := exec.Command(result.Binary)
|
||||||
|
@ -807,9 +825,13 @@ func main() {
|
||||||
flagDeps = flag.Bool("deps", false, "")
|
flagDeps = flag.Bool("deps", false, "")
|
||||||
}
|
}
|
||||||
var outpath string
|
var outpath string
|
||||||
if command == "help" || command == "build" || command == "build-library" {
|
if command == "help" || command == "build" || command == "build-library" || command == "test" {
|
||||||
flag.StringVar(&outpath, "o", "", "output filename")
|
flag.StringVar(&outpath, "o", "", "output filename")
|
||||||
}
|
}
|
||||||
|
var testCompileOnlyFlag *bool
|
||||||
|
if command == "help" || command == "test" {
|
||||||
|
testCompileOnlyFlag = flag.Bool("c", false, "compile the test binary but do not run it")
|
||||||
|
}
|
||||||
|
|
||||||
// Early command processing, before commands are interpreted by the Go flag
|
// Early command processing, before commands are interpreted by the Go flag
|
||||||
// library.
|
// library.
|
||||||
|
@ -946,7 +968,7 @@ func main() {
|
||||||
usage()
|
usage()
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
err := Test(pkgName, options)
|
err := Test(pkgName, options, *testCompileOnlyFlag, outpath)
|
||||||
handleCompilerError(err)
|
handleCompilerError(err)
|
||||||
case "targets":
|
case "targets":
|
||||||
dir := filepath.Join(goenv.Get("TINYGOROOT"), "targets")
|
dir := filepath.Join(goenv.Get("TINYGOROOT"), "targets")
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче