Merge pull request #57 from pimoroni/test-tweaks-and-linting
[EVA-2020-02-2.git] / library / tests / test_setup.py
index af3ed82d2694956ebacf5b3aa6bf82ad5152c2c5..6b6658cb5c50821eda447498b4e3faacd9961b52 100644 (file)
@@ -1,32 +1,39 @@
 import sys
 import mock
-from i2cdevice import MockSMBus
 
 
-class SMBusFakeDevice(MockSMBus):
-    def __init__(self, i2c_bus):
-        MockSMBus.__init__(self, i2c_bus)
-        self.regs[0x00:0x01] = 0x0f, 0x00
+def force_reimport(module):
+    """Force the module under test to be re-imported.
 
+    Because pytest runs all tests within the same scope (this makes me cry)
+    we have to do some manual housekeeping to avoid tests polluting each other.
 
-def test_gas_setup():
-    sys.modules['RPi'] = mock.Mock()
-    sys.modules['RPi.GPIO'] = mock.Mock()
-    smbus = mock.Mock()
-    smbus.SMBus = SMBusFakeDevice
-    sys.modules['smbus'] = smbus
-    from envirophatplus import gas
+    Since conftest.py already does some sys.modules mangling I see no reason not to
+    do the same thing here.
+    """
+    if "." in module:
+        steps = module.split(".")
+    else:
+        steps = [module]
+    
+    for i in range(len(steps)):
+        module = ".".join(steps[0:i + 1])
+        try:
+            del sys.modules[module]
+        except KeyError:
+            pass
+
+
+def test_gas_setup(GPIO, smbus):
+    from enviroplus import gas
+    gas._is_setup = False
     gas.setup()
     gas.setup()
 
 
-def test_gas_read_all():
-    sys.modules['RPi'] = mock.Mock()
-    sys.modules['RPi.GPIO'] = mock.Mock()
-    smbus = mock.Mock()
-    smbus.SMBus = SMBusFakeDevice
-    sys.modules['smbus'] = smbus
-    from envirophatplus import gas
+def test_gas_read_all(GPIO, smbus):
+    from enviroplus import gas
+    gas._is_setup = False
     result = gas.read_all()
 
     assert type(result.oxidising) == float
@@ -41,14 +48,46 @@ def test_gas_read_all():
     assert "Oxidising" in str(result)
 
 
-def test_gas_read_each():
-    sys.modules['RPi'] = mock.Mock()
-    sys.modules['RPi.GPIO'] = mock.Mock()
-    smbus = mock.Mock()
-    smbus.SMBus = SMBusFakeDevice
-    sys.modules['smbus'] = smbus
-    from envirophatplus import gas
+def test_gas_read_each(GPIO, smbus):
+    from enviroplus import gas
+    gas._is_setup = False
 
     assert int(gas.read_oxidising()) == 16641
     assert int(gas.read_reducing()) == 16727
     assert int(gas.read_nh3()) == 16813
+
+
+def test_gas_read_adc(GPIO, smbus):
+    from enviroplus import gas
+    gas._is_setup = False
+
+    gas.enable_adc(True)
+    gas.set_adc_gain(2.048)
+    assert gas.read_adc() == 0.255
+
+
+def test_gas_read_adc_default_gain(GPIO, smbus):
+    from enviroplus import gas
+    gas._is_setup = False
+
+    gas.enable_adc(True)
+    gas.set_adc_gain(gas.MICS6814_GAIN)
+    assert gas.read_adc() == 0.765
+
+
+def test_gas_read_adc_str(GPIO, smbus):
+    from enviroplus import gas
+    gas._is_setup = False
+
+    gas.enable_adc(True)
+    gas.set_adc_gain(2.048)
+    assert 'ADC' in str(gas.read_all())
+
+
+def test_gas_cleanup(GPIO, smbus):
+    force_reimport('enviroplus.gas')
+    from enviroplus import gas
+
+    gas.cleanup()
+
+    GPIO.output.assert_called_with(gas.MICS6814_HEATER_PIN, 0)