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 }