gobot.io/x/gobot/v2@v2.1.0/platforms/rockpi/rockpi_adaptor_test.go (about)

     1  package rockpi
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"gobot.io/x/gobot/v2/gobottest"
     8  	"gobot.io/x/gobot/v2/system"
     9  )
    10  
    11  func initTestAdaptorWithMockedFilesystem(mockPaths []string) (*Adaptor, *system.MockFilesystem) {
    12  	a := NewAdaptor()
    13  	fs := a.sys.UseMockFilesystem(mockPaths)
    14  	a.Connect()
    15  	return a, fs
    16  }
    17  
    18  func TestDefaultI2cBus(t *testing.T) {
    19  	a, _ := initTestAdaptorWithMockedFilesystem([]string{})
    20  	gobottest.Assert(t, a.DefaultI2cBus(), 7)
    21  }
    22  
    23  func Test_getPinTranslatorFunction(t *testing.T) {
    24  	var cases = map[string]struct {
    25  		pin          string
    26  		model        string
    27  		expectedLine int
    28  		expectedErr  error
    29  	}{
    30  		"Rock Pi 4 specific pin": {
    31  			pin:          "12",
    32  			model:        "Radxa ROCK 4",
    33  			expectedLine: 131,
    34  			expectedErr:  nil,
    35  		},
    36  		"Rock Pi 4C+ specific pin": {
    37  			pin:          "12",
    38  			model:        "Radxa ROCK 4C+",
    39  			expectedLine: 91,
    40  			expectedErr:  nil,
    41  		},
    42  		"Generic pin": {
    43  			pin:          "3",
    44  			model:        "whatever",
    45  			expectedLine: 71,
    46  			expectedErr:  nil,
    47  		},
    48  		"Not a valid pin": {
    49  			pin:          "666",
    50  			model:        "whatever",
    51  			expectedLine: 0,
    52  			expectedErr:  fmt.Errorf("Not a valid pin"),
    53  		},
    54  	}
    55  
    56  	for name, tc := range cases {
    57  		t.Run(name, func(t *testing.T) {
    58  			// arrange
    59  			a := NewAdaptor()
    60  			fn := a.getPinTranslatorFunction()
    61  			fs := a.sys.UseMockFilesystem([]string{procDeviceTreeModel})
    62  			fs.Files[procDeviceTreeModel].Contents = tc.model
    63  			// act
    64  			chip, line, err := fn(tc.pin)
    65  			// assert
    66  			gobottest.Assert(t, chip, "")
    67  			gobottest.Assert(t, err, tc.expectedErr)
    68  			gobottest.Assert(t, line, tc.expectedLine)
    69  		})
    70  	}
    71  }
    72  
    73  func Test_validateSpiBusNumber(t *testing.T) {
    74  	var cases = map[string]struct {
    75  		busNr       int
    76  		expectedErr error
    77  	}{
    78  		"number_1_ok": {
    79  			busNr: 2,
    80  		},
    81  		"number_2_ok": {
    82  			busNr: 2,
    83  		},
    84  		"number_0_not_ok": {
    85  			busNr:       0,
    86  			expectedErr: fmt.Errorf("SPI Bus number 0 invalid: only 1, 2 supported by current Rockchip."),
    87  		},
    88  		"number_6_not_ok": {
    89  			busNr:       6,
    90  			expectedErr: fmt.Errorf("SPI Bus number 6 invalid: only 1, 2 supported by current Rockchip."),
    91  		},
    92  	}
    93  	for name, tc := range cases {
    94  		t.Run(name, func(t *testing.T) {
    95  			// arrange
    96  			a := NewAdaptor()
    97  			// act
    98  			err := a.validateSpiBusNumber(tc.busNr)
    99  			// assert
   100  			gobottest.Assert(t, err, tc.expectedErr)
   101  		})
   102  	}
   103  }
   104  
   105  func Test_validateI2cBusNumber(t *testing.T) {
   106  	var cases = map[string]struct {
   107  		busNr   int
   108  		wantErr error
   109  	}{
   110  		"number_negative_error": {
   111  			busNr:   -1,
   112  			wantErr: fmt.Errorf("I2C Bus number -1 invalid: only 2, 6, 7 supported by current Rockchip."),
   113  		},
   114  		"number_2_ok": {
   115  			busNr: 2,
   116  		},
   117  		"number_6_ok": {
   118  			busNr: 6,
   119  		},
   120  		"number_7_ok": {
   121  			busNr: 7,
   122  		},
   123  		"number_1_not_ok": {
   124  			busNr:   1,
   125  			wantErr: fmt.Errorf("I2C Bus number 1 invalid: only 2, 6, 7 supported by current Rockchip."),
   126  		},
   127  	}
   128  	for name, tc := range cases {
   129  		t.Run(name, func(t *testing.T) {
   130  			// arrange
   131  			a := NewAdaptor()
   132  			// act
   133  			err := a.validateI2cBusNumber(tc.busNr)
   134  			// assert
   135  			gobottest.Assert(t, err, tc.wantErr)
   136  		})
   137  	}
   138  }