本文整理汇总了Golang中testing.Logf函数的典型用法代码示例。如果您正苦于以下问题:Golang Logf函数的具体用法?Golang Logf怎么用?Golang Logf使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Logf函数的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: TestValidateLocal
func TestValidateLocal(t *testing.T) {
var testTable = []struct {
input string
expect bool
msg string
}{
{"", false, "Empty local is not valid"},
{"a", true, "Single letter should be fine"},
{strings.Repeat("a", 65), false, "Only valid up to 64 characters"},
{"FirstLast", true, "Mixed case permitted"},
{"user123", true, "Numbers permitted"},
{"a!#$%&'*+-/=?^_`{|}~", true, "Any of !#$%&'*+-/=?^_`{|}~ are permitted"},
{"first.last", true, "Embedded period is permitted"},
{"first..last", false, "Sequence of periods is not allowed"},
{".user", false, "Cannot lead with a period"},
{"user.", false, "Cannot end with a period"},
{"[email protected]", false, "Unquoted @ not permitted"},
{"first last", false, "Unquoted space not permitted"},
{"tricky\\. ", false, "Unquoted space not permitted"},
{"no,commas", false, "Unquoted comma not allowed"},
{"t[es]t", false, "Unquoted square brackets not allowed"},
{"james\\", false, "Cannot end with backslash quote"},
{"james\\@mail", true, "Quoted @ permitted"},
{"quoted\\ space", true, "Quoted space permitted"},
{"no\\,commas", true, "Quoted comma is OK"},
{"t\\[es\\]t", true, "Quoted brackets are OK"},
{"user\\name", true, "Should be able to quote a-z"},
{"USER\\NAME", true, "Should be able to quote A-Z"},
{"user\\1", true, "Should be able to quote a digit"},
{"one\\$\\|", true, "Should be able to quote plain specials"},
{"return\\\r", true, "Should be able to quote ASCII control chars"},
{"high\\\x80", false, "Should not accept > 7-bit quoted chars"},
{"quote\\\"", true, "Quoted double quote is permitted"},
{"\"james\"", true, "Quoted a-z is permitted"},
{"\"first last\"", true, "Quoted space is permitted"},
{"\"[email protected]\"", true, "Quoted @ is allowed"},
{"\"qp\\\"quote\"", true, "Quoted quote within quoted string is OK"},
{"\"unterminated", false, "Quoted string must be terminated"},
{"\"unterminated\\\"", false, "Quoted string must be terminated"},
{"embed\"quote\"string", false, "Embedded quoted string is illegal"},
{"user+mailbox", true, "RFC3696 test case should be valid"},
{"customer/department=shipping", true, "RFC3696 test case should be valid"},
{"$A12345", true, "RFC3696 test case should be valid"},
{"!def!xyz%abc", true, "RFC3696 test case should be valid"},
{"_somename", true, "RFC3696 test case should be valid"},
}
for _, tt := range testTable {
_, _, err := ParseEmailAddress(tt.input + "@domain.com")
if (err != nil) == tt.expect {
if err != nil {
t.Logf("Got error: %s", err)
}
t.Errorf("Expected %v for %q: %s", tt.expect, tt.input, tt.msg)
}
}
}
示例2: TestName
func TestName(t *testing.T) {
debug = testing.Verbose()
d := zx.Dir{
"path": "/a/b",
"name": "b",
"type": "d",
"mode": "0755",
"spath": "/a/b",
"tpath": "/tmp/lfs_test",
"proto": "lfs",
}
preds := []string{
`name=b`,
`! name=b`,
`name!=b`,
}
matches := []bool{true, false, false}
prunes := []bool{false, true, true}
for i, pr := range preds {
p, err := New(pr)
if err != nil {
t.Fatalf("parse %s", err)
}
t.Logf("eval %s\n", p.DebugString())
m, prune, err := p.EvalAt(d, 0)
t.Logf("match %v prune %v sts %v", m, prune, err)
if err != nil || m != matches[i] || prune != prunes[i] {
t.Logf("wrong result %v %v %v", err, m, prune)
t.Fail()
}
}
}
示例3: TestGetFirstLevelPath
func TestGetFirstLevelPath(t *testing.T) {
type GFLPTest struct {
basePath string
path string
result string
}
var tests []GFLPTest
if filepath.Separator == '/' {
tests = []GFLPTest{
{"", "/usr/local/bin", "/usr"},
{"", "/usr/local/file.txt", "/usr"},
{"", "/usr", "/usr"},
{"/", "/usr/local/bin", "/usr"},
{"/usr", "/usr/local/bin", "/usr/local"},
{"/usr", "/usr", ""},
{"/usr", "/etc", ""},
}
} else {
tests = []GFLPTest{
{"", "D:\\usr\\local\\bin", "D:\\"},
{"", "D:\\usr\\local\\file.txt", "D:\\"},
{"", "D:\\", "D:\\"},
{"D:\\", "D:\\usr\\local\\bin", "D:\\usr"},
{"D:\\usr", "D:\\usr\\local\\bin", "D:\\usr\\local"},
{"D:\\usr", "D:\\usr", ""},
{"D:\\usr", "D:\\etc", ""},
}
}
for _, test := range tests {
flp := base.GetFirstLevelPath(test.basePath, test.path)
if flp == test.result {
t.Logf("Test passed. basePath: %v, path: %v\n", test.basePath, test.path)
} else {
t.Errorf("Test failed. basePath: %v, path: %v, expected: %v, got: %v\n",
test.basePath, test.path, test.result, flp)
}
}
}
示例4: TestClientTimeout
//.........这里部分代码省略.........
conn, err := mustConnectNSQD(tcpAddr)
equal(t, err, nil)
defer conn.Close()
_, err = conn.Write([]byte("\n\n"))
equal(t, err, nil)
// if we didn't panic here we're good, see issue #120
}
func TestSizeLimits(t *testing.T) {
opts := NewOptions()
opts.Logger = newTestLogger(t)
opts.Verbose = true
opts.MaxMsgSize = 100
opts.MaxBodySize = 1000
tcpAddr, _, nsqd := mustStartNSQD(opts)
defer os.RemoveAll(opts.DataPath)
defer nsqd.Exit()
conn, err := mustConnectNSQD(tcpAddr)
equal(t, err, nil)
defer conn.Close()
topicName := "test_limits_v2" + strconv.Itoa(int(time.Now().Unix()))
identify(t, conn, nil, frameTypeResponse)
sub(t, conn, topicName, "ch")
// PUB that's valid
nsq.Publish(topicName, make([]byte, 95)).WriteTo(conn)
resp, _ := nsq.ReadResponse(conn)
frameType, data, _ := nsq.UnpackResponse(resp)
t.Logf("frameType: %d, data: %s", frameType, data)
equal(t, frameType, frameTypeResponse)
equal(t, data, []byte("OK"))
// PUB that's invalid (too big)
nsq.Publish(topicName, make([]byte, 105)).WriteTo(conn)
resp, _ = nsq.ReadResponse(conn)
frameType, data, _ = nsq.UnpackResponse(resp)
t.Logf("frameType: %d, data: %s", frameType, data)
equal(t, frameType, frameTypeError)
equal(t, string(data), fmt.Sprintf("E_BAD_MESSAGE PUB message too big 105 > 100"))
// need to reconnect
conn, err = mustConnectNSQD(tcpAddr)
equal(t, err, nil)
defer conn.Close()
// PUB thats empty
nsq.Publish(topicName, []byte{}).WriteTo(conn)
resp, _ = nsq.ReadResponse(conn)
frameType, data, _ = nsq.UnpackResponse(resp)
t.Logf("frameType: %d, data: %s", frameType, data)
equal(t, frameType, frameTypeError)
equal(t, string(data), fmt.Sprintf("E_BAD_MESSAGE PUB invalid message body size 0"))
// need to reconnect
conn, err = mustConnectNSQD(tcpAddr)
equal(t, err, nil)
defer conn.Close()
// MPUB body that's valid
mpub := make([][]byte, 5)
for i := range mpub {
示例5: TestAbsPathify
func TestAbsPathify(t *testing.T) {
defer viper.Reset()
type test struct {
inPath, workingDir, expected string
}
data := []test{
{os.TempDir(), filepath.FromSlash("/work"), filepath.Clean(os.TempDir())}, // TempDir has trailing slash
{"dir", filepath.FromSlash("/work"), filepath.FromSlash("/work/dir")},
}
windowsData := []test{
{"c:\\banana\\..\\dir", "c:\\foo", "c:\\dir"},
{"\\dir", "c:\\foo", "c:\\foo\\dir"},
{"c:\\", "c:\\foo", "c:\\"},
}
unixData := []test{
{"/banana/../dir/", "/work", "/dir"},
}
for i, d := range data {
viper.Reset()
// todo see comment in AbsPathify
viper.Set("workingDir", d.workingDir)
expected := AbsPathify(d.inPath)
if d.expected != expected {
t.Errorf("Test %d failed. Expected %q but got %q", i, d.expected, expected)
}
}
t.Logf("Running platform specific path tests for %s", runtime.GOOS)
if runtime.GOOS == "windows" {
for i, d := range windowsData {
viper.Set("workingDir", d.workingDir)
expected := AbsPathify(d.inPath)
if d.expected != expected {
t.Errorf("Test %d failed. Expected %q but got %q", i, d.expected, expected)
}
}
} else {
for i, d := range unixData {
viper.Set("workingDir", d.workingDir)
expected := AbsPathify(d.inPath)
if d.expected != expected {
t.Errorf("Test %d failed. Expected %q but got %q", i, d.expected, expected)
}
}
}
}
func TestFilename(t *testing.T) {
type test struct {
input, expected string
}
data := []test{
{"index.html", "index"},
{"./index.html", "index"},
{"/index.html", "index"},
{"index", "index"},
{"/tmp/index.html", "index"},
{"./filename-no-ext", "filename-no-ext"},
{"/filename-no-ext", "filename-no-ext"},
{"filename-no-ext", "filename-no-ext"},
{"directoy/", ""}, // no filename case??
{"directory/.hidden.ext", ".hidden"},
{"./directory/../~/banana/gold.fish", "gold"},
{"../directory/banana.man", "banana"},
{"~/mydir/filename.ext", "filename"},
{"./directory//tmp/filename.ext", "filename"},
}
for i, d := range data {
output := Filename(filepath.FromSlash(d.input))
if d.expected != output {
t.Errorf("Test %d failed. Expected %q got %q", i, d.expected, output)
}
}
}
func TestFileAndExt(t *testing.T) {
type test struct {
input, expectedFile, expectedExt string
}
data := []test{
{"index.html", "index", ".html"},
{"./index.html", "index", ".html"},
{"/index.html", "index", ".html"},
{"index", "index", ""},
{"/tmp/index.html", "index", ".html"},
{"./filename-no-ext", "filename-no-ext", ""},
{"/filename-no-ext", "filename-no-ext", ""},
{"filename-no-ext", "filename-no-ext", ""},
{"directoy/", "", ""}, // no filename case??
{"directory/.hidden.ext", ".hidden", ".ext"},
{"./directory/../~/banana/gold.fish", "gold", ".fish"},
{"../directory/banana.man", "banana", ".man"},
//.........这里部分代码省略.........
示例6: TestProcessKilled
func TestProcessKilled(t *testing.T) {
testDefaultStartup(t)
doneCh := make(chan struct{})
shutdown := time.NewTimer(time.Second * 4)
timeout := time.NewTimer(time.Second * 10)
terminatedHandler := func(reason string) {
t.Logf("reason: %s\n", reason)
doneCh <- struct{}{}
}
debugger.SetTerminationHandler(terminatedHandler)
for {
select {
case <-doneCh:
goto DONE
case <-shutdown.C:
debugger.ExitProcess()
case <-timeout.C:
t.Fatalf("timed out waiting for termination")
}
}
DONE:
}
func TestTargetCrashed(t *testing.T) {
testDefaultStartup(t)
defer debugger.ExitProcess()
doneCh := make(chan struct{})
timeout := time.NewTimer(time.Second * 10)
targetCrashedFn := func(targ *ChromeTarget, payload []byte) {
t.Logf("reason: %s\n", string(payload))
doneCh <- struct{}{}
}
tab, err := debugger.NewTab()
if err != nil {
t.Fatalf("error creating new tab")
}
tab.Subscribe("Inspector.targetCrashed", targetCrashedFn)
go func() {
<-timeout.C
t.Fatalf("timed out waiting for crashed to be handled")
}()
_, err = tab.Page.Navigate("chrome://crash")
if err == nil {
t.Fatalf("Navigation should have failed")
}
<-doneCh
}
func TestEvents(t *testing.T) {
testDefaultStartup(t)
defer debugger.ExitProcess()
target, err := debugger.NewTab()
if err != nil {
t.Fatalf("error getting new tab: %s\n", err)
}
console := target.Console
doneCh := make(chan struct{}, 1)
target.Subscribe("Console.messageAdded", func(target *ChromeTarget, v []byte) {
target.Unsubscribe("Console.messageAdded")
msg := &gcdapi.ConsoleMessageAddedEvent{}
err := json.Unmarshal(v, msg)
if err != nil {
t.Fatalf("error unmarshalling event data: %v\n", err)
}
t.Logf("METHOD: %s\n", msg.Method)
eventData := msg.Params.Message
t.Logf("Got event: %v\n", eventData)
t.Logf("Timestamp: %f\n", eventData.Timestamp)
doneCh <- struct{}{}
})
_, err = console.Enable()
if err != nil {
t.Fatalf("error sending enable: %s\n", err)
}
if _, err := target.Page.Navigate(testServerAddr + "console_log.html"); err != nil {
t.Fatalf("error attempting to navigate: %s\n", err)
}
go testTimeoutListener(t, 5, "console message")
<-doneCh
}
func TestSimpleReturn(t *testing.T) {
var ret bool
testDefaultStartup(t)
defer debugger.ExitProcess()
target, err := debugger.NewTab()
if err != nil {
//.........这里部分代码省略.........
示例7: TestMatchChar
//.........这里部分代码省略.........
func nullString(v interface{}) sql.NullString {
if v == nil {
return sql.NullString{Valid: false}
}
return sql.NullString{String: v.(string), Valid: true}
}
var fullTests = []matchTest{
{in: "NULL", out: []string{}},
{in: "\"a\" => \"b\"",
out: []string{"\"a\" => \"b\""},
hstore: Hstore{"a": nullString("b")}},
{in: "\"a\" => NULL",
out: []string{"\"a\" => NULL"},
hstore: Hstore{"a": sql.NullString{Valid: false}}},
{in: "\"id\"=>\"44\", \"foo\"=>\"dfs => somf\", \"name\"=>\"Wash\\\"ington\", \"null\"=>NULL, \"quote\"=>\"\\\"fs ' \"",
out: []string{
"\"id\"=>\"44\"",
"\"foo\"=>\"dfs => somf\"",
"\"name\"=>\"Wash\\\"ington\"",
"\"null\"=>NULL",
"\"quote\"=>\"\\\"fs ' \"",
},
hstore: Hstore{
"id": nullString("44"),
"foo": nullString("dfs => somf"),
"name": nullString("Wash\\\"ington"),
"null": nullString(nil),
"quote": nullString("\\\"fs ' "),
},
},
}
func TestParseHstore(t *testing.T) {
for _, mt := range fullTests {
matches := pairExp.FindAllStringIndex(mt.in, -1)
checkMatch(t, matches, mt)
hs := make(Hstore)
err := parseHstore(mt.in, &hs)
if err != nil {
t.Errorf("Error parsing %q: %v", mt.in, err)
}
checkHstore(t, mt.hstore, hs)
}
}
func TestValueAndScan(t *testing.T) {
for _, mt := range fullTests {
valued, err := mt.hstore.Value()
if err != nil {
t.Fatalf("Value failed: %q", err)
}
var scanned Hstore
(&scanned).Scan([]byte(valued.(string)))
checkHstore(t, mt.hstore, scanned)
}
}
func TestDBRoundTrip(t *testing.T) {
db := openTestConn(t)
defer db.Close()
_, err := db.Exec("CREATE EXTENSION IF NOT EXISTS hstore")
fatal(t, err)
_, err = db.Exec("CREATE TEMP TABLE temp (id serial, data hstore)")
fatal(t, err)
for _, mt := range fullTests {
v, err := mt.hstore.Value()
check(t, err)
r, err := db.Exec("INSERT INTO temp (data) VALUES ($1)", v)
check(t, err)
if n, _ := r.RowsAffected(); n != 1 {
t.Fatalf("expected 1 row affected, not %d", n)
}
}
rows, err := db.Query("SELECT data FROM temp ORDER BY id ASC")
check(t, err)
for _, mt := range fullTests {
if !rows.Next() {
t.Errorf("Ran out of rows!")
}
var data Hstore
err = rows.Scan(&data)
check(t, err)
t.Logf("%+v", data)
checkHstore(t, mt.hstore, data)
}
if rows.Next() {
t.Errorf("Too many rows!")
}
}
示例8: _
func _(t *testing.T) {
fmt.Printf(<warning descr="Got 1 placeholder(s) for 2 arguments(s)">s</warning>, 1, 2)
fmt.Printf(<warning descr="Value used for formatting text does not appear to be a string">s1</warning>, 1, 2)
fmt.Printf(<warning descr="Value used for formatting text does not appear to be a string">s2</warning>, 1, 2)
fmt.Errorf("%d %d %#[1]x %#x %2.f %d %2.2f %.f %.3f %[9]*.[2]*[3]f %d %f %#[1]x %#x %[2]d %v % d",
1, 2, 3, 4, 5, 6, 7, 8, 9,
)
fmt.Fprintf(nil, "%d %d %#[1]x %#x %2.f %d %2.2f %.f %.3f %[9]*.[2]*[3]f %d %f %#[1]x %#x %[2]d %v % d",
1, 2, 3, 4, 5, 6, 7, 8, 9,
)
fmt.Fscanf(nil, "%d %d %#[1]x %#x %2.f %d %2.2f %.f %.3f %[9]*.[2]*[3]f %d %f %#[1]x %#x %[2]d %v % d",
1, 2, 3, 4, 5, 6, 7, 8, 9,
)
fmt.Printf("%d %d %#[1]x %#x %2.f %d %2.2f %.f %.3f %[9]*.[2]*[3]f %d %f %#[1]x %#x %[2]d %v % d",
1, 2, 3, 4, 5, 6, 7, 8, 9,
)
fmt.Scanf("%d %d %#[1]x %#x %2.f %d %2.2f %.f %.3f %[9]*.[2]*[3]f %d %f %#[1]x %#x %[2]d %v % d",
1, 2, 3, 4, 5, 6, 7, 8, 9,
)
fmt.Sprintf("%d %d %#[1]x %#x %2.f %d %2.2f %.f %.3f %[9]*.[2]*[3]f %d %f %#[1]x %#x %[2]d %v % d",
1, 2, 3, 4, 5, 6, 7, 8, 9,
)
fmt.Sscanf(nil, "%d %d %#[1]x %#x %2.f %d %2.2f %.f %.3f %[9]*.[2]*[3]f %d %f %#[1]x %#x %[2]d %v % d",
1, 2, 3, 4, 5, 6, 7, 8, 9,
)
log.Fatalf("%d %d %#[1]x %#x %2.f %d %2.2f %.f %.3f %[9]*.[2]*[3]f %d %f %#[1]x %#x %[2]d %v % d",
1, 2, 3, 4, 5, 6, 7, 8, 9,
)
log.Panicf("%d %d %#[1]x %#x %2.f %d %2.2f %.f %.3f %[9]*.[2]*[3]f %d %f %#[1]x %#x %[2]d %v % d",
1, 2, 3, 4, 5, 6, 7, 8, 9,
)
log.Printf("%d %d %#[1]x %#x %2.f %d %2.2f %.f %.3f %[9]*.[2]*[3]f %d %f %#[1]x %#x %[2]d %v % d",
1, 2, 3, 4, 5, 6, 7, 8, 9,
)
fmt.Printf("eq (as-is): %.3f%% score: %v offset: %v descr: [%v]\n", 3.14, 1, 1, "descr")
fmt.Printf("a: %+v", 1)
fmt.Printf("%-4d", 999)
fmt.Printf("a: %%%+v", 1)
fmt.Printf(<warning descr="Got 0 placeholder(s) for 1 arguments(s)">"a: %%%%+v"</warning>, 1)
fmt.Printf("#%02X%02X%02X", 1, 2, 3)
fmt.Printf(<warning descr="Got 3 placeholder(s) for 4 arguments(s)">"#%02X%02X%02X"</warning>, 1, 2, 3, 4)
myFormatVar := "%d %d %#[1]x %#x %2.f %d %2.2f %.f %.3f %[9]*.[2]*[3]f %d %f %#[1]x %#x %[2]d %v % d"
log.Printf(myFormatVar, 1, 2, 3, 4, 5, 6, 7, 8, 9)
myWrongFormatVar := "%d %d %#[1]x %#x %2.f %d %2.2f %.f %.3f %[9]*.[2]*[3]f %d %f %#[1]x %#x %[2]d %v % d"
log.Printf(<warning descr="Got 9 placeholder(s) for 8 arguments(s)">myWrongFormatVar</warning>, 1, 2, 3, 4, 5, 6, 7, 8)
log.Printf(myFormatConst, 1, 2, 3, 4, 5, 6, 7, 8, 9)
t.Errorf(myFormatConst, 1, 2, 3, 4, 5, 6, 7, 8, 9)
t.Fatalf(myFormatConst, 1, 2, 3, 4, 5, 6, 7, 8, 9)
t.Logf(myFormatConst, 1, 2, 3, 4, 5, 6, 7, 8, 9)
t.Skipf(myFormatConst, 1, 2, 3, 4, 5, 6, 7, 8, 9)
log.Printf(<warning descr="Got 9 placeholder(s) for 8 arguments(s)">myWrongFormatConst</warning>, 1, 2, 3, 4, 5, 6, 7, 8)
t.Errorf(<warning descr="Got 9 placeholder(s) for 8 arguments(s)">myWrongFormatConst</warning>, 1, 2, 3, 4, 5, 6, 7, 8)
t.Fatalf(<warning descr="Got 9 placeholder(s) for 8 arguments(s)">myWrongFormatConst</warning>, 1, 2, 3, 4, 5, 6, 7, 8)
t.Logf(<warning descr="Got 9 placeholder(s) for 8 arguments(s)">myWrongFormatConst</warning>, 1, 2, 3, 4, 5, 6, 7, 8)
t.Skipf(<warning descr="Got 9 placeholder(s) for 8 arguments(s)">myWrongFormatConst</warning>, 1, 2, 3, 4, 5, 6, 7, 8)
printf("%d", 1)
printf("%[2]d %[1]d", 1, 2)
printf("%[2]d %[1]d %d", 1, 2)
printf("%[2]d %[1]d %[2]d", 1, 2)
printf("%d")
myNonFormatFunc := func () int {
return 1
}
log.Printf(<warning descr="Value used for formatting text does not appear to be a string">myNonFormatFunc()</warning>, 1, 2, 3, 4, 5, 6, 7, 8, 9)
log.Printf(<warning descr="Got 9 placeholder(s) for 8 arguments(s)">"%d %d %#[1]x %#x %2.f %d %2.2f %.f %.3f %[9]*.[2]*[3]f %d %f %#[1]x %#x %[2]d %v % d"</warning>,
1, 2, 3, 4, 5, 6, 7, 8,
)
fmt.Sprintf(<warning descr="Got 1 placeholder(s) for 0 arguments(s)">"%d"</warning>)
log.Printf(<warning descr="Got 7 placeholder(s) for 13 arguments(s)">"%d %d %#[1]x %#x %f %2.f %2.2f %.f %.3f %[3]*.[2]*[1]f %d %d %#[1]x %#x %*[2]d %v % d"</warning>,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
)
fmt.Sprintf(<warning descr="Got 1 placeholder(s) for 2 arguments(s)">"%d"</warning>, 1, 2)
fmt.Print(<warning descr="Possible formatting directive in '\"%[2]*.[1]*[3]d\"'">"%[2]*.[1]*[3]d"</warning>, 2, 3, myNonFormatFunc)
fmt.Print(<warning descr="Possible formatting directive in '\"%[2]*.[1]*[3]d\"'">"%[2]*.[1]*[3]d"</warning>, 2, 3, printf)
fmt.Println("demo<warning descr="Function already ends with new line">\n</warning>", 2, 3, <warning descr="Argument 'myNonFormatFunc' is not a function call">myNonFormatFunc</warning>)
fmt.Println("demo<warning descr="Function already ends with new line">\n</warning>", 2, 3, <warning descr="Argument 'printf' is not a function call">printf</warning>)
fmt.Print("demo\n", 2, 3, <warning descr="Argument 'myNonFormatFunc' is not a function call">myNonFormatFunc</warning>)
fmt.Print("demo\n", 2, 3, <warning descr="Argument 'printf' is not a function call">printf</warning>)
//.........这里部分代码省略.........
示例9: TestChromeTermination
func TestChromeTermination(t *testing.T) {
auto := testDefaultStartup(t)
doneCh := make(chan struct{})
shutdown := time.NewTimer(time.Second * 4)
timeout := time.NewTimer(time.Second * 10)
terminatedHandler := func(reason string) {
t.Logf("reason: %s\n", reason)
doneCh <- struct{}{}
}
auto.SetTerminationHandler(terminatedHandler)
for {
select {
case <-doneCh:
goto DONE
case <-shutdown.C:
auto.Shutdown()
case <-timeout.C:
t.Fatalf("timed out waiting for termination")
}
}
DONE:
}
func testDefaultStartup(t *testing.T) *AutoGcd {
s := NewSettings(testPath, testRandomDir(t))
s.RemoveUserDir(true)
s.AddStartupFlags(testStartupFlags)
s.SetDebuggerPort(testRandomPort(t))
auto := NewAutoGcd(s)
if err := auto.Start(); err != nil {
t.Fatalf("failed to start chrome: %s\n", err)
}
auto.SetTerminationHandler(nil) // do not want our tests to panic
return auto
}
func testServer() {
testListener, _ = net.Listen("tcp", ":0")
_, testServerPort, _ := net.SplitHostPort(testListener.Addr().String())
testServerAddr = fmt.Sprintf("http://localhost:%s/", testServerPort)
go http.Serve(testListener, http.FileServer(http.Dir("testdata")))
}
func testRandomPort(t *testing.T) string {
l, err := net.Listen("tcp", ":0")
if err != nil {
t.Fatal(err)
}
_, randPort, _ := net.SplitHostPort(l.Addr().String())
l.Close()
return randPort
}
func testRandomDir(t *testing.T) string {
dir, err := ioutil.TempDir(testDir, "autogcd")
if err != nil {
t.Fatalf("error getting temp dir: %s\n", err)
}
return dir
}