From c2a9392ea529612833416ed9f9fb5767e0674501 Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Fri, 8 Apr 2016 11:10:59 +0100 Subject: [PATCH] Make tests work reliably on the Pi While the tests work well on a PC or Travis, the Pi (where I ought to be running them!) has some issues with the timing tests. Need to relax the tolerance of the "assert_states_and_times" method to 0.05 seconds otherwise it periodically fails even on something reasonably quick like a Pi 2 (less failures on a Pi 3 but still occasionally). Also reduced default fps to 25; if the default timing occasionally fails on a Pi 2 it's evidently too fast for a Pi 1 and shouldn't be the default; 25 also doesn't look any different to me on a pulsing LED. There's also a bunch of miscellaneous fixes in here; last minute typos and chart re-gens for the 1.2 release. --- docs/api_boards.rst | 2 +- docs/api_generic.rst | 4 +- docs/{api_source_tools.rst => api_tools.rst} | 17 +- docs/changelog.rst | 3 + docs/images/composed_devices.pdf | Bin 11727 -> 11968 bytes docs/images/composed_devices.png | Bin 17541 -> 20903 bytes docs/images/composed_devices.svg | 105 +-- docs/images/composite_device_hierarchy.dot | 1 - docs/images/composite_device_hierarchy.pdf | Bin 14025 -> 13905 bytes docs/images/composite_device_hierarchy.png | Bin 46989 -> 44646 bytes docs/images/composite_device_hierarchy.svg | 48 +- docs/images/gpio_device_hierarchy.dot | 1 + docs/images/gpio_device_hierarchy.pdf | Bin 9634 -> 9977 bytes docs/images/gpio_device_hierarchy.png | Bin 43392 -> 46036 bytes docs/images/gpio_device_hierarchy.svg | 18 +- docs/index.rst | 2 +- gpiozero/__init__.py | 16 - gpiozero/boards.py | 2 +- gpiozero/devices.py | 8 +- gpiozero/mixins.py | 6 +- gpiozero/output_devices.py | 15 +- gpiozero/pins/mock.py | 2 +- gpiozero/{source_tools.py => tools.py} | 0 tests/test_boards.py | 552 ++++++++-------- tests/test_devices.py | 78 +-- tests/test_inputs.py | 194 +++--- tests/test_outputs.py | 612 +++++++++--------- tests/{test_source_tools.py => test_tools.py} | 2 +- 28 files changed, 846 insertions(+), 842 deletions(-) rename docs/{api_source_tools.rst => api_tools.rst} (54%) rename gpiozero/{source_tools.py => tools.py} (100%) rename tests/{test_source_tools.py => test_tools.py} (98%) diff --git a/docs/api_boards.rst b/docs/api_boards.rst index f1fdb32..f50b21a 100644 --- a/docs/api_boards.rst +++ b/docs/api_boards.rst @@ -18,7 +18,7 @@ individually. LED Board ========= -.. autoclass:: LEDBoard(\*pins, pwm=False, active_high=True, initial_value=False) +.. autoclass:: LEDBoard(\*pins, pwm=False, active_high=True, initial_value=False, \*\*named_pins) :inherited-members: :members: diff --git a/docs/api_generic.rst b/docs/api_generic.rst index 1f6ac25..621154f 100644 --- a/docs/api_generic.rst +++ b/docs/api_generic.rst @@ -81,10 +81,10 @@ Base Classes .. autoclass:: SPIDevice :members: -.. autoclass:: InternalDevice +.. autoclass:: InternalDevice() :members: -.. autoclass:: CompositeDevice +.. autoclass:: CompositeDevice(\*args, _order=None, \*\*kwargs) :members: Input Devices diff --git a/docs/api_source_tools.rst b/docs/api_tools.rst similarity index 54% rename from docs/api_source_tools.rst rename to docs/api_tools.rst index f0cb189..adb1737 100644 --- a/docs/api_source_tools.rst +++ b/docs/api_tools.rst @@ -2,13 +2,20 @@ Source Tools ============ -.. currentmodule:: gpiozero +.. currentmodule:: gpiozero.tools GPIO Zero includes several utility routines which are intended to be used with -the :attr:`~SourceMixin.source` and :attr:`~ValuesMixin.values` attributes -common to most devices in the library. Given that ``source`` and ``values`` -deal with infinite iterators, another excellent source of utilities is the -:mod:`itertools` module in the standard library. +the :attr:`~gpiozero.SourceMixin.source` and +:attr:`~gpiozero.ValuesMixin.values` attributes common to most devices in the +library. These utility routines are in the ``tools`` module of GPIO Zero and +are typically imported as follows:: + + from gpiozero.tools import scaled, negated, conjunction + +Given that :attr:`~gpiozero.SourceMixin.source` and +:attr:`~gpiozero.ValuesMixin.values` deal with infinite iterators, another +excellent source of utilities is the :mod:`itertools` module in the standard +library. Single source conversions ========================= diff --git a/docs/changelog.rst b/docs/changelog.rst index 99b3c12..d926ba9 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -12,6 +12,8 @@ Release 1.2.0 (2016-04-??) * Added :class:`LineSensor` class for single line-sensors (`#109`_) * Added :class:`DistanceSensor` class for HC-SR04 ultra-sonic sensors (`#114`_) * Added :class:`SnowPi` class for the Ryanteck Snow-pi board (`#130`_) +* Added :attr:`~Button.when_held` (and related properties) to :class:`Button` + (`#115`_) * Fixed issues with installing GPIO Zero for python 3 on Raspbian Wheezy releases (`#140`_) * Added support for lots of ADC chips (MCP3xxx family) (`#162`_) - many thanks @@ -35,6 +37,7 @@ reports in this version - keep 'em coming! .. _#69: https://github.com/RPi-Distro/python-gpiozero/issues/69 .. _#109: https://github.com/RPi-Distro/python-gpiozero/issues/109 .. _#114: https://github.com/RPi-Distro/python-gpiozero/issues/114 +.. _#115: https://github.com/RPi-Distro/python-gpiozero/issues/115 .. _#130: https://github.com/RPi-Distro/python-gpiozero/issues/130 .. _#140: https://github.com/RPi-Distro/python-gpiozero/issues/140 .. _#162: https://github.com/RPi-Distro/python-gpiozero/issues/162 diff --git a/docs/images/composed_devices.pdf b/docs/images/composed_devices.pdf index 40d4ed77c7f39115f8cd9ca34f3e2291ace72c11..10d769971f7039e19e827c5860214e2122ab1a9e 100644 GIT binary patch delta 9373 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 IT)mm_A8dTne*gdg literal 17541 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 D;JmQ4 diff --git a/docs/images/composed_devices.svg b/docs/images/composed_devices.svg index c4fa63a..fed5a09 100644 --- a/docs/images/composed_devices.svg +++ b/docs/images/composed_devices.svg @@ -4,11 +4,11 @@ - + classes - + RGBLED @@ -16,83 +16,98 @@ PWMLED - -PWMLED + +PWMLED RGBLED->PWMLED - - + + LEDBoard - -LEDBoard + +LEDBoard LEDBoard->PWMLED - - + + LED - -LED + +LED LEDBoard->LED - - + + + + +LEDBarGraph + +LEDBarGraph + + +LEDBarGraph->PWMLED + + + + +LEDBarGraph->LED + + -TrafficLightsBuzzer - -TrafficLightsBuzzer +TrafficLightsBuzzer + +TrafficLightsBuzzer -TrafficLights - -TrafficLights +TrafficLights + +TrafficLights -TrafficLightsBuzzer->TrafficLights - - +TrafficLightsBuzzer->TrafficLights + + -Buzzer - -Buzzer +Buzzer + +Buzzer -TrafficLightsBuzzer->Buzzer - - +TrafficLightsBuzzer->Buzzer + + -Button - -Button +Button + +Button -TrafficLightsBuzzer->Button - - +TrafficLightsBuzzer->Button + + -Robot - -Robot +Robot + +Robot -Motor - -Motor +Motor + +Motor -Robot->Motor - - +Robot->Motor + + diff --git a/docs/images/composite_device_hierarchy.dot b/docs/images/composite_device_hierarchy.dot index ec8c0b3..ce932bc 100644 --- a/docs/images/composite_device_hierarchy.dot +++ b/docs/images/composite_device_hierarchy.dot @@ -32,6 +32,5 @@ digraph classes { RyanteckRobot->Robot; CamJamKitRobot->Robot; - RGBLED->CompositeDevice; Motor->CompositeDevice; } diff --git a/docs/images/composite_device_hierarchy.pdf b/docs/images/composite_device_hierarchy.pdf index 32f2d27c724d4cfe3760efec4c14f10a545f2749..5c01beddfffdb29130e7c9affd3f4282e0435f03 100644 GIT binary patch delta 1883 zcmZXQdpr|*AICfHhR{JVWHOefZFaFOxrFF(T%zO9T0FTP;s{ebm}6*3BG)mKOXe~< zuFWMWrn9t89z4#bjX5F5POHaOanL!Pzk03jKi}``{rkQ@uixv-ji0($e2)C=jTR(5 z@m90f*S#c?R+7J&O=_%1E2}pqD|12I+0++wL{(@BFEhkhy%%Q;H#*xy$QHIJY2Aq{ zV`JmS(I-52sxRMT>mK zhcV{>sc)>Q1B-)GkwX4jHMw#_6RrC}uQL8pk(RM$1ce5(@e_rzwF;{@|K!T}ywJ;Y z4n3QXxf`1;V@ZJE^YjGo)glg`;MbX$PsAm$nC;7}vtz=QmA9L1$1z_YBpsPNS{1qR zlET|V{vm5#%BM-?iFl?2%1#@69Jp2}s+s4Cw46BSe0hh=<@0XReGp%*CD!0N! z67KePbag>cR9dCYg;MD(Y3a$Fn;T0FdsqBgixNye^ zAf$S|5stHY`Y!*FsjUI=Uc@?m5!lZ+w8$L`nE;qB8hY5yj0mx;T(qNa?GCQZfKpx+ z2xpAx|L`CAHkm&?yR*ZSuO!IVp3e>Y8NpfzeFyIA<=C3sjMOYycI(O;|6tIevG-1W zF@n)3Us8u}SyiM2bma_Rv*gb*YaMkHe z_NFG|#`YRvkksv@$|-aG@mW>Y33KRX6+ub79NWbppROKRPqReK=SJk+7Zii_Yr4RO z{qCBVX>aithrnj}i`zkriv!#r0emSB=|yd9x( z_~fELmG;clDz^rPi?cn@%np7K3`2D~FT8U}->=6uD-xld+&Bbg!dF=!F$L*q8)}C^IqAQUg0h*g_RPNdOR~M9P}sQG>}>JzA%vCKT*hwF@pp$J;{pzQ0t7W{ zFr?q~(04x%^NP%?o^(@uo5Z)fXX7|xQZRiSnEEt!=Tjk$rtKUCs- zn@8_F^tp2N*sYlcH={l9rE?{=YzEIum&|%u;4CGdr(9bGKCex6!@9=y3%BYARS$d3 zZGp~NF6u!#ZX7ys^{0x_lt=or_f-P|o9! zMmd3JyTp2K>IA^e7Ea(*u8pC;9S23}V+Vk@E)3Isk9Ob|G|XsNLjZS`iqp7ux1%3Ym0%y6?ps z@jK()Er0)TZ|&NK!ZQC-Q9tB2f>l9x`;#^a`eR+^6IK8*``y_r#2~j^-v+4yOA39M2f9u#+={5XmcPAM9A2OPkB8ys%m7x80Ov`M-p z>Ltix z{dgEOMY!0$_~PD#(&OY)u?JZLy-O1Q4W)vKKY^5=`d9n1O;77QT3eru>U+JDUk;*~ zU3P<)L}Hby1g6H)7Uyh>?s~yYooY_?LwrSjl)Fk?TC1~6Aq0z=s2a9>6^AaM$Na0CvGRAg8z_DhC?V?OPXKmQXB>3~p_aY!6W zfg#`sq+%e#9)bKP@Uy(X83wNC+M_U^yY8Q^fv`tmzmy%&4vI3;9`PkZqDn7ed;v%t M761l&_?-m&1qkIg{Qv*} delta 2034 zcmZvYc{mjM8pj(;nz79=b&X>gi7Xkjm`y_s#!`-Ds0=cP8+wLD*2prIXsmY_5}~n0 zrw-yu$W|CTWyx}zW+X(VY~dU^InTY%bJG3&^LwAq^M1bX`};lj@4CQoX9cZGLQQmR zoQi=H^-Yq*vQ)*RHHFTnU5%QX7JJK0AB-?!nGmH!3%Rc7_5PP%i5i;Qqw2lfIE=cQ zc0YmZj?CrKUf=qn=&Lv~ofwFlZOi_2CtX^q#u#&XLri)*MUpa;S?oEkDoyWGuhX%cM>@5m=W`7#$i}TAmj%gO}H%7>2jC4Bf_sg*4pjsDGE7 z3l4~xT&%mJo}^+oGn_{`-}LH@8%e1VU(0>7vFv!BWThB|g0l85_E;%xnyDQ?TxxwX z&fVDPnOV*nr`%$?S_V{jm|lZE9&--$)0am4Y&~KeVAhGNW0-mO5P$KiaR)KAXz8EX z`nm%5J3cltFDg%{4U`$RCPY6qY&}iVWK$o-!SuC$0+6%A-gh{bxLnnTsf6s&6U7j_ z@=e}08;j{)h z>=+*%OE3ojWJ<(oAH^m#uSrtd^rl=Mm6K|m(oQ|`9g{|?x&@t;_Z!h>J=N3I;E;j;E>jErXLn)^H6C0IKF!ya^i zizTk=x0#uPb)^>kbQOS`x`ifm&6LfFi9NnJU2M6wLpoNV`JsU587@35O|fICq%9J zZ1(gHt$f@sHeLTr9yTay87q66WgVSE+RJeYBtz7ppVm9UEh>Oa;o_|jWsg?sVAj3~ zVn_O8;NnHAT(=Om*dEIQ9V+1EL)g9JT4%Ocm0zC_oP+_#FL}g+$;?Nu<{i$F#a`4H zUq5tEPUNTG=A|{Rh_-JAQv@cy?mr=+t>9IgV( za&|bcT~5=Hq;x94H0PLJg|)`IY?BP#CPCFb#SVJajl34*k32{});;r*4|C7YeFbX@qtacw_v>D@%QVt#$8RsKE+l+{wU~AD z;)`Px)#oU%jMV;nN0Uw%H1d$OMP{t!@UJ?#pXfF{LSmbOEW5&0ZLRpNx(^H;^*B1d z83COh%b6lmEv*N6wLf>S@4s63v8oEXrm#KW`xai}FxZ)6Ht6m6r1aU8HU}qN&w=L4 zKGUp5fyD#v-!^i2b)8K`48fAO$?3-!pox%z!=-s0fDr%J5(*ilvUV{kBrCxcqES{b zD~ivYme-3OjI|;kPqgn=eXvj+W*{{TISAO-%&QSl7spbbdfZ=2dIoULVU|;Z9PAsy ziT}(mkD-Ucs=(xN?GK)lR+^=!ow*vkKr*)f7ae;g!o2Ow-5|L%gKl=yS8#QSf4aaB zyD-JPC_kb8NENU5u-7Aim2#Hb-Vj!#)SYK@i7>Za042s|P)r`K1RaRj9GDuKnQ@(7 z=fm!n*{(sT&3P%D_gh8m(gO|qx|-A|oo_aZK+N0|`$ouS$%sD3)VdYO<$9MU_al=1 z_LpwQkRSlHDdV}4x~c=IlO8$G%@4oBOnBrt7MR}@Z#3dR>a{3h$w+7BzElW(ZHsA} zMf=Sjd0rdQ7wnG*>9~f5PI~fQly1U5&lOMF8Pa>7ONR+Ai{`XC%>QNJ=w|qN>7 zSClWo)YVifNeb8Nm~OY1H(8Mcww}yOI}|Rm8I&I}ztNr$S7hvafj$@VzGE=y!^tWU z?;n~R>|(IpP-No->%l1hQ)N@=s?gg-raZzbE*$Y9>AEezv(pcg>CvZG0PZ2a8_`j% z-Qy$sN05zNTxykH#tls5JZl)_%{&(z66Ec9VW$f4Vt|a` zNcheThr>}g6z+c*{a;KXf#BRTdn?3oNK7?QD#$<#jpvGtpxiVgZ5AF$fFpMfoCyd0 zRUnCY0(KWeVNj@Vao_i$2w387hDPEsyBQIQ{67qh+v#I{H`s`X`a#B`zCG`|!6+me zyE_ntMq~d9{9E2PMnLX%(OAOYU5lM$6dH&8Q6}K=yJZXp^CL6DaW}AbAS{Xi($b>X HTY~-s^u}-) diff --git a/docs/images/composite_device_hierarchy.png b/docs/images/composite_device_hierarchy.png index da5096fa5235623eaae0e7ff2d041e00165c75e9..9a7bebbda04476c91f74e4abdc932d3f6eea40ab 100644 GIT binary patch literal 44646 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 T&!}5J3JxU&b@_L5vpQ-OX9I-{14h zIdlGaXWp4N_6(!!eeZRz`&w78&mu%YP8{_){&NHb1XM{05hVnKhezN?`6(iJ$8zon z3H=5;Rvpuf_@$dQ6{^AH(xo4syiv$nL4=|IG7-~y1LR^ z*jhOn8GJOMw{tK{-s8nbKzM^7DI%!ima?

V`Er*L}FZXF4v-{o?7fXM~@BM^Qgl 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 E50gLLs{jB1 diff --git a/docs/images/composite_device_hierarchy.svg b/docs/images/composite_device_hierarchy.svg index 01adcce..ca6cde2 100644 --- a/docs/images/composite_device_hierarchy.svg +++ b/docs/images/composite_device_hierarchy.svg @@ -4,25 +4,25 @@ - + classes - + Device - -Device + +Device CompositeDevice - -CompositeDevice + +CompositeDevice CompositeDevice->Device - - + + CompositeOutputDevice @@ -31,8 +31,8 @@ CompositeOutputDevice->CompositeDevice - - + + LEDCollection @@ -141,8 +141,8 @@ Robot->CompositeDevice - - + + RyanteckRobot @@ -164,25 +164,15 @@ - -RGBLED - -RGBLED - - -RGBLED->CompositeDevice - - - -Motor - -Motor +Motor + +Motor -Motor->CompositeDevice - - +Motor->CompositeDevice + + diff --git a/docs/images/gpio_device_hierarchy.dot b/docs/images/gpio_device_hierarchy.dot index 7ff0bed..3054865 100644 --- a/docs/images/gpio_device_hierarchy.dot +++ b/docs/images/gpio_device_hierarchy.dot @@ -30,5 +30,6 @@ digraph classes { Buzzer->DigitalOutputDevice; PWMOutputDevice->OutputDevice; PWMLED->PWMOutputDevice; + RGBLED->Device; } diff --git a/docs/images/gpio_device_hierarchy.pdf b/docs/images/gpio_device_hierarchy.pdf index 9dc2a3e821d25c66407ee63f72e538fdf0905ee7..495dfa192b9b1d089d54c3843a2338237e0bb95d 100644 GIT binary patch delta 8113 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 VSQMttqK*j?5Wr+%QP5Jv{680aM0@}M delta 7788 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

U*!C|;8GQ4VE*^t nDYG}COyDcd|1Nul*)_>{IeO-8v-z(Z;73kc=}nQ8iT{5Aij7jU literal 43392 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 Wg0qEHxipHp!mk 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 IE0_oW4_;VbWB>pF diff --git a/docs/images/gpio_device_hierarchy.svg b/docs/images/gpio_device_hierarchy.svg index 1b35ddb..3a7d460 100644 --- a/docs/images/gpio_device_hierarchy.svg +++ b/docs/images/gpio_device_hierarchy.svg @@ -11,8 +11,8 @@ Device - -Device + +Device GPIODevice @@ -21,8 +21,8 @@ GPIODevice->Device - - + + SmoothedInputDevice @@ -164,5 +164,15 @@ + +RGBLED + +RGBLED + + +RGBLED->Device + + + diff --git a/docs/index.rst b/docs/index.rst index 14357b4..cb32ed0 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -14,7 +14,7 @@ Table of Contents api_boards api_other api_generic - api_source_tools + api_tools api_pins api_exc changelog diff --git a/gpiozero/__init__.py b/gpiozero/__init__.py index 9c7f0c7..0ef0810 100644 --- a/gpiozero/__init__.py +++ b/gpiozero/__init__.py @@ -121,19 +121,3 @@ from .other_devices import ( PingServer, TimeOfDay, ) -from .source_tools import ( - averaged, - clamped, - conjunction, - cos_values, - disjunction, - inverted, - negated, - post_delayed, - pre_delayed, - quantized, - queued, - random_values, - scaled, - sin_values, -) diff --git a/gpiozero/boards.py b/gpiozero/boards.py index f79f56e..689492a 100644 --- a/gpiozero/boards.py +++ b/gpiozero/boards.py @@ -258,7 +258,7 @@ class LEDBoard(LEDCollection): on_time, off_time, fade_in_time, fade_out_time, n, background ) - def _blink_device(self, on_time, off_time, fade_in_time, fade_out_time, n, fps=50): + def _blink_device(self, on_time, off_time, fade_in_time, fade_out_time, n, fps=25): sequence = [] if fade_in_time > 0: sequence += [ diff --git a/gpiozero/devices.py b/gpiozero/devices.py index 4bf127b..c89ae17 100644 --- a/gpiozero/devices.py +++ b/gpiozero/devices.py @@ -107,7 +107,13 @@ class GPIOMeta(type): try: old_close() finally: - del cls._INSTANCES[key] + try: + del cls._INSTANCES[key] + except KeyError: + # If the _refs go negative (too many closes) + # just ignore the resulting KeyError here - + # it's already gone + pass self.close = close cls._INSTANCES[key] = weakref.proxy(self) else: diff --git a/gpiozero/mixins.py b/gpiozero/mixins.py index 31ce8b3..d1d4d90 100644 --- a/gpiozero/mixins.py +++ b/gpiozero/mixins.py @@ -374,7 +374,7 @@ class HoldMixin(EventsMixin): @hold_time.setter def hold_time(self, value): if value < 0: - raise BadWaitTime('source_delay must be 0 or greater') + raise BadWaitTime('hold_time must be 0 or greater') self._hold_time = float(value) @property @@ -403,8 +403,8 @@ class HoldMixin(EventsMixin): The length of time (in seconds) that the device has been held for. This is counted from the first execution of the :attr:`when_held` event rather than when the device activated, in contrast to - :attr:`active_time`. If the device is not currently held, this is - ``None``. + :attr:`~EventsMixin.active_time`. If the device is not currently held, + this is ``None``. """ if self._held_from is not None: return time() - self._held_from diff --git a/gpiozero/output_devices.py b/gpiozero/output_devices.py index 8964bdf..037f749 100644 --- a/gpiozero/output_devices.py +++ b/gpiozero/output_devices.py @@ -19,8 +19,8 @@ class OutputDevice(SourceMixin, GPIODevice): Represents a generic GPIO output device. This class extends :class:`GPIODevice` to add facilities common to GPIO - output devices: an :meth:`on` method to switch the device on, and a - corresponding :meth:`off` method. + output devices: an :meth:`on` method to switch the device on, a + corresponding :meth:`off` method, and a :meth:`toggle` method. :param int pin: The GPIO pin (in BCM numbering) that the device is connected to. If @@ -123,10 +123,9 @@ class DigitalOutputDevice(OutputDevice): """ Represents a generic output device with typical on/off behaviour. - This class extends :class:`OutputDevice` with a :meth:`toggle` method to - switch the device between its on and off states, and a :meth:`blink` method - which uses an optional background thread to handle toggling the device - state without further interaction. + This class extends :class:`OutputDevice` with a :meth:`blink` method which + uses an optional background thread to handle toggling the device state + without further interaction. """ def __init__(self, pin=None, active_high=True, initial_value=False): self._blink_thread = None @@ -458,7 +457,7 @@ class PWMOutputDevice(OutputDevice): self._blink_thread = None def _blink_device( - self, on_time, off_time, fade_in_time, fade_out_time, n, fps=50): + self, on_time, off_time, fade_in_time, fade_out_time, n, fps=25): sequence = [] if fade_in_time > 0: sequence += [ @@ -686,7 +685,7 @@ class RGBLED(SourceMixin, Device): def _blink_device( self, on_time, off_time, fade_in_time, fade_out_time, on_color, - off_color, n, fps=50): + off_color, n, fps=25): # Define some simple lambdas to perform linear interpolation between # off_color and on_color lerp = lambda t, fade_in: tuple( diff --git a/gpiozero/pins/mock.py b/gpiozero/pins/mock.py index e98180a..101ae7d 100644 --- a/gpiozero/pins/mock.py +++ b/gpiozero/pins/mock.py @@ -159,7 +159,7 @@ class MockPin(Pin): # that's about all we can reasonably expect in a non-realtime # environment on a Pi 1) for actual, expected in zip(self.states, expected_states): - assert isclose(actual.timestamp, expected[0], rel_tol=0.01, abs_tol=0.01) + assert isclose(actual.timestamp, expected[0], rel_tol=0.05, abs_tol=0.05) assert isclose(actual.state, expected[1]) diff --git a/gpiozero/source_tools.py b/gpiozero/tools.py similarity index 100% rename from gpiozero/source_tools.py rename to gpiozero/tools.py diff --git a/tests/test_boards.py b/tests/test_boards.py index c32052f..304e128 100644 --- a/tests/test_boards.py +++ b/tests/test_boards.py @@ -31,84 +31,84 @@ def test_composite_output_on_off(): pin1 = MockPin(2) pin2 = MockPin(3) pin3 = MockPin(4) - device = CompositeOutputDevice(OutputDevice(pin1), OutputDevice(pin2), foo=OutputDevice(pin3)) - device.on() - assert all((pin1.state, pin2.state, pin3.state)) - device.off() - assert not any((pin1.state, pin2.state, pin3.state)) + with CompositeOutputDevice(OutputDevice(pin1), OutputDevice(pin2), foo=OutputDevice(pin3)) as device: + device.on() + assert all((pin1.state, pin2.state, pin3.state)) + device.off() + assert not any((pin1.state, pin2.state, pin3.state)) def test_composite_output_toggle(): pin1 = MockPin(2) pin2 = MockPin(3) pin3 = MockPin(4) - device = CompositeOutputDevice(OutputDevice(pin1), OutputDevice(pin2), foo=OutputDevice(pin3)) - device.toggle() - assert all((pin1.state, pin2.state, pin3.state)) - device[0].off() - device.toggle() - assert pin1.state - assert not pin2.state - assert not pin3.state + with CompositeOutputDevice(OutputDevice(pin1), OutputDevice(pin2), foo=OutputDevice(pin3)) as device: + device.toggle() + assert all((pin1.state, pin2.state, pin3.state)) + device[0].off() + device.toggle() + assert pin1.state + assert not pin2.state + assert not pin3.state def test_composite_output_value(): pin1 = MockPin(2) pin2 = MockPin(3) pin3 = MockPin(4) - device = CompositeOutputDevice(OutputDevice(pin1), OutputDevice(pin2), foo=OutputDevice(pin3)) - assert device.value == (0, 0, 0) - device.toggle() - assert device.value == (1, 1, 1) - device.value = (1, 0, 1) - assert device[0].is_active - assert not device[1].is_active - assert device[2].is_active + with CompositeOutputDevice(OutputDevice(pin1), OutputDevice(pin2), foo=OutputDevice(pin3)) as device: + assert device.value == (0, 0, 0) + device.toggle() + assert device.value == (1, 1, 1) + device.value = (1, 0, 1) + assert device[0].is_active + assert not device[1].is_active + assert device[2].is_active def test_led_board_on_off(): pin1 = MockPin(2) pin2 = MockPin(3) pin3 = MockPin(4) - board = LEDBoard(pin1, pin2, foo=pin3) - assert isinstance(board[0], LED) - assert isinstance(board[1], LED) - assert isinstance(board[2], LED) - board.on() - assert all((pin1.state, pin2.state, pin3.state)) - board.off() - assert not any((pin1.state, pin2.state, pin3.state)) - board[0].on() - assert board.value == (1, 0, 0) - assert pin1.state - assert not pin2.state - assert not pin3.state - board.toggle() - assert board.value == (0, 1, 1) - assert not pin1.state - assert pin2.state - assert pin3.state + with LEDBoard(pin1, pin2, foo=pin3) as board: + assert isinstance(board[0], LED) + assert isinstance(board[1], LED) + assert isinstance(board[2], LED) + board.on() + assert all((pin1.state, pin2.state, pin3.state)) + board.off() + assert not any((pin1.state, pin2.state, pin3.state)) + board[0].on() + assert board.value == (1, 0, 0) + assert pin1.state + assert not pin2.state + assert not pin3.state + board.toggle() + assert board.value == (0, 1, 1) + assert not pin1.state + assert pin2.state + assert pin3.state def test_led_board_nested(): pin1 = MockPin(2) pin2 = MockPin(3) pin3 = MockPin(4) - board = LEDBoard(pin1, LEDBoard(pin2, pin3)) - assert list(led.pin for led in board.leds) == [pin1, pin2, pin3] - assert board.value == (0, (0, 0)) - board.value = (1, (0, 1)) - assert pin1.state - assert not pin2.state - assert pin3.state + with LEDBoard(pin1, LEDBoard(pin2, pin3)) as board: + assert list(led.pin for led in board.leds) == [pin1, pin2, pin3] + assert board.value == (0, (0, 0)) + board.value = (1, (0, 1)) + assert pin1.state + assert not pin2.state + assert pin3.state def test_led_board_bad_blink(): pin1 = MockPin(2) pin2 = MockPin(3) pin3 = MockPin(4) - board = LEDBoard(pin1, LEDBoard(pin2, pin3)) - with pytest.raises(ValueError): - board.blink(fade_in_time=1, fade_out_time=1) - with pytest.raises(ValueError): - board.blink(fade_out_time=1) - with pytest.raises(ValueError): - board.pulse() + with LEDBoard(pin1, LEDBoard(pin2, pin3)) as board: + with pytest.raises(ValueError): + board.blink(fade_in_time=1, fade_out_time=1) + with pytest.raises(ValueError): + board.blink(fade_out_time=1) + with pytest.raises(ValueError): + board.pulse() @pytest.mark.skipif(hasattr(sys, 'pypy_version_info'), reason='timing is too random on pypy') @@ -116,19 +116,19 @@ def test_led_board_blink_background(): pin1 = MockPin(2) pin2 = MockPin(3) pin3 = MockPin(4) - board = LEDBoard(pin1, LEDBoard(pin2, pin3)) - board.blink(0.1, 0.1, n=2) - board._blink_thread.join() # naughty, but ensures no arbitrary waits in the test - test = [ - (0.0, False), - (0.0, True), - (0.1, False), - (0.1, True), - (0.1, False) - ] - pin1.assert_states_and_times(test) - pin2.assert_states_and_times(test) - pin3.assert_states_and_times(test) + with LEDBoard(pin1, LEDBoard(pin2, pin3)) as board: + board.blink(0.1, 0.1, n=2) + board._blink_thread.join() # naughty, but ensures no arbitrary waits in the test + test = [ + (0.0, False), + (0.0, True), + (0.1, False), + (0.1, True), + (0.1, False) + ] + pin1.assert_states_and_times(test) + pin2.assert_states_and_times(test) + pin3.assert_states_and_times(test) @pytest.mark.skipif(hasattr(sys, 'pypy_version_info'), reason='timing is too random on pypy') @@ -136,18 +136,18 @@ def test_led_board_blink_foreground(): pin1 = MockPin(2) pin2 = MockPin(3) pin3 = MockPin(4) - board = LEDBoard(pin1, LEDBoard(pin2, pin3)) - board.blink(0.1, 0.1, n=2, background=False) - test = [ - (0.0, False), - (0.0, True), - (0.1, False), - (0.1, True), - (0.1, False) - ] - pin1.assert_states_and_times(test) - pin2.assert_states_and_times(test) - pin3.assert_states_and_times(test) + with LEDBoard(pin1, LEDBoard(pin2, pin3)) as board: + board.blink(0.1, 0.1, n=2, background=False) + test = [ + (0.0, False), + (0.0, True), + (0.1, False), + (0.1, True), + (0.1, False) + ] + pin1.assert_states_and_times(test) + pin2.assert_states_and_times(test) + pin3.assert_states_and_times(test) @pytest.mark.skipif(hasattr(sys, 'pypy_version_info'), reason='timing is too random on pypy') @@ -155,24 +155,24 @@ def test_led_board_blink_control(): pin1 = MockPin(2) pin2 = MockPin(3) pin3 = MockPin(4) - board = LEDBoard(pin1, LEDBoard(pin2, pin3)) - board.blink(0.1, 0.1, n=2) - # make sure the blink thread's started - while not board._blink_leds: - sleep(0.00001) - board[1][0].off() # immediately take over the second LED - board._blink_thread.join() # naughty, but ensures no arbitrary waits in the test - test = [ - (0.0, False), - (0.0, True), - (0.1, False), - (0.1, True), - (0.1, False) - ] - pin1.assert_states_and_times(test) - pin3.assert_states_and_times(test) - print(pin2.states) - pin2.assert_states_and_times([(0.0, False), (0.0, True), (0.0, False)]) + with LEDBoard(pin1, LEDBoard(pin2, pin3)) as board: + board.blink(0.1, 0.1, n=2) + # make sure the blink thread's started + while not board._blink_leds: + sleep(0.00001) + board[1][0].off() # immediately take over the second LED + board._blink_thread.join() # naughty, but ensures no arbitrary waits in the test + test = [ + (0.0, False), + (0.0, True), + (0.1, False), + (0.1, True), + (0.1, False) + ] + pin1.assert_states_and_times(test) + pin3.assert_states_and_times(test) + print(pin2.states) + pin2.assert_states_and_times([(0.0, False), (0.0, True), (0.0, False)]) @pytest.mark.skipif(hasattr(sys, 'pypy_version_info'), reason='timing is too random on pypy') @@ -180,21 +180,21 @@ def test_led_board_blink_take_over(): pin1 = MockPin(2) pin2 = MockPin(3) pin3 = MockPin(4) - board = LEDBoard(pin1, LEDBoard(pin2, pin3)) - board[1].blink(0.1, 0.1, n=2) - board.blink(0.1, 0.1, n=2) # immediately take over blinking - board[1]._blink_thread.join() - board._blink_thread.join() - test = [ - (0.0, False), - (0.0, True), - (0.1, False), - (0.1, True), - (0.1, False) - ] - pin1.assert_states_and_times(test) - pin2.assert_states_and_times(test) - pin3.assert_states_and_times(test) + with LEDBoard(pin1, LEDBoard(pin2, pin3)) as board: + board[1].blink(0.1, 0.1, n=2) + board.blink(0.1, 0.1, n=2) # immediately take over blinking + board[1]._blink_thread.join() + board._blink_thread.join() + test = [ + (0.0, False), + (0.0, True), + (0.1, False), + (0.1, True), + (0.1, False) + ] + pin1.assert_states_and_times(test) + pin2.assert_states_and_times(test) + pin3.assert_states_and_times(test) @pytest.mark.skipif(hasattr(sys, 'pypy_version_info'), reason='timing is too random on pypy') @@ -202,47 +202,47 @@ def test_led_board_blink_control_all(): pin1 = MockPin(2) pin2 = MockPin(3) pin3 = MockPin(4) - board = LEDBoard(pin1, LEDBoard(pin2, pin3)) - board.blink(0.1, 0.1, n=2) - # make sure the blink thread's started - while not board._blink_leds: - sleep(0.00001) - board[0].off() # immediately take over all LEDs - board[1][0].off() - board[1][1].off() - board._blink_thread.join() # blink should terminate here anyway - test = [ - (0.0, False), - (0.0, True), - (0.0, False), - ] - pin1.assert_states_and_times(test) - pin2.assert_states_and_times(test) - pin3.assert_states_and_times(test) + with LEDBoard(pin1, LEDBoard(pin2, pin3)) as board: + board.blink(0.1, 0.1, n=2) + # make sure the blink thread's started + while not board._blink_leds: + sleep(0.00001) + board[0].off() # immediately take over all LEDs + board[1][0].off() + board[1][1].off() + board._blink_thread.join() # blink should terminate here anyway + test = [ + (0.0, False), + (0.0, True), + (0.0, False), + ] + pin1.assert_states_and_times(test) + pin2.assert_states_and_times(test) + pin3.assert_states_and_times(test) def test_led_board_blink_interrupt_on(): pin1 = MockPin(2) pin2 = MockPin(3) pin3 = MockPin(4) - board = LEDBoard(pin1, LEDBoard(pin2, pin3)) - board.blink(1, 0.1) - sleep(0.2) - board.off() # should interrupt while on - pin1.assert_states([False, True, False]) - pin2.assert_states([False, True, False]) - pin3.assert_states([False, True, False]) + with LEDBoard(pin1, LEDBoard(pin2, pin3)) as board: + board.blink(1, 0.1) + sleep(0.2) + board.off() # should interrupt while on + pin1.assert_states([False, True, False]) + pin2.assert_states([False, True, False]) + pin3.assert_states([False, True, False]) def test_led_board_blink_interrupt_off(): pin1 = MockPin(2) pin2 = MockPin(3) pin3 = MockPin(4) - board = LEDBoard(pin1, LEDBoard(pin2, pin3)) - board.blink(0.1, 1) - sleep(0.2) - board.off() # should interrupt while off - pin1.assert_states([False, True, False]) - pin2.assert_states([False, True, False]) - pin3.assert_states([False, True, False]) + with LEDBoard(pin1, LEDBoard(pin2, pin3)) as board: + board.blink(0.1, 1) + sleep(0.2) + board.off() # should interrupt while off + pin1.assert_states([False, True, False]) + pin2.assert_states([False, True, False]) + pin3.assert_states([False, True, False]) @pytest.mark.skipif(hasattr(sys, 'pypy_version_info'), reason='timing is too random on pypy') @@ -250,76 +250,76 @@ def test_led_board_fade_background(): pin1 = MockPWMPin(2) pin2 = MockPWMPin(3) pin3 = MockPWMPin(4) - board = LEDBoard(pin1, LEDBoard(pin2, pin3, pwm=True), pwm=True) - board.blink(0, 0, 0.1, 0.1, n=2) - board._blink_thread.join() - test = [ - (0.0, 0), - (0.02, 0.2), - (0.02, 0.4), - (0.02, 0.6), - (0.02, 0.8), - (0.02, 1), - (0.02, 0.8), - (0.02, 0.6), - (0.02, 0.4), - (0.02, 0.2), - (0.02, 0), - (0.02, 0.2), - (0.02, 0.4), - (0.02, 0.6), - (0.02, 0.8), - (0.02, 1), - (0.02, 0.8), - (0.02, 0.6), - (0.02, 0.4), - (0.02, 0.2), - (0.02, 0), - ] - pin1.assert_states_and_times(test) - pin2.assert_states_and_times(test) - pin3.assert_states_and_times(test) + with LEDBoard(pin1, LEDBoard(pin2, pin3, pwm=True), pwm=True) as board: + board.blink(0, 0, 0.2, 0.2, n=2) + board._blink_thread.join() + test = [ + (0.0, 0), + (0.04, 0.2), + (0.04, 0.4), + (0.04, 0.6), + (0.04, 0.8), + (0.04, 1), + (0.04, 0.8), + (0.04, 0.6), + (0.04, 0.4), + (0.04, 0.2), + (0.04, 0), + (0.04, 0.2), + (0.04, 0.4), + (0.04, 0.6), + (0.04, 0.8), + (0.04, 1), + (0.04, 0.8), + (0.04, 0.6), + (0.04, 0.4), + (0.04, 0.2), + (0.04, 0), + ] + pin1.assert_states_and_times(test) + pin2.assert_states_and_times(test) + pin3.assert_states_and_times(test) def test_led_bar_graph_value(): pin1 = MockPin(2) pin2 = MockPin(3) pin3 = MockPin(4) - graph = LEDBarGraph(pin1, pin2, pin3) - graph.value = 0 - assert not any((pin1.state, pin2.state, pin3.state)) - graph.value = 1 - assert all((pin1.state, pin2.state, pin3.state)) - graph.value = 1/3 - assert pin1.state and not (pin2.state or pin3.state) - graph.value = -1/3 - assert pin3.state and not (pin1.state or pin2.state) - pin1.state = True - pin2.state = True - assert graph.value == 1 - pin3.state = False - assert graph.value == 2/3 - pin3.state = True - pin1.state = False - assert graph.value == -2/3 + with LEDBarGraph(pin1, pin2, pin3) as graph: + graph.value = 0 + assert not any((pin1.state, pin2.state, pin3.state)) + graph.value = 1 + assert all((pin1.state, pin2.state, pin3.state)) + graph.value = 1/3 + assert pin1.state and not (pin2.state or pin3.state) + graph.value = -1/3 + assert pin3.state and not (pin1.state or pin2.state) + pin1.state = True + pin2.state = True + assert graph.value == 1 + pin3.state = False + assert graph.value == 2/3 + pin3.state = True + pin1.state = False + assert graph.value == -2/3 def test_led_bar_graph_pwm_value(): pin1 = MockPWMPin(2) pin2 = MockPWMPin(3) pin3 = MockPWMPin(4) - graph = LEDBarGraph(pin1, pin2, pin3, pwm=True) - graph.value = 0 - assert not any((pin1.state, pin2.state, pin3.state)) - graph.value = 1 - assert all((pin1.state, pin2.state, pin3.state)) - graph.value = 1/3 - assert pin1.state and not (pin2.state or pin3.state) - graph.value = -1/3 - assert pin3.state and not (pin1.state or pin2.state) - graph.value = 1/2 - assert (pin1.state, pin2.state, pin3.state) == (1, 0.5, 0) - pin1.state = 0 - pin3.state = 1 - assert graph.value == -1/2 + with LEDBarGraph(pin1, pin2, pin3, pwm=True) as graph: + graph.value = 0 + assert not any((pin1.state, pin2.state, pin3.state)) + graph.value = 1 + assert all((pin1.state, pin2.state, pin3.state)) + graph.value = 1/3 + assert pin1.state and not (pin2.state or pin3.state) + graph.value = -1/3 + assert pin3.state and not (pin1.state or pin2.state) + graph.value = 1/2 + assert (pin1.state, pin2.state, pin3.state) == (1, 0.5, 0) + pin1.state = 0 + pin3.state = 1 + assert graph.value == -1/2 def test_led_bar_graph_bad_init(): pin1 = MockPin(2) @@ -330,26 +330,26 @@ def test_led_bar_graph_bad_init(): def test_pi_liter(): pins = [MockPin(n) for n in (4, 17, 27, 18, 22, 23, 24, 25)] - board = PiLiter() - assert [device.pin for device in board] == pins + with PiLiter() as board: + assert [device.pin for device in board] == pins def test_pi_liter_graph(): pins = [MockPin(n) for n in (4, 17, 27, 18, 22, 23, 24, 25)] - board = PiLiterBarGraph() - board.value = 0.5 - assert [pin.state for pin in pins] == [1, 1, 1, 1, 0, 0, 0, 0] - pins[4].state = 1 - assert board.value == 5/8 + with PiLiterBarGraph() as board: + board.value = 0.5 + assert [pin.state for pin in pins] == [1, 1, 1, 1, 0, 0, 0, 0] + pins[4].state = 1 + assert board.value == 5/8 def test_traffic_lights(): red_pin = MockPin(2) amber_pin = MockPin(3) green_pin = MockPin(4) - board = TrafficLights(red_pin, amber_pin, green_pin) - board.red.on() - assert red_pin.state - assert not amber_pin.state - assert not green_pin.state + with TrafficLights(red_pin, amber_pin, green_pin) as board: + board.red.on() + assert red_pin.state + assert not amber_pin.state + assert not green_pin.state def test_traffic_lights_bad_init(): with pytest.raises(ValueError): @@ -357,13 +357,13 @@ def test_traffic_lights_bad_init(): def test_pi_traffic(): pins = [MockPin(n) for n in (9, 10, 11)] - board = PiTraffic() - assert [device.pin for device in board] == pins + with PiTraffic() as board: + assert [device.pin for device in board] == pins def test_snow_pi(): pins = [MockPin(n) for n in (23, 24, 25, 17, 18, 22, 7, 8, 9)] - board = SnowPi() - assert [device.pin for device in board.leds] == pins + with SnowPi() as board: + assert [device.pin for device in board.leds] == pins def test_traffic_lights_buzzer(): red_pin = MockPin(2) @@ -371,59 +371,59 @@ def test_traffic_lights_buzzer(): green_pin = MockPin(4) buzzer_pin = MockPin(5) button_pin = MockPin(6) - board = TrafficLightsBuzzer( + with TrafficLightsBuzzer( TrafficLights(red_pin, amber_pin, green_pin), Buzzer(buzzer_pin), - Button(button_pin)) - board.lights.red.on() - board.buzzer.on() - assert red_pin.state - assert not amber_pin.state - assert not green_pin.state - assert buzzer_pin.state - button_pin.drive_low() - assert board.button.is_active + Button(button_pin)) as board: + board.lights.red.on() + board.buzzer.on() + assert red_pin.state + assert not amber_pin.state + assert not green_pin.state + assert buzzer_pin.state + button_pin.drive_low() + assert board.button.is_active def test_fish_dish(): pins = [MockPin(n) for n in (9, 22, 4, 8, 7)] - board = FishDish() - assert [led.pin for led in board.lights] + [board.buzzer.pin, board.button.pin] == pins + with FishDish() as board: + assert [led.pin for led in board.lights] + [board.buzzer.pin, board.button.pin] == pins def test_traffic_hat(): pins = [MockPin(n) for n in (24, 23, 22, 5, 25)] - board = TrafficHat() - assert [led.pin for led in board.lights] + [board.buzzer.pin, board.button.pin] == pins + with TrafficHat() as board: + assert [led.pin for led in board.lights] + [board.buzzer.pin, board.button.pin] == pins def test_robot(): pins = [MockPWMPin(n) for n in (2, 3, 4, 5)] - robot = Robot((2, 3), (4, 5)) - assert ( - [device.pin for device in robot.left_motor] + - [device.pin for device in robot.right_motor]) == pins - robot.forward() - assert [pin.state for pin in pins] == [1, 0, 1, 0] - robot.backward() - assert [pin.state for pin in pins] == [0, 1, 0, 1] - robot.forward(0.5) - assert [pin.state for pin in pins] == [0.5, 0, 0.5, 0] - robot.left() - assert [pin.state for pin in pins] == [0, 1, 1, 0] - robot.right() - assert [pin.state for pin in pins] == [1, 0, 0, 1] - robot.reverse() - assert [pin.state for pin in pins] == [0, 1, 1, 0] - robot.stop() - assert [pin.state for pin in pins] == [0, 0, 0, 0] + with Robot((2, 3), (4, 5)) as robot: + assert ( + [device.pin for device in robot.left_motor] + + [device.pin for device in robot.right_motor]) == pins + robot.forward() + assert [pin.state for pin in pins] == [1, 0, 1, 0] + robot.backward() + assert [pin.state for pin in pins] == [0, 1, 0, 1] + robot.forward(0.5) + assert [pin.state for pin in pins] == [0.5, 0, 0.5, 0] + robot.left() + assert [pin.state for pin in pins] == [0, 1, 1, 0] + robot.right() + assert [pin.state for pin in pins] == [1, 0, 0, 1] + robot.reverse() + assert [pin.state for pin in pins] == [0, 1, 1, 0] + robot.stop() + assert [pin.state for pin in pins] == [0, 0, 0, 0] def test_ryanteck_robot(): pins = [MockPWMPin(n) for n in (17, 18, 22, 23)] - board = RyanteckRobot() - assert [device.pin for motor in board for device in motor] == pins + with RyanteckRobot() as board: + assert [device.pin for motor in board for device in motor] == pins def test_camjam_kit_robot(): pins = [MockPWMPin(n) for n in (9, 10, 7, 8)] - board = CamJamKitRobot() - assert [device.pin for motor in board for device in motor] == pins + with CamJamKitRobot() as board: + assert [device.pin for motor in board for device in motor] == pins def test_energenie_bad_init(): with pytest.raises(ValueError): @@ -433,26 +433,26 @@ def test_energenie_bad_init(): def test_energenie(): pins = [MockPin(n) for n in (17, 22, 23, 27, 24, 25)] - device1 = Energenie(1, initial_value=True) - device2 = Energenie(2, initial_value=False) - assert device1.value - assert not device2.value - [pin.clear_states() for pin in pins] - device1.on() - assert device1.value - pins[0].assert_states_and_times([(0.0, False), (0.0, True)]) - pins[1].assert_states_and_times([(0.0, True), (0.0, True)]) - pins[2].assert_states_and_times([(0.0, True), (0.0, True)]) - pins[3].assert_states_and_times([(0.0, False), (0.0, True)]) - pins[4].assert_states_and_times([(0.0, False)]) - pins[5].assert_states_and_times([(0.0, False), (0.1, True), (0.25, False)]) - [pin.clear_states() for pin in pins] - device2.on() - assert device2.value - pins[0].assert_states_and_times([(0.0, True), (0.0, False)]) - pins[1].assert_states_and_times([(0.0, True), (0.0, True)]) - pins[2].assert_states_and_times([(0.0, True), (0.0, True)]) - pins[3].assert_states_and_times([(0.0, True), (0.0, True)]) - pins[4].assert_states_and_times([(0.0, False)]) - pins[5].assert_states_and_times([(0.0, False), (0.1, True), (0.25, False)]) + with Energenie(1, initial_value=True) as device1, \ + Energenie(2, initial_value=False) as device2: + assert device1.value + assert not device2.value + [pin.clear_states() for pin in pins] + device1.on() + assert device1.value + pins[0].assert_states_and_times([(0.0, False), (0.0, True)]) + pins[1].assert_states_and_times([(0.0, True), (0.0, True)]) + pins[2].assert_states_and_times([(0.0, True), (0.0, True)]) + pins[3].assert_states_and_times([(0.0, False), (0.0, True)]) + pins[4].assert_states_and_times([(0.0, False)]) + pins[5].assert_states_and_times([(0.0, False), (0.1, True), (0.25, False)]) + [pin.clear_states() for pin in pins] + device2.on() + assert device2.value + pins[0].assert_states_and_times([(0.0, True), (0.0, False)]) + pins[1].assert_states_and_times([(0.0, True), (0.0, True)]) + pins[2].assert_states_and_times([(0.0, True), (0.0, True)]) + pins[3].assert_states_and_times([(0.0, True), (0.0, True)]) + pins[4].assert_states_and_times([(0.0, False)]) + pins[5].assert_states_and_times([(0.0, False), (0.1, True), (0.25, False)]) diff --git a/tests/test_devices.py b/tests/test_devices.py index 1db7fab..79ae98a 100644 --- a/tests/test_devices.py +++ b/tests/test_devices.py @@ -24,21 +24,22 @@ def test_device_no_pin(): def test_device_init(): pin = MockPin(2) - device = GPIODevice(pin) - assert not device.closed - assert device.pin == pin + with GPIODevice(pin) as device: + assert not device.closed + assert device.pin == pin def test_device_init_twice_same_pin(): pin = MockPin(2) - device = GPIODevice(pin) - with pytest.raises(GPIOPinInUse): - device2 = GPIODevice(pin) + with GPIODevice(pin) as device: + with pytest.raises(GPIOPinInUse): + device2 = GPIODevice(pin) def test_device_init_twice_different_pin(): pin = MockPin(2) - device = GPIODevice(pin) pin2 = MockPin(3) - device2 = GPIODevice(pin2) + with GPIODevice(pin) as device: + with GPIODevice(pin2) as device2: + pass def test_device_close(): pin = MockPin(2) @@ -56,11 +57,12 @@ def test_device_reopen_same_pin(): assert device2.pin == pin assert device.closed assert device.pin is None + device2.close() def test_device_repr(): pin = MockPin(2) - device = GPIODevice(pin) - assert repr(device) == '' % pin + with GPIODevice(pin) as device: + assert repr(device) == '' % pin def test_device_repr_after_close(): pin = MockPin(2) @@ -70,9 +72,9 @@ def test_device_repr_after_close(): def test_device_unknown_attr(): pin = MockPin(2) - device = GPIODevice(pin) - with pytest.raises(AttributeError): - device.foo = 1 + with GPIODevice(pin) as device: + with pytest.raises(AttributeError): + device.foo = 1 def test_device_context_manager(): pin = MockPin(2) @@ -81,35 +83,35 @@ def test_device_context_manager(): assert device.closed def test_composite_device_sequence(): - device = CompositeDevice( - InputDevice(MockPin(2)), - InputDevice(MockPin(3)) - ) - assert len(device) == 2 - assert device[0].pin.number == 2 - assert device[1].pin.number == 3 - assert device.tuple._fields == ('_0', '_1') + with CompositeDevice( + InputDevice(MockPin(2)), + InputDevice(MockPin(3)) + ) as device: + assert len(device) == 2 + assert device[0].pin.number == 2 + assert device[1].pin.number == 3 + assert device.tuple._fields == ('_0', '_1') def test_composite_device_values(): - device = CompositeDevice( - InputDevice(MockPin(2)), - InputDevice(MockPin(3)) - ) - assert device.value == (0, 0) - assert not device.is_active - device[0].pin.drive_high() - assert device.value == (1, 0) - assert device.is_active + with CompositeDevice( + InputDevice(MockPin(2)), + InputDevice(MockPin(3)) + ) as device: + assert device.value == (0, 0) + assert not device.is_active + device[0].pin.drive_high() + assert device.value == (1, 0) + assert device.is_active def test_composite_device_named(): - device = CompositeDevice( - foo=InputDevice(MockPin(2)), - bar=InputDevice(MockPin(3)), - _order=('foo', 'bar') - ) - assert device.tuple._fields == ('foo', 'bar') - assert device.value == (0, 0) - assert not device.is_active + with CompositeDevice( + foo=InputDevice(MockPin(2)), + bar=InputDevice(MockPin(3)), + _order=('foo', 'bar') + ) as device: + assert device.tuple._fields == ('foo', 'bar') + assert device.value == (0, 0) + assert not device.is_active def test_composite_device_bad_init(): with pytest.raises(ValueError): diff --git a/tests/test_inputs.py b/tests/test_inputs.py index 1e92879..ee1d62a 100644 --- a/tests/test_inputs.py +++ b/tests/test_inputs.py @@ -25,131 +25,121 @@ def teardown_function(function): def test_input_initial_values(): pin = MockPin(2) - device = InputDevice(pin, pull_up=True) - assert pin.function == 'input' - assert pin.pull == 'up' - assert device.pull_up - device.close() - device = InputDevice(pin, pull_up=False) - assert pin.pull == 'down' - assert not device.pull_up - device.close() + with InputDevice(pin, pull_up=True) as device: + assert pin.function == 'input' + assert pin.pull == 'up' + assert device.pull_up + device.close() + device = InputDevice(pin, pull_up=False) + assert pin.pull == 'down' + assert not device.pull_up def test_input_is_active(): pin = MockPin(2) - device = InputDevice(pin, pull_up=True) - pin.drive_high() - assert not device.is_active - pin.drive_low() - assert device.is_active + with InputDevice(pin, pull_up=True) as device: + pin.drive_high() + assert not device.is_active + pin.drive_low() + assert device.is_active def test_input_pulled_up(): pin = MockPulledUpPin(2) with pytest.raises(PinFixedPull): - device = InputDevice(pin, pull_up=False) + InputDevice(pin, pull_up=False) def test_input_event_activated(): event = Event() pin = MockPin(2) - device = DigitalInputDevice(pin) - device.when_activated = lambda: event.set() - assert not event.wait(0) - pin.drive_high() - assert event.wait(0) + with DigitalInputDevice(pin) as device: + device.when_activated = lambda: event.set() + assert not event.wait(0) + pin.drive_high() + assert event.wait(0) def test_input_event_deactivated(): event = Event() pin = MockPin(2) - device = DigitalInputDevice(pin) - device.when_deactivated = lambda: event.set() - assert not event.wait(0) - pin.drive_high() - assert not event.wait(0) - pin.drive_low() - assert event.wait(0) + with DigitalInputDevice(pin) as device: + device.when_deactivated = lambda: event.set() + assert not event.wait(0) + pin.drive_high() + assert not event.wait(0) + pin.drive_low() + assert event.wait(0) def test_input_wait_active(): pin = MockPin(2) - device = DigitalInputDevice(pin) - pin.drive_high() - assert device.wait_for_active(1) - assert not device.wait_for_inactive(0) + with DigitalInputDevice(pin) as device: + pin.drive_high() + assert device.wait_for_active(1) + assert not device.wait_for_inactive(0) def test_input_wait_inactive(): pin = MockPin(2) - device = DigitalInputDevice(pin) - assert device.wait_for_inactive(1) - assert not device.wait_for_active(0) + with DigitalInputDevice(pin) as device: + assert device.wait_for_inactive(1) + assert not device.wait_for_active(0) def test_input_smoothed_attrib(): pin = MockPin(2) - device = SmoothedInputDevice(pin, threshold=0.5, queue_len=5, partial=False) - assert device.threshold == 0.5 - assert device.queue_len == 5 - assert not device.partial - device._queue.start() - assert not device.is_active - -def test_input_smoothed_silly(): - pin = MockPin(2) - with pytest.raises(InputDeviceError): - device = SmoothedInputDevice(pin, threshold=-1) - device = SmoothedInputDevice(pin) - del device._queue.stopping - with pytest.raises(AttributeError): - device.close() + with SmoothedInputDevice(pin, threshold=0.5, queue_len=5, partial=False) as device: + assert device.threshold == 0.5 + assert device.queue_len == 5 + assert not device.partial + device._queue.start() + assert not device.is_active def test_input_smoothed_values(): pin = MockPin(2) - device = SmoothedInputDevice(pin) - device._queue.start() - assert not device.is_active - pin.drive_high() - assert device.wait_for_active(1) - pin.drive_low() - assert device.wait_for_inactive(1) + with SmoothedInputDevice(pin) as device: + device._queue.start() + assert not device.is_active + pin.drive_high() + assert device.wait_for_active(1) + pin.drive_low() + assert device.wait_for_inactive(1) def test_input_button(): pin = MockPin(2) - button = Button(pin) - assert pin.pull == 'up' - assert not button.is_pressed - pin.drive_low() - assert button.is_pressed - assert button.wait_for_press(1) - pin.drive_high() - assert not button.is_pressed - assert button.wait_for_release(1) + with Button(pin) as button: + assert pin.pull == 'up' + assert not button.is_pressed + pin.drive_low() + assert button.is_pressed + assert button.wait_for_press(1) + pin.drive_high() + assert not button.is_pressed + assert button.wait_for_release(1) def test_input_line_sensor(): pin = MockPin(2) - sensor = LineSensor(pin) - pin.drive_low() # logic is inverted for line sensor - assert sensor.wait_for_line(1) - assert sensor.line_detected - pin.drive_high() - assert sensor.wait_for_no_line(1) - assert not sensor.line_detected + with LineSensor(pin) as sensor: + pin.drive_low() # logic is inverted for line sensor + assert sensor.wait_for_line(1) + assert sensor.line_detected + pin.drive_high() + assert sensor.wait_for_no_line(1) + assert not sensor.line_detected def test_input_motion_sensor(): pin = MockPin(2) - sensor = MotionSensor(pin) - pin.drive_high() - assert sensor.wait_for_motion(1) - assert sensor.motion_detected - pin.drive_low() - assert sensor.wait_for_no_motion(1) - assert not sensor.motion_detected + with MotionSensor(pin) as sensor: + pin.drive_high() + assert sensor.wait_for_motion(1) + assert sensor.motion_detected + pin.drive_low() + assert sensor.wait_for_no_motion(1) + assert not sensor.motion_detected @pytest.mark.skipif(hasattr(sys, 'pypy_version_info'), reason='timing is too random on pypy') def test_input_light_sensor(): pin = MockChargingPin(2) - sensor = LightSensor(pin) - pin.charge_time = 0.1 - assert sensor.wait_for_dark(1) - pin.charge_time = 0.0 - assert sensor.wait_for_light(1) + with LightSensor(pin) as sensor: + pin.charge_time = 0.1 + assert sensor.wait_for_dark(1) + pin.charge_time = 0.0 + assert sensor.wait_for_light(1) @pytest.mark.skipif(hasattr(sys, 'pypy_version_info'), reason='timing is too random on pypy') @@ -162,22 +152,22 @@ def test_input_distance_sensor(): DistanceSensor(echo_pin, trig_pin, max_distance=-1) # normal queue len is large (because the sensor is *really* jittery) but # we want quick tests and we've got precisely controlled pins :) - sensor = DistanceSensor(echo_pin, trig_pin, queue_len=5, max_distance=1) - assert sensor.max_distance == 1 - assert sensor.trigger is trig_pin - assert sensor.echo is echo_pin - assert sensor.wait_for_out_of_range(1) - assert not sensor.in_range - assert sensor.distance == 1.0 # should be waay before max-distance so this should work - trig_pin.echo_time = 0.0 - assert sensor.wait_for_in_range(1) - assert sensor.in_range - assert sensor.distance < sensor.threshold_distance # depending on speed of machine, may not reach 0 here - sensor.threshold_distance = 0.1 - assert sensor.threshold_distance == 0.1 - with pytest.raises(ValueError): - sensor.max_distance = -1 - sensor.max_distance = 20 - assert sensor.max_distance == 20 - assert sensor.threshold_distance == 0.1 + with DistanceSensor(echo_pin, trig_pin, queue_len=5, max_distance=1) as sensor: + assert sensor.max_distance == 1 + assert sensor.trigger is trig_pin + assert sensor.echo is echo_pin + assert sensor.wait_for_out_of_range(1) + assert not sensor.in_range + assert sensor.distance == 1.0 # should be waay before max-distance so this should work + trig_pin.echo_time = 0.0 + assert sensor.wait_for_in_range(1) + assert sensor.in_range + assert sensor.distance < sensor.threshold_distance # depending on speed of machine, may not reach 0 here + sensor.threshold_distance = 0.1 + assert sensor.threshold_distance == 0.1 + with pytest.raises(ValueError): + sensor.max_distance = -1 + sensor.max_distance = 20 + assert sensor.max_distance == 20 + assert sensor.threshold_distance == 0.1 diff --git a/tests/test_outputs.py b/tests/test_outputs.py index 0d120bf..27bc97d 100644 --- a/tests/test_outputs.py +++ b/tests/test_outputs.py @@ -25,114 +25,112 @@ def teardown_function(function): def test_output_initial_values(): pin = MockPin(2) - device = OutputDevice(pin, initial_value=False) - assert pin.function == 'output' - assert not pin.state - device.close() - device = OutputDevice(pin, initial_value=True) - assert pin.state - device.close() - state = pin.state - device = OutputDevice(pin, initial_value=None) - assert state == pin.state + with OutputDevice(pin, initial_value=False) as device: + assert pin.function == 'output' + assert not pin.state + with OutputDevice(pin, initial_value=True) as device: + assert pin.state + state = pin.state + with OutputDevice(pin, initial_value=None) as device: + assert state == pin.state def test_output_write_active_high(): pin = MockPin(2) - device = OutputDevice(pin) - device.on() - assert pin.state - device.off() - assert not pin.state + with OutputDevice(pin) as device: + device.on() + assert pin.state + device.off() + assert not pin.state def test_output_write_active_low(): pin = MockPin(2) - device = OutputDevice(pin, active_high=False) - device.on() - assert not pin.state - device.off() - assert pin.state + with OutputDevice(pin, active_high=False) as device: + device.on() + assert not pin.state + device.off() + assert pin.state def test_output_write_closed(): - device = OutputDevice(MockPin(2)) - device.close() - with pytest.raises(GPIODeviceClosed): - device.on() + with OutputDevice(MockPin(2)) as device: + device.close() + with pytest.raises(GPIODeviceClosed): + device.on() def test_output_write_silly(): pin = MockPin(2) - device = OutputDevice(pin) - pin.function = 'input' - with pytest.raises(AttributeError): - device.on() + with OutputDevice(pin) as device: + pin.function = 'input' + with pytest.raises(AttributeError): + device.on() def test_output_value(): pin = MockPin(2) - device = OutputDevice(pin) - assert not device.value - assert not pin.state - device.on() - assert device.value - assert pin.state - device.value = False - assert not device.value - assert not pin.state + with OutputDevice(pin) as device: + assert not device.value + assert not pin.state + device.on() + assert device.value + assert pin.state + device.value = False + assert not device.value + assert not pin.state def test_output_digital_toggle(): pin = MockPin(2) - device = DigitalOutputDevice(pin) - assert not device.value - assert not pin.state - device.toggle() - assert device.value - assert pin.state - device.toggle() - assert not device.value - assert not pin.state + with DigitalOutputDevice(pin) as device: + assert not device.value + assert not pin.state + device.toggle() + assert device.value + assert pin.state + device.toggle() + assert not device.value + assert not pin.state @pytest.mark.skipif(hasattr(sys, 'pypy_version_info'), reason='timing is too random on pypy') def test_output_blink_background(): pin = MockPin(2) - device = DigitalOutputDevice(pin) - device.blink(0.1, 0.1, n=2) - device._blink_thread.join() # naughty, but ensures no arbitrary waits in the test - pin.assert_states_and_times([ - (0.0, False), - (0.0, True), - (0.1, False), - (0.1, True), - (0.1, False) - ]) + with DigitalOutputDevice(pin) as device: + device.blink(0.1, 0.1, n=2) + device._blink_thread.join() # naughty, but ensures no arbitrary waits in the test + pin.assert_states_and_times([ + (0.0, False), + (0.0, True), + (0.1, False), + (0.1, True), + (0.1, False) + ]) @pytest.mark.skipif(hasattr(sys, 'pypy_version_info'), reason='timing is too random on pypy') def test_output_blink_foreground(): pin = MockPin(2) - device = DigitalOutputDevice(pin) - device.blink(0.1, 0.1, n=2, background=False) - pin.assert_states_and_times([ - (0.0, False), - (0.0, True), - (0.1, False), - (0.1, True), - (0.1, False) - ]) + with DigitalOutputDevice(pin) as device: + device.blink(0.1, 0.1, n=2, background=False) + pin.assert_states_and_times([ + (0.0, False), + (0.0, True), + (0.1, False), + (0.1, True), + (0.1, False) + ]) def test_output_blink_interrupt_on(): pin = MockPin(2) - device = DigitalOutputDevice(pin) - device.blink(1, 0.1) - sleep(0.2) - device.off() # should interrupt while on - pin.assert_states([False, True, False]) + with DigitalOutputDevice(pin) as device: + device.blink(1, 0.1) + sleep(0.2) + device.off() # should interrupt while on + pin.assert_states([False, True, False]) def test_output_blink_interrupt_off(): pin = MockPin(2) - device = DigitalOutputDevice(pin) - device.blink(0.1, 1) - sleep(0.2) - device.off() # should interrupt while off - pin.assert_states([False, True, False]) + with DigitalOutputDevice(pin) as device: + device.blink(0.1, 1) + sleep(0.2) + device.off() # should interrupt while off + pin.assert_states([False, True, False]) def test_output_pwm_bad_initial_value(): with pytest.raises(ValueError): @@ -144,50 +142,50 @@ def test_output_pwm_not_supported(): def test_output_pwm_states(): pin = MockPWMPin(2) - device = PWMOutputDevice(pin) - device.value = 0.1 - device.value = 0.2 - device.value = 0.0 - pin.assert_states([0.0, 0.1, 0.2, 0.0]) + with PWMOutputDevice(pin) as device: + device.value = 0.1 + device.value = 0.2 + device.value = 0.0 + pin.assert_states([0.0, 0.1, 0.2, 0.0]) def test_output_pwm_read(): pin = MockPWMPin(2) - device = PWMOutputDevice(pin, frequency=100) - assert device.frequency == 100 - device.value = 0.1 - assert isclose(device.value, 0.1) - assert isclose(pin.state, 0.1) - assert device.is_active - device.frequency = None - assert not device.value - assert not device.is_active - assert device.frequency is None + with PWMOutputDevice(pin, frequency=100) as device: + assert device.frequency == 100 + device.value = 0.1 + assert isclose(device.value, 0.1) + assert isclose(pin.state, 0.1) + assert device.is_active + device.frequency = None + assert not device.value + assert not device.is_active + assert device.frequency is None def test_output_pwm_write(): pin = MockPWMPin(2) - device = PWMOutputDevice(pin) - device.on() - device.off() - pin.assert_states([False, True, False]) + with PWMOutputDevice(pin) as device: + device.on() + device.off() + pin.assert_states([False, True, False]) def test_output_pwm_toggle(): pin = MockPWMPin(2) - device = PWMOutputDevice(pin) - device.toggle() - device.value = 0.5 - device.value = 0.1 - device.toggle() - device.off() - pin.assert_states([False, True, 0.5, 0.1, 0.9, False]) + with PWMOutputDevice(pin) as device: + device.toggle() + device.value = 0.5 + device.value = 0.1 + device.toggle() + device.off() + pin.assert_states([False, True, 0.5, 0.1, 0.9, False]) def test_output_pwm_active_high_read(): pin = MockPWMPin(2) - device = PWMOutputDevice(pin, active_high=False) - device.value = 0.1 - assert isclose(device.value, 0.1) - assert isclose(pin.state, 0.9) - device.frequency = None - assert device.value + with PWMOutputDevice(pin, active_high=False) as device: + device.value = 0.1 + assert isclose(device.value, 0.1) + assert isclose(pin.state, 0.9) + device.frequency = None + assert device.value def test_output_pwm_bad_value(): with pytest.raises(ValueError): @@ -201,108 +199,108 @@ def test_output_pwm_write_closed(): def test_output_pwm_write_silly(): pin = MockPWMPin(2) - device = PWMOutputDevice(pin) - pin.function = 'input' - with pytest.raises(AttributeError): - device.off() + with PWMOutputDevice(pin) as device: + pin.function = 'input' + with pytest.raises(AttributeError): + device.off() @pytest.mark.skipif(hasattr(sys, 'pypy_version_info'), reason='timing is too random on pypy') def test_output_pwm_blink_background(): pin = MockPWMPin(2) - device = PWMOutputDevice(pin) - device.blink(0.1, 0.1, n=2) - device._blink_thread.join() - pin.assert_states_and_times([ - (0.0, 0), - (0.0, 1), - (0.1, 0), - (0.1, 1), - (0.1, 0) - ]) + with PWMOutputDevice(pin) as device: + device.blink(0.1, 0.1, n=2) + device._blink_thread.join() + pin.assert_states_and_times([ + (0.0, 0), + (0.0, 1), + (0.1, 0), + (0.1, 1), + (0.1, 0) + ]) @pytest.mark.skipif(hasattr(sys, 'pypy_version_info'), reason='timing is too random on pypy') def test_output_pwm_blink_foreground(): pin = MockPWMPin(2) - device = PWMOutputDevice(pin) - device.blink(0.1, 0.1, n=2, background=False) - pin.assert_states_and_times([ - (0.0, 0), - (0.0, 1), - (0.1, 0), - (0.1, 1), - (0.1, 0) - ]) + with PWMOutputDevice(pin) as device: + device.blink(0.1, 0.1, n=2, background=False) + pin.assert_states_and_times([ + (0.0, 0), + (0.0, 1), + (0.1, 0), + (0.1, 1), + (0.1, 0) + ]) @pytest.mark.skipif(hasattr(sys, 'pypy_version_info'), reason='timing is too random on pypy') def test_output_pwm_fade_background(): pin = MockPWMPin(2) - device = PWMOutputDevice(pin) - device.blink(0, 0, 0.1, 0.1, n=2) - device._blink_thread.join() - pin.assert_states_and_times([ - (0.0, 0), - (0.02, 0.2), - (0.02, 0.4), - (0.02, 0.6), - (0.02, 0.8), - (0.02, 1), - (0.02, 0.8), - (0.02, 0.6), - (0.02, 0.4), - (0.02, 0.2), - (0.02, 0), - (0.02, 0.2), - (0.02, 0.4), - (0.02, 0.6), - (0.02, 0.8), - (0.02, 1), - (0.02, 0.8), - (0.02, 0.6), - (0.02, 0.4), - (0.02, 0.2), - (0.02, 0), - ]) + with PWMOutputDevice(pin) as device: + device.blink(0, 0, 0.2, 0.2, n=2) + device._blink_thread.join() + pin.assert_states_and_times([ + (0.0, 0), + (0.04, 0.2), + (0.04, 0.4), + (0.04, 0.6), + (0.04, 0.8), + (0.04, 1), + (0.04, 0.8), + (0.04, 0.6), + (0.04, 0.4), + (0.04, 0.2), + (0.04, 0), + (0.04, 0.2), + (0.04, 0.4), + (0.04, 0.6), + (0.04, 0.8), + (0.04, 1), + (0.04, 0.8), + (0.04, 0.6), + (0.04, 0.4), + (0.04, 0.2), + (0.04, 0), + ]) @pytest.mark.skipif(hasattr(sys, 'pypy_version_info'), reason='timing is too random on pypy') def test_output_pwm_fade_foreground(): pin = MockPWMPin(2) - device = PWMOutputDevice(pin) - device.blink(0, 0, 0.1, 0.1, n=2, background=False) - pin.assert_states_and_times([ - (0.0, 0), - (0.02, 0.2), - (0.02, 0.4), - (0.02, 0.6), - (0.02, 0.8), - (0.02, 1), - (0.02, 0.8), - (0.02, 0.6), - (0.02, 0.4), - (0.02, 0.2), - (0.02, 0), - (0.02, 0.2), - (0.02, 0.4), - (0.02, 0.6), - (0.02, 0.8), - (0.02, 1), - (0.02, 0.8), - (0.02, 0.6), - (0.02, 0.4), - (0.02, 0.2), - (0.02, 0), - ]) + with PWMOutputDevice(pin) as device: + device.blink(0, 0, 0.2, 0.2, n=2, background=False) + pin.assert_states_and_times([ + (0.0, 0), + (0.04, 0.2), + (0.04, 0.4), + (0.04, 0.6), + (0.04, 0.8), + (0.04, 1), + (0.04, 0.8), + (0.04, 0.6), + (0.04, 0.4), + (0.04, 0.2), + (0.04, 0), + (0.04, 0.2), + (0.04, 0.4), + (0.04, 0.6), + (0.04, 0.8), + (0.04, 1), + (0.04, 0.8), + (0.04, 0.6), + (0.04, 0.4), + (0.04, 0.2), + (0.04, 0), + ]) def test_output_pwm_blink_interrupt(): pin = MockPWMPin(2) - device = PWMOutputDevice(pin) - device.blink(1, 0.1) - sleep(0.2) - device.off() # should interrupt while on - pin.assert_states([0, 1, 0]) + with PWMOutputDevice(pin) as device: + device.blink(1, 0.1) + sleep(0.2) + device.off() # should interrupt while on + pin.assert_states([0, 1, 0]) def test_rgbled_missing_pins(): with pytest.raises(ValueError): @@ -310,116 +308,116 @@ def test_rgbled_missing_pins(): def test_rgbled_initial_value(): r, g, b = (MockPWMPin(i) for i in (1, 2, 3)) - device = RGBLED(r, g, b, initial_value=(0.1, 0.2, 0)) - assert r.frequency - assert g.frequency - assert b.frequency - assert isclose(r.state, 0.1) - assert isclose(g.state, 0.2) - assert isclose(b.state, 0.0) + with RGBLED(r, g, b, initial_value=(0.1, 0.2, 0)) as device: + assert r.frequency + assert g.frequency + assert b.frequency + assert isclose(r.state, 0.1) + assert isclose(g.state, 0.2) + assert isclose(b.state, 0.0) def test_rgbled_value(): r, g, b = (MockPWMPin(i) for i in (1, 2, 3)) - device = RGBLED(r, g, b) - assert not device.is_active - assert device.value == (0, 0, 0) - device.on() - assert device.is_active - assert device.value == (1, 1, 1) - device.off() - assert not device.is_active - assert device.value == (0, 0, 0) + with RGBLED(r, g, b) as device: + assert not device.is_active + assert device.value == (0, 0, 0) + device.on() + assert device.is_active + assert device.value == (1, 1, 1) + device.off() + assert not device.is_active + assert device.value == (0, 0, 0) def test_rgbled_toggle(): r, g, b = (MockPWMPin(i) for i in (1, 2, 3)) - device = RGBLED(r, g, b) - assert not device.is_active - assert device.value == (0, 0, 0) - device.toggle() - assert device.is_active - assert device.value == (1, 1, 1) - device.toggle() - assert not device.is_active - assert device.value == (0, 0, 0) + with RGBLED(r, g, b) as device: + assert not device.is_active + assert device.value == (0, 0, 0) + device.toggle() + assert device.is_active + assert device.value == (1, 1, 1) + device.toggle() + assert not device.is_active + assert device.value == (0, 0, 0) @pytest.mark.skipif(hasattr(sys, 'pypy_version_info'), reason='timing is too random on pypy') def test_rgbled_blink_background(): r, g, b = (MockPWMPin(i) for i in (1, 2, 3)) - device = RGBLED(r, g, b) - device.blink(0.1, 0.1, n=2) - device._blink_thread.join() - expected = [ - (0.0, 0), - (0.0, 1), - (0.1, 0), - (0.1, 1), - (0.1, 0) - ] - r.assert_states_and_times(expected) - g.assert_states_and_times(expected) - b.assert_states_and_times(expected) + with RGBLED(r, g, b) as device: + device.blink(0.1, 0.1, n=2) + device._blink_thread.join() + expected = [ + (0.0, 0), + (0.0, 1), + (0.1, 0), + (0.1, 1), + (0.1, 0) + ] + r.assert_states_and_times(expected) + g.assert_states_and_times(expected) + b.assert_states_and_times(expected) @pytest.mark.skipif(hasattr(sys, 'pypy_version_info'), reason='timing is too random on pypy') def test_rgbled_blink_foreground(): r, g, b = (MockPWMPin(i) for i in (1, 2, 3)) - device = RGBLED(r, g, b) - device.blink(0.1, 0.1, n=2, background=False) - expected = [ - (0.0, 0), - (0.0, 1), - (0.1, 0), - (0.1, 1), - (0.1, 0) - ] - r.assert_states_and_times(expected) - g.assert_states_and_times(expected) - b.assert_states_and_times(expected) + with RGBLED(r, g, b) as device: + device.blink(0.1, 0.1, n=2, background=False) + expected = [ + (0.0, 0), + (0.0, 1), + (0.1, 0), + (0.1, 1), + (0.1, 0) + ] + r.assert_states_and_times(expected) + g.assert_states_and_times(expected) + b.assert_states_and_times(expected) @pytest.mark.skipif(hasattr(sys, 'pypy_version_info'), reason='timing is too random on pypy') def test_rgbled_fade_background(): r, g, b = (MockPWMPin(i) for i in (1, 2, 3)) - device = RGBLED(r, g, b) - device.blink(0, 0, 0.1, 0.1, n=2) - device._blink_thread.join() - expected = [ - (0.0, 0), - (0.02, 0.2), - (0.02, 0.4), - (0.02, 0.6), - (0.02, 0.8), - (0.02, 1), - (0.02, 0.8), - (0.02, 0.6), - (0.02, 0.4), - (0.02, 0.2), - (0.02, 0), - (0.02, 0.2), - (0.02, 0.4), - (0.02, 0.6), - (0.02, 0.8), - (0.02, 1), - (0.02, 0.8), - (0.02, 0.6), - (0.02, 0.4), - (0.02, 0.2), - (0.02, 0), - ] - r.assert_states_and_times(expected) - g.assert_states_and_times(expected) - b.assert_states_and_times(expected) + with RGBLED(r, g, b) as device: + device.blink(0, 0, 0.2, 0.2, n=2) + device._blink_thread.join() + expected = [ + (0.0, 0), + (0.04, 0.2), + (0.04, 0.4), + (0.04, 0.6), + (0.04, 0.8), + (0.04, 1), + (0.04, 0.8), + (0.04, 0.6), + (0.04, 0.4), + (0.04, 0.2), + (0.04, 0), + (0.04, 0.2), + (0.04, 0.4), + (0.04, 0.6), + (0.04, 0.8), + (0.04, 1), + (0.04, 0.8), + (0.04, 0.6), + (0.04, 0.4), + (0.04, 0.2), + (0.04, 0), + ] + r.assert_states_and_times(expected) + g.assert_states_and_times(expected) + b.assert_states_and_times(expected) def test_output_rgbled_blink_interrupt(): r, g, b = (MockPWMPin(i) for i in (1, 2, 3)) - device = RGBLED(r, g, b) - device.blink(1, 0.1) - sleep(0.2) - device.off() # should interrupt while on - r.assert_states([0, 1, 0]) - g.assert_states([0, 1, 0]) - b.assert_states([0, 1, 0]) + with RGBLED(r, g, b) as device: + device.blink(1, 0.1) + sleep(0.2) + device.off() # should interrupt while on + r.assert_states([0, 1, 0]) + g.assert_states([0, 1, 0]) + b.assert_states([0, 1, 0]) def test_motor_missing_pins(): with pytest.raises(ValueError): @@ -428,55 +426,55 @@ def test_motor_missing_pins(): def test_motor_pins(): f = MockPWMPin(1) b = MockPWMPin(2) - device = Motor(f, b) - assert device.forward_device.pin is f - assert device.backward_device.pin is b + with Motor(f, b) as device: + assert device.forward_device.pin is f + assert device.backward_device.pin is b def test_motor_close(): f = MockPWMPin(1) b = MockPWMPin(2) - device = Motor(f, b) - device.close() - assert device.closed - assert device.forward_device.pin is None - assert device.backward_device.pin is None + with Motor(f, b) as device: + device.close() + assert device.closed + assert device.forward_device.pin is None + assert device.backward_device.pin is None def test_motor_value(): f = MockPWMPin(1) b = MockPWMPin(2) - device = Motor(f, b) - device.value = -1 - assert device.is_active - assert device.value == -1 - assert b.state == 1 and f.state == 0 - device.value = 1 - assert device.is_active - assert device.value == 1 - assert b.state == 0 and f.state == 1 - device.value = 0.5 - assert device.is_active - assert device.value == 0.5 - assert b.state == 0 and f.state == 0.5 - device.value = 0 - assert not device.is_active - assert not device.value - assert b.state == 0 and f.state == 0 + with Motor(f, b) as device: + device.value = -1 + assert device.is_active + assert device.value == -1 + assert b.state == 1 and f.state == 0 + device.value = 1 + assert device.is_active + assert device.value == 1 + assert b.state == 0 and f.state == 1 + device.value = 0.5 + assert device.is_active + assert device.value == 0.5 + assert b.state == 0 and f.state == 0.5 + device.value = 0 + assert not device.is_active + assert not device.value + assert b.state == 0 and f.state == 0 def test_motor_bad_value(): f = MockPWMPin(1) b = MockPWMPin(2) - device = Motor(f, b) - with pytest.raises(ValueError): - device.value = 2 + with Motor(f, b) as device: + with pytest.raises(ValueError): + device.value = 2 def test_motor_reverse(): f = MockPWMPin(1) b = MockPWMPin(2) - device = Motor(f, b) - device.forward() - assert device.value == 1 - assert b.state == 0 and f.state == 1 - device.reverse() - assert device.value == -1 - assert b.state == 1 and f.state == 0 + with Motor(f, b) as device: + device.forward() + assert device.value == 1 + assert b.state == 0 and f.state == 1 + device.reverse() + assert device.value == -1 + assert b.state == 1 and f.state == 0 diff --git a/tests/test_source_tools.py b/tests/test_tools.py similarity index 98% rename from tests/test_source_tools.py rename to tests/test_tools.py index 9ba32cb..d95378c 100644 --- a/tests/test_source_tools.py +++ b/tests/test_tools.py @@ -11,7 +11,7 @@ import pytest from math import sin, cos, radians from time import time -from gpiozero import * +from gpiozero.tools import * try: from math import isclose except ImportError: