gobot.io/x/gobot/v2@v2.1.0/system/system_test.go (about)

     1  package system
     2  
     3  import (
     4  	"testing"
     5  
     6  	"gobot.io/x/gobot/v2/gobottest"
     7  )
     8  
     9  func TestNewAccesser(t *testing.T) {
    10  	// act
    11  	a := NewAccesser()
    12  	// assert
    13  	nativeSys := a.sys.(*nativeSyscall)
    14  	nativeFsSys := a.fs.(*nativeFilesystem)
    15  	perphioSpi := a.spiAccess.(*periphioSpiAccess)
    16  	gobottest.Refute(t, a, nil)
    17  	gobottest.Refute(t, nativeSys, nil)
    18  	gobottest.Refute(t, nativeFsSys, nil)
    19  	gobottest.Refute(t, perphioSpi, nil)
    20  }
    21  
    22  func TestNewAccesser_NewSpiDevice(t *testing.T) {
    23  	// arrange
    24  
    25  	const (
    26  		busNum   = 15
    27  		chipNum  = 14
    28  		mode     = 13
    29  		bits     = 12
    30  		maxSpeed = int64(11)
    31  	)
    32  	a := NewAccesser()
    33  	spi := a.UseMockSpi()
    34  	// act
    35  	con, err := a.NewSpiDevice(busNum, chipNum, mode, bits, maxSpeed)
    36  	// assert
    37  	gobottest.Assert(t, err, nil)
    38  	gobottest.Refute(t, con, nil)
    39  	gobottest.Assert(t, spi.busNum, busNum)
    40  	gobottest.Assert(t, spi.chipNum, chipNum)
    41  	gobottest.Assert(t, spi.mode, mode)
    42  	gobottest.Assert(t, spi.bits, bits)
    43  	gobottest.Assert(t, spi.maxSpeed, maxSpeed)
    44  }
    45  
    46  func TestNewAccesser_IsSysfsDigitalPinAccess(t *testing.T) {
    47  	var tests = map[string]struct {
    48  		gpiodAccesser bool
    49  		wantSys       bool
    50  	}{
    51  		"default_accesser_sysfs": {
    52  			wantSys: true,
    53  		},
    54  		"accesser_sysfs": {
    55  			wantSys: true,
    56  		},
    57  		"accesser_gpiod": {
    58  			gpiodAccesser: true,
    59  			wantSys:       false,
    60  		},
    61  	}
    62  	for name, tc := range tests {
    63  		t.Run(name, func(t *testing.T) {
    64  			// arrange
    65  			a := NewAccesser()
    66  			if tc.gpiodAccesser {
    67  				// there is no mock at this level, so if the system do not support
    68  				// character device gpio, we skip the test
    69  				dpa := &gpiodDigitalPinAccess{fs: &nativeFilesystem{}}
    70  				if !dpa.isSupported() {
    71  					t.Skip()
    72  				}
    73  				WithDigitalPinGpiodAccess()(a)
    74  			}
    75  			// act
    76  			got := a.IsSysfsDigitalPinAccess()
    77  			// assert
    78  			gobottest.Refute(t, a, nil)
    79  			if tc.wantSys {
    80  				gobottest.Assert(t, got, true)
    81  				dpaSys := a.digitalPinAccess.(*sysfsDigitalPinAccess)
    82  				gobottest.Refute(t, dpaSys, nil)
    83  				gobottest.Assert(t, dpaSys.fs, a.fs.(*nativeFilesystem))
    84  			} else {
    85  				gobottest.Assert(t, got, false)
    86  				dpaGpiod := a.digitalPinAccess.(*gpiodDigitalPinAccess)
    87  				gobottest.Refute(t, dpaGpiod, nil)
    88  				gobottest.Assert(t, dpaGpiod.fs, a.fs.(*nativeFilesystem))
    89  			}
    90  		})
    91  	}
    92  }