cloudfoundry-community/bosh-cloudstack-cpi

View on GitHub
go_agent/src/code.google.com/p/go.tools/go/types/testdata/methodsets.src

Summary

Maintainability
Test Coverage
// Copyright 2013 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 methodsets

type T0 struct {}

func (T0) v0() {}
func (*T0) p0() {}

type T1 struct {} // like T0 with different method names

func (T1) v1() {}
func (*T1) p1() {}

type T2 interface {
    v2()
    p2()
}

type T3 struct {
    T0
    *T1
    T2
}

// Method expressions
func _() {
    var (
        _ func(T0) = T0.v0
        _ = T0 /* ERROR "not in method set" */ .p0

        _ func (*T0) = (*T0).v0
        _ func (*T0) = (*T0).p0

        // T1 is like T0

        _ func(T2) = T2.v2
        _ func(T2) = T2.p2

        _ func(T3) = T3.v0
        _ func(T3) = T3 /* ERROR "not in method set" */ .p0
        _ func(T3) = T3.v1
        _ func(T3) = T3.p1
        _ func(T3) = T3.v2
        _ func(T3) = T3.p2

        _ func(*T3) = (*T3).v0
        _ func(*T3) = (*T3).p0
        _ func(*T3) = (*T3).v1
        _ func(*T3) = (*T3).p1
        _ func(*T3) = (*T3).v2
        _ func(*T3) = (*T3).p2
    )
}

// Method values with addressable receivers
func _() {
    var (
        v0 T0
        _ func() = v0.v0
        _ func() = v0.p0
    )

    var (
        p0 *T0
        _ func() = p0.v0
        _ func() = p0.p0
    )

    // T1 is like T0

    var (
        v2 T2
        _ func() = v2.v2
        _ func() = v2.p2
    )

    var (
        v4 T3
        _ func() = v4.v0
        _ func() = v4.p0
        _ func() = v4.v1
        _ func() = v4.p1
        _ func() = v4.v2
        _ func() = v4.p2
    )

    var (
        p4 *T3
        _ func() = p4.v0
        _ func() = p4.p0
        _ func() = p4.v1
        _ func() = p4.p1
        _ func() = p4.v2
        _ func() = p4.p2
    )
}

// Method calls with addressable receivers
func _() {
    var v0 T0
    v0.v0()
    v0.p0()

    var p0 *T0
    p0.v0()
    p0.p0()

    // T1 is like T0

    var v2 T2
    v2.v2()
    v2.p2()

    var v4 T3
    v4.v0()
    v4.p0()
    v4.v1()
    v4.p1()
    v4.v2()
    v4.p2()

    var p4 *T3
    p4.v0()
    p4.p0()
    p4.v1()
    p4.p1()
    p4.v2()
    p4.p2()
}

// Method values with value receivers
func _() {
    var (
        _ func() = T0{}.v0
        _ func() = T0 /* ERROR "not in method set" */ {}.p0

        _ func() = (&T0{}).v0
        _ func() = (&T0{}).p0

        // T1 is like T0

        // no values for T2

        _ func() = T3{}.v0
        _ func() = T3 /* ERROR "not in method set" */ {}.p0
        _ func() = T3{}.v1
        _ func() = T3{}.p1
        _ func() = T3{}.v2
        _ func() = T3{}.p2

        _ func() = (&T3{}).v0
        _ func() = (&T3{}).p0
        _ func() = (&T3{}).v1
        _ func() = (&T3{}).p1
        _ func() = (&T3{}).v2
        _ func() = (&T3{}).p2
    )
}

// Method calls with value receivers
func _() {
    T0{}.v0()
    T0 /* ERROR "not in method set" */ {}.p0()

    (&T0{}).v0()
    (&T0{}).p0()

    // T1 is like T0

    // no values for T2

    T3{}.v0()
    T3 /* ERROR "not in method set" */ {}.p0()
    T3{}.v1()
    T3{}.p1()
    T3{}.v2()
    T3{}.p2()

    (&T3{}).v0()
    (&T3{}).p0()
    (&T3{}).v1()
    (&T3{}).p1()
    (&T3{}).v2()
    (&T3{}).p2()
}

// *T has no methods if T is an interface type
func issue5918() {
    var (
        err error
        _ = err.Error()
        _ func() string = err.Error
        _ func(error) string = error.Error

        perr = &err
        _ = perr /* ERROR "no field or method" */ .Error()
        _ func() string = perr /* ERROR "no field or method" */ .Error
        _ func(*error) string = ( /* ERROR "no field or method" */ *error).Error
    )

    type T *interface{ m() int }
    var (
        x T
        _ = (*x).m()
        _ = (*x).m

        _ = x /* ERROR "no field or method" */ .m()
        _ = x /* ERROR "no field or method" */ .m
        _ = T /* ERROR "no field or method" */ .m
    )
}