| // Copyright 2011 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package main |
| |
| func init() { |
| addTestCases(errorTests, errorFn) |
| } |
| |
| var errorTests = []testCase{ |
| { |
| Name: "error.0", |
| In: `package main |
| |
| func error() {} |
| |
| var error int |
| `, |
| Out: `package main |
| |
| func error() {} |
| |
| var error int |
| `, |
| }, |
| { |
| Name: "error.1", |
| In: `package main |
| |
| import "os" |
| |
| func f() os.Error { |
| return os.EOF |
| } |
| |
| func error() {} |
| |
| var error int |
| |
| func g() { |
| error := 1 |
| _ = error |
| } |
| `, |
| Out: `package main |
| |
| import "io" |
| |
| func f() error { |
| return io.EOF |
| } |
| |
| func error_() {} |
| |
| var error_ int |
| |
| func g() { |
| error := 1 |
| _ = error |
| } |
| `, |
| }, |
| { |
| Name: "error.2", |
| In: `package main |
| |
| import "os" |
| |
| func f() os.Error { |
| return os.EOF |
| } |
| |
| func g() string { |
| // these all convert because f is known |
| if err := f(); err != nil { |
| return err.String() |
| } |
| if err1 := f(); err1 != nil { |
| return err1.String() |
| } |
| if e := f(); e != nil { |
| return e.String() |
| } |
| if x := f(); x != nil { |
| return x.String() |
| } |
| |
| // only the error names (err, err1, e) convert; u is not known |
| if err := u(); err != nil { |
| return err.String() |
| } |
| if err1 := u(); err1 != nil { |
| return err1.String() |
| } |
| if e := u(); e != nil { |
| return e.String() |
| } |
| if x := u(); x != nil { |
| return x.String() |
| } |
| return "" |
| } |
| |
| type T int |
| |
| func (t T) String() string { return "t" } |
| |
| type PT int |
| |
| func (p *PT) String() string { return "pt" } |
| |
| type MyError int |
| |
| func (t MyError) String() string { return "myerror" } |
| |
| type PMyError int |
| |
| func (p *PMyError) String() string { return "pmyerror" } |
| |
| func error() {} |
| |
| var error int |
| `, |
| Out: `package main |
| |
| import "io" |
| |
| func f() error { |
| return io.EOF |
| } |
| |
| func g() string { |
| // these all convert because f is known |
| if err := f(); err != nil { |
| return err.Error() |
| } |
| if err1 := f(); err1 != nil { |
| return err1.Error() |
| } |
| if e := f(); e != nil { |
| return e.Error() |
| } |
| if x := f(); x != nil { |
| return x.Error() |
| } |
| |
| // only the error names (err, err1, e) convert; u is not known |
| if err := u(); err != nil { |
| return err.Error() |
| } |
| if err1 := u(); err1 != nil { |
| return err1.Error() |
| } |
| if e := u(); e != nil { |
| return e.Error() |
| } |
| if x := u(); x != nil { |
| return x.String() |
| } |
| return "" |
| } |
| |
| type T int |
| |
| func (t T) String() string { return "t" } |
| |
| type PT int |
| |
| func (p *PT) String() string { return "pt" } |
| |
| type MyError int |
| |
| func (t MyError) Error() string { return "myerror" } |
| |
| type PMyError int |
| |
| func (p *PMyError) Error() string { return "pmyerror" } |
| |
| func error_() {} |
| |
| var error_ int |
| `, |
| }, |
| { |
| Name: "error.3", |
| In: `package main |
| |
| import "os" |
| |
| func f() os.Error { |
| return os.EOF |
| } |
| |
| type PathError struct { |
| Name string |
| Error os.Error |
| } |
| |
| func (p *PathError) String() string { |
| return p.Name + ": " + p.Error.String() |
| } |
| |
| func (p *PathError) Error1() string { |
| p = &PathError{Error: nil} |
| return fmt.Sprint(p.Name, ": ", p.Error) |
| } |
| `, |
| Out: `package main |
| |
| import "io" |
| |
| func f() error { |
| return io.EOF |
| } |
| |
| type PathError struct { |
| Name string |
| Err error |
| } |
| |
| func (p *PathError) Error() string { |
| return p.Name + ": " + p.Err.Error() |
| } |
| |
| func (p *PathError) Error1() string { |
| p = &PathError{Err: nil} |
| return fmt.Sprint(p.Name, ": ", p.Err) |
| } |
| `, |
| }, |
| } |