gobot.io/x/gobot/v2@v2.1.0/drivers/aio/grove_temperature_sensor_driver_test.go (about)

     1  package aio
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  	"testing"
     7  	"time"
     8  
     9  	"gobot.io/x/gobot/v2"
    10  	"gobot.io/x/gobot/v2/gobottest"
    11  )
    12  
    13  var _ gobot.Driver = (*GroveTemperatureSensorDriver)(nil)
    14  
    15  func TestGroveTemperatureSensorDriver(t *testing.T) {
    16  	testAdaptor := newAioTestAdaptor()
    17  	d := NewGroveTemperatureSensorDriver(testAdaptor, "123")
    18  	gobottest.Assert(t, d.Connection(), testAdaptor)
    19  	gobottest.Assert(t, d.Pin(), "123")
    20  	gobottest.Assert(t, d.interval, 10*time.Millisecond)
    21  }
    22  
    23  func TestGroveTemperatureSensorDriverScaling(t *testing.T) {
    24  	var tests = map[string]struct {
    25  		input int
    26  		want  float64
    27  	}{
    28  		"min":           {input: 0, want: -273.15},
    29  		"nearMin":       {input: 1, want: -76.96736464322436},
    30  		"T-25C":         {input: 65, want: -25.064097201780044},
    31  		"T0C":           {input: 233, want: -0.014379114122164083},
    32  		"T25C":          {input: 511, want: 24.956285721537938},
    33  		"585":           {input: 585, want: 31.61532462352477},
    34  		"nearMax":       {input: 1022, want: 347.6819764792606},
    35  		"max":           {input: 1023, want: 347.77682140097613},
    36  		"biggerThanMax": {input: 5000, want: 347.77682140097613},
    37  	}
    38  	a := newAioTestAdaptor()
    39  	d := NewGroveTemperatureSensorDriver(a, "54")
    40  	for name, tt := range tests {
    41  		t.Run(name, func(t *testing.T) {
    42  			// arrange
    43  			a.TestAdaptorAnalogRead(func() (val int, err error) {
    44  				val = tt.input
    45  				return
    46  			})
    47  			// act
    48  			got, err := d.Read()
    49  			// assert
    50  			gobottest.Assert(t, err, nil)
    51  			gobottest.Assert(t, got, tt.want)
    52  		})
    53  	}
    54  }
    55  
    56  func TestGroveTempSensorPublishesTemperatureInCelsius(t *testing.T) {
    57  	sem := make(chan bool, 1)
    58  	a := newAioTestAdaptor()
    59  	d := NewGroveTemperatureSensorDriver(a, "1")
    60  
    61  	a.TestAdaptorAnalogRead(func() (val int, err error) {
    62  		val = 585
    63  		return
    64  	})
    65  	d.Once(d.Event(Value), func(data interface{}) {
    66  		gobottest.Assert(t, fmt.Sprintf("%.2f", data.(float64)), "31.62")
    67  		sem <- true
    68  	})
    69  	gobottest.Assert(t, d.Start(), nil)
    70  
    71  	select {
    72  	case <-sem:
    73  	case <-time.After(1 * time.Second):
    74  		t.Errorf("Grove Temperature Sensor Event \"Data\" was not published")
    75  	}
    76  
    77  	gobottest.Assert(t, d.Temperature(), 31.61532462352477)
    78  }
    79  
    80  func TestGroveTempDriverDefaultName(t *testing.T) {
    81  	d := NewGroveTemperatureSensorDriver(newAioTestAdaptor(), "1")
    82  	gobottest.Assert(t, strings.HasPrefix(d.Name(), "GroveTemperatureSensor"), true)
    83  }