go.temporal.io/server@v1.23.0/common/testing/temporalapi/public_methods_test.go (about)

     1  // The MIT License
     2  //
     3  // Copyright (c) 2022 Temporal Technologies Inc.  All rights reserved.
     4  //
     5  // Permission is hereby granted, free of charge, to any person obtaining a copy
     6  // of this software and associated documentation files (the "Software"), to deal
     7  // in the Software without restriction, including without limitation the rights
     8  // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     9  // copies of the Software, and to permit persons to whom the Software is
    10  // furnished to do so, subject to the following conditions:
    11  //
    12  // The above copyright notice and this permission notice shall be included in
    13  // all copies or substantial portions of the Software.
    14  //
    15  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    16  // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    17  // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    18  // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    19  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    20  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    21  // THE SOFTWARE.
    22  
    23  package temporalapi_test
    24  
    25  import (
    26  	"reflect"
    27  	"testing"
    28  
    29  	"github.com/stretchr/testify/require"
    30  	"go.temporal.io/server/common/testing/temporalapi"
    31  )
    32  
    33  type publicIface interface {
    34  	A()
    35  	C()
    36  }
    37  
    38  type noPublic struct {
    39  }
    40  
    41  func (n noPublic) b() {}
    42  
    43  type somePublic struct {
    44  	noPublic
    45  }
    46  
    47  func (s somePublic) A() {}
    48  func (s somePublic) C() {}
    49  
    50  func TestWalkExportedMethods(t *testing.T) {
    51  	require := require.New(t)
    52  	var iface publicIface
    53  	for _, tc := range []struct {
    54  		Name   string
    55  		Given  any
    56  		Expect []string
    57  	}{{
    58  		Name:   "No public methods",
    59  		Given:  noPublic{},
    60  		Expect: nil,
    61  	}, {
    62  		Name:   "Some public methods",
    63  		Given:  somePublic{},
    64  		Expect: []string{"A", "C"},
    65  	}, {
    66  		Name:   "Interface with methods",
    67  		Given:  &iface,
    68  		Expect: []string{"A", "C"},
    69  	}} {
    70  		var methods []string
    71  		temporalapi.WalkExportedMethods(tc.Given, func(m reflect.Method) {
    72  			methods = append(methods, m.Name)
    73  		})
    74  
    75  		require.Equal(tc.Expect, methods, tc.Name)
    76  	}
    77  }