From 516362bcadf7aee1ed132fecfeff1d91805abaaa Mon Sep 17 00:00:00 2001
From: Taylor Gerring <taylor.gerring@gmail.com>
Date: Thu, 11 Jun 2015 15:23:49 -0400
Subject: Allow specifying single depth directory

---
 cmd/ethtest/main.go | 104 +++++++++++++++++++++++++++++++++-------------------
 1 file changed, 67 insertions(+), 37 deletions(-)

(limited to 'cmd')

diff --git a/cmd/ethtest/main.go b/cmd/ethtest/main.go
index 07554c89f..844c15e32 100644
--- a/cmd/ethtest/main.go
+++ b/cmd/ethtest/main.go
@@ -22,62 +22,92 @@
 package main
 
 import (
+	"io/ioutil"
 	"os"
 
 	"github.com/ethereum/go-ethereum/logger/glog"
 	"github.com/ethereum/go-ethereum/tests"
 )
 
+func getFiles(path string) ([]string, error) {
+	var files []string
+	f, err := os.Open(path)
+	if err != nil {
+		return nil, err
+	}
+	defer f.Close()
+
+	fi, err := f.Stat()
+	if err != nil {
+		return nil, err
+	}
+
+	switch mode := fi.Mode(); {
+	case mode.IsDir():
+		fi, _ := ioutil.ReadDir(path)
+		files = make([]string, len(fi))
+		for i, v := range fi {
+			// only go 1 depth and leave directory entires blank
+			if !v.IsDir() {
+				files[i] = path + v.Name()
+			}
+		}
+	case mode.IsRegular():
+		files = make([]string, 1)
+		files[0] = path
+	}
+
+	return files, nil
+}
+
 func main() {
 	glog.SetToStderr(true)
-
+	var continueOnError bool = false
 	// vm.Debug = true
 
 	if len(os.Args) < 2 {
 		glog.Exit("Must specify test type")
 	}
 
-	test := os.Args[1]
+	testtype := os.Args[1]
+	var pattern string
+	if len(os.Args) > 2 {
+		pattern = os.Args[2]
+	}
 
-	// var code int
-	switch test {
-	case "vm", "VMTests":
-		if len(os.Args) > 2 {
-			if err := tests.RunVmTest(os.Args[2]); err != nil {
-				glog.Errorln(err)
-			}
-		} else {
-			glog.Exit("Must supply file argument")
-		}
-	case "state", "StateTest":
-		if len(os.Args) > 2 {
-			if err := tests.RunStateTest(os.Args[2]); err != nil {
-				glog.Errorln(err)
-			}
-			// code = RunVmTest(strings.NewReader(os.Args[2]))
-		} else {
-			glog.Exit("Must supply file argument")
-			// code = RunVmTest(os.Stdin)
+	files, err := getFiles(pattern)
+	if err != nil {
+		glog.Fatal(err)
+	}
+
+	for _, testfile := range files {
+		// Skip blank entries
+		if len(testfile) == 0 {
+			continue
 		}
-	case "tx", "TransactionTests":
-		if len(os.Args) > 2 {
-			if err := tests.RunTransactionTests(os.Args[2]); err != nil {
-				glog.Errorln(err)
-			}
-		} else {
-			glog.Exit("Must supply file argument")
+		// TODO allow io.Reader to be passed so Stdin can be piped
+		// RunVmTest(strings.NewReader(os.Args[2]))
+		// RunVmTest(os.Stdin)
+		var err error
+		switch testtype {
+		case "vm", "VMTests":
+			err = tests.RunVmTest(testfile)
+		case "state", "StateTest":
+			err = tests.RunStateTest(testfile)
+		case "tx", "TransactionTests":
+			err = tests.RunTransactionTests(testfile)
+		case "bc", "BlockChainTest":
+			err = tests.RunBlockTest(testfile)
+		default:
+			glog.Fatalln("Invalid test type specified")
 		}
-	case "bc", "BlockChainTest":
-		if len(os.Args) > 2 {
-			if err := tests.RunBlockTest(os.Args[2]); err != nil {
+
+		if err != nil {
+			if continueOnError {
 				glog.Errorln(err)
+			} else {
+				glog.Fatalln(err)
 			}
-		} else {
-			glog.Exit("Must supply file argument")
 		}
-	default:
-		glog.Exit("Invalid test type specified")
 	}
-
-	// os.Exit(code)
 }
-- 
cgit v1.2.3