package main_test

//go:generate v23 test generate .

import (
	"bytes"
	"fmt"
	"io/ioutil"
	"os"
	"regexp"
	"testing"

	"v.io/core/veyron/lib/modules"
	"v.io/core/veyron/lib/testutil/v23tests"
)

func TestHelperProcess(t *testing.T) {
	modules.DispatchInTest()
}

func V23TestSimulator(t *v23tests.T) {
	binary := t.BuildGoPkg("v.io/core/veyron/tools/naming/simulator")
	files, err := ioutil.ReadDir("./testdata")
	if err != nil {
		t.Fatal(err)
	}
	scripts := []string{}
	re := regexp.MustCompile(`.*\.scr`)
	for _, f := range files {
		if !f.IsDir() && re.MatchString(f.Name()) {
			scripts = append(scripts, "./testdata/"+f.Name())
		}
	}
	for _, script := range scripts {
		if testing.Verbose() {
			fmt.Fprintf(os.Stderr, "Script %v\n", script)
		}
		scriptFile, err := os.Open(script)
		if err != nil {
			t.Fatalf("Open(%q) failed: %v", script, err)
		}
		invocation := binary.WithStdin(scriptFile).Start()
		var stdout, stderr bytes.Buffer
		if err := invocation.Wait(&stdout, &stderr); err != nil {
			fmt.Fprintf(os.Stderr, "Script %v failed\n", script)
			fmt.Fprintln(os.Stderr, stdout.String())
			fmt.Fprintln(os.Stderr, stderr.String())
			t.Error(err)
		}
	}
}
