package planr import "fmt" type Runner struct { adapters []Adapter } func (r *Runner) RegisterAdapter(a Adapter) { r.adapters = append(r.adapters, a) } func (r Runner) adapterCfgs() []AdapterConfig { cgs := make([]AdapterConfig, len(r.adapters)) for _, adapter := range r.adapters { cgs = append(cgs, adapter.Config()) } return cgs } type TcTab map[string] []*TestCase func (r Runner) buildTcLUT(tcs []TestCase) TcTab { m := make(TcTab, 0) for i := range tcs { tc := &tcs[i] for nm := range tc.Config.adapters_ { m[nm] = append(m[nm], tc) } } return m } func (r Runner) Build(tcs []TestCase) { tcTab := r.buildTcLUT(tcs) for _, adapter := range r.adapters { nm := adapter.Config().Name fmt.Printf("[R] Building adapter \"%s\"\n", nm) adapter.Build(tcTab[nm]) } } func (r Runner) Evaluate(tcs []TestCase) []TestResult { tcTab := r.buildTcLUT(tcs) results := make([]TestResult, 0) for _, adapter := range r.adapters { nm := adapter.Config().Name fmt.Printf("[R] Evaluating adapter \"%s\"\n", nm) adapter.Evaluate(tcTab[nm]) } return results } func (r Runner) Run(root string) [] TestResult { tcs := collectUnits(root, r.adapterCfgs()) r.Build(tcs) trs := r.Evaluate(tcs) return trs }