// Test for not using fmt.Errorf or testing.Errorf.

// Package foo ...
package foo

import (
	"errors"
	"fmt"
	"testing"
)

func f(x int) error {
	if x > 10 {
		return errors.New(fmt.Sprintf("something %d", x)) // MATCH /should replace.*errors\.New\(fmt\.Sprintf\(\.\.\.\)\).*fmt\.Errorf\(\.\.\.\)/ -> `		return fmt.Errorf("something %d", x)`
	}
	if x > 5 {
		return errors.New(g("blah")) // ok
	}
	if x > 4 {
		return errors.New("something else") // ok
	}
	return nil
}

// TestF is a dummy test
func TestF(t *testing.T) error {
	x := 1
	if x > 10 {
		return t.Error(fmt.Sprintf("something %d", x)) // MATCH /should replace.*t\.Error\(fmt\.Sprintf\(\.\.\.\)\).*t\.Errorf\(\.\.\.\)/
	}
	if x > 5 {
		return t.Error(g("blah")) // ok
	}
	if x > 4 {
		return t.Error("something else") // ok
	}
	return nil
}

func g(s string) string { return "prefix: " + s }
