gobot.io/x/gobot/v2@v2.1.0/platforms/raspi/pwm_pin_test.go (about)

     1  package raspi
     2  
     3  import (
     4  	"errors"
     5  	"testing"
     6  
     7  	"gobot.io/x/gobot/v2"
     8  	"gobot.io/x/gobot/v2/gobottest"
     9  	"gobot.io/x/gobot/v2/system"
    10  )
    11  
    12  var _ gobot.PWMPinner = (*PWMPin)(nil)
    13  
    14  func TestPwmPin(t *testing.T) {
    15  	const path = "/dev/pi-blaster"
    16  	a := system.NewAccesser()
    17  	a.UseMockFilesystem([]string{path})
    18  
    19  	pin := NewPWMPin(a, path, "1")
    20  
    21  	gobottest.Assert(t, pin.Export(), nil)
    22  	gobottest.Assert(t, pin.SetEnabled(true), nil)
    23  
    24  	val, _ := pin.Polarity()
    25  	gobottest.Assert(t, val, true)
    26  
    27  	gobottest.Assert(t, pin.SetPolarity(false), nil)
    28  
    29  	val, _ = pin.Polarity()
    30  	gobottest.Assert(t, val, true)
    31  
    32  	_, err := pin.Period()
    33  	gobottest.Assert(t, err, errors.New("Raspi PWM pin period not set"))
    34  	gobottest.Assert(t, pin.SetDutyCycle(10000), errors.New("Raspi PWM pin period not set"))
    35  
    36  	gobottest.Assert(t, pin.SetPeriod(20000000), nil)
    37  	period, _ := pin.Period()
    38  	gobottest.Assert(t, period, uint32(20000000))
    39  	gobottest.Assert(t, pin.SetPeriod(10000000), errors.New("Cannot set the period of individual PWM pins on Raspi"))
    40  
    41  	dc, _ := pin.DutyCycle()
    42  	gobottest.Assert(t, dc, uint32(0))
    43  
    44  	gobottest.Assert(t, pin.SetDutyCycle(10000), nil)
    45  
    46  	dc, _ = pin.DutyCycle()
    47  	gobottest.Assert(t, dc, uint32(10000))
    48  
    49  	gobottest.Assert(t, pin.SetDutyCycle(999999999), errors.New("Duty cycle exceeds period"))
    50  	dc, _ = pin.DutyCycle()
    51  	gobottest.Assert(t, dc, uint32(10000))
    52  
    53  	gobottest.Assert(t, pin.Unexport(), nil)
    54  }