Skip to content

Added pylint check for tests, linted tests directory #27

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 29, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ repos:
- id: pylint
name: pylint (library code)
types: [python]
exclude: "^(docs/|examples/|setup.py$)"
exclude: "^(docs/|tests/|examples/|setup.py$)"
- repo: local
hooks:
- id: pylint_examples
Expand All @@ -32,3 +32,11 @@ repos:
entry: /usr/bin/env bash -c
args: ['([[ ! -d "examples" ]] || for example in $(find . -path "./examples/*.py"); do pylint --disable=missing-docstring,invalid-name $example; done)']
language: system
- repo: local
hooks:
- id: pylint_tests
name: pylint (tests code)
description: Run pylint rules on "tests/*.py" files
entry: /usr/bin/env bash -c
args: ['([[ ! -d "tests" ]] || for test in $(find . -path "./tests/*.py"); do pylint --disable=missing-docstring $test; done)']
language: system
114 changes: 58 additions & 56 deletions tests/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,100 +24,102 @@ def _false():
return False


def assertEqual(a, b):
assert a == b, "Want %r, got %r" % (a, b)
def assertEqual(var_a, var_b): # pylint: disable=invalid-name
assert var_a == var_b, "Want %r, got %r" % (var_a, var_b)


def test_back_and_forth():
# Start false
db = adafruit_debouncer.Debouncer(_false)
assertEqual(db.value, False)
debouncer = adafruit_debouncer.Debouncer(_false)
assertEqual(debouncer.value, False)

# Set the raw state to true, update, and make sure the debounced
# state has not changed yet:
db.function = _true
db.update()
assertEqual(db.value, False)
assert not db.last_duration, "There was no previous interval??"
debouncer.function = _true
debouncer.update()
assertEqual(debouncer.value, False)
assert not debouncer.last_duration, "There was no previous interval??"

# Sleep longer than the debounce interval, so state can change:
time.sleep(0.02)
db.update()
assert db.last_duration # is actually duration between powerup and now
assertEqual(db.value, True)
assertEqual(db.rose, True)
assertEqual(db.fell, False)
debouncer.update()
assert debouncer.last_duration # is actually duration between powerup and now
assertEqual(debouncer.value, True)
assertEqual(debouncer.rose, True)
assertEqual(debouncer.fell, False)
# Duration since last change has only been long enough to run these
# asserts, which should be well under 1/10 second
assert db.current_duration < 0.1, "Unit error? %d" % db.current_duration
assert debouncer.current_duration < 0.1, (
"Unit error? %d" % debouncer.current_duration
)

# Set raw state back to false, make sure it's not instantly reflected,
# then wait and make sure it IS reflected after the interval has passed.
db.function = _false
db.update()
assertEqual(db.value, True)
assertEqual(db.fell, False)
assertEqual(db.rose, False)
debouncer.function = _false
debouncer.update()
assertEqual(debouncer.value, True)
assertEqual(debouncer.fell, False)
assertEqual(debouncer.rose, False)
time.sleep(0.02)
assert 0.019 < db.current_duration <= 1, (
"Unit error? sleep .02 -> duration %d" % db.current_duration
assert 0.019 < debouncer.current_duration <= 1, (
"Unit error? sleep .02 -> duration %d" % debouncer.current_duration
)
db.update()
assertEqual(db.value, False)
assertEqual(db.rose, False)
assertEqual(db.fell, True)
debouncer.update()
assertEqual(debouncer.value, False)
assertEqual(debouncer.rose, False)
assertEqual(debouncer.fell, True)

assert 0 < db.current_duration <= 0.1, (
"Unit error? time to run asserts %d" % db.current_duration
assert 0 < debouncer.current_duration <= 0.1, (
"Unit error? time to run asserts %d" % debouncer.current_duration
)
assert 0 < db.last_duration < 0.1, (
"Unit error? Last dur should be ~.02, is %d" % db.last_duration
assert 0 < debouncer.last_duration < 0.1, (
"Unit error? Last dur should be ~.02, is %d" % debouncer.last_duration
)


def test_interval_is_the_same():
db = adafruit_debouncer.Debouncer(_false, interval=0.25)
assertEqual(db.value, False)
db.update()
db.function = _true
db.update()
debouncer = adafruit_debouncer.Debouncer(_false, interval=0.25)
assertEqual(debouncer.value, False)
debouncer.update()
debouncer.function = _true
debouncer.update()

time.sleep(0.1) # longer than default interval
db.update()
assertEqual(db.value, False)
debouncer.update()
assertEqual(debouncer.value, False)

time.sleep(0.2) # 0.1 + 0.2 > 0.25
db.update()
assertEqual(db.value, True)
assertEqual(db.rose, True)
assertEqual(db.interval, 0.25)
debouncer.update()
assertEqual(debouncer.value, True)
assertEqual(debouncer.rose, True)
assertEqual(debouncer.interval, 0.25)


def test_setting_interval():
# Check that setting the interval does change the time the debouncer waits
db = adafruit_debouncer.Debouncer(_false, interval=0.01)
db.update()
debouncer = adafruit_debouncer.Debouncer(_false, interval=0.01)
debouncer.update()

# set the interval to a longer time, sleep for a time between
# the two interval settings, and assert that the value hasn't changed.

db.function = _true
db.interval = 0.2
db.update()
assert db.interval - 0.2 < 0.00001, "interval is not consistent"
debouncer.function = _true
debouncer.interval = 0.2
debouncer.update()
assert debouncer.interval - 0.2 < 0.00001, "interval is not consistent"
time.sleep(0.11)
db.update()
debouncer.update()

assertEqual(db.value, False)
assertEqual(db.rose, False)
assertEqual(db.fell, False)
assertEqual(debouncer.value, False)
assertEqual(debouncer.rose, False)
assertEqual(debouncer.fell, False)

# and then once the whole time has passed make sure it did change
time.sleep(0.11)
db.update()
assertEqual(db.value, True)
assertEqual(db.rose, True)
assertEqual(db.fell, False)
debouncer.update()
assertEqual(debouncer.value, True)
assertEqual(debouncer.rose, True)
assertEqual(debouncer.fell, False)


def run():
Expand All @@ -131,8 +133,8 @@ def run():
test()
print("PASS")
passes += 1
except Exception as e:
sys.print_exception(e)
except Exception as err: # pylint: disable=broad-except
sys.print_exception(err) # pylint: disable=no-member
print("FAIL")
fails += 1

Expand Down