From a21e7803803b271313e0188f177bf03881900ab6 Mon Sep 17 00:00:00 2001 From: Greg Nazario Date: Wed, 28 Aug 2024 09:30:27 -0700 Subject: [PATCH] [spec] Add Behave (cucumber) specifications to python (#25) * [spec] Add Behave (cucumber) specifications to python * [behave] Add behave to build dependencies * [behave] Add stubs to let linting of specs * [ci] Run behave in normal unit testing --- CHANGELOG.md | 2 + Makefile | 14 +- aptos_sdk/bcs.py | 2 +- features/account_address.feature | 68 +++++ features/bcs_deserialization.feature | 268 ++++++++++++++++++ features/bcs_serialization.feature | 224 +++++++++++++++ features/steps/account_address.py | 34 +++ features/steps/bcs.py | 172 +++++++++++ features/steps/common.py | 116 ++++++++ features/stubs/behave/__init__.pyi | 32 +++ features/stubs/behave/_stepimport.pyi | 38 +++ features/stubs/behave/_types.pyi | 25 ++ features/stubs/behave/api/__init__.pyi | 0 features/stubs/behave/api/async_step.pyi | 33 +++ features/stubs/behave/capture.pyi | 45 +++ features/stubs/behave/compat/__init__.pyi | 0 features/stubs/behave/compat/collections.pyi | 2 + features/stubs/behave/configuration.pyi | 102 +++++++ features/stubs/behave/contrib/__init__.pyi | 0 .../contrib/formatter_missing_steps.pyi | 19 ++ .../behave/contrib/scenario_autoretry.pyi | 3 + .../stubs/behave/contrib/steps/__init__.pyi | 1 + .../stubs/behave/contrib/substep_dirs.pyi | 0 features/stubs/behave/fixture.pyi | 16 ++ features/stubs/behave/formatter/__init__.pyi | 0 features/stubs/behave/formatter/_builtins.pyi | 1 + features/stubs/behave/formatter/_registry.pyi | 16 ++ .../stubs/behave/formatter/ansi_escapes.pyi | 12 + features/stubs/behave/formatter/base.pyi | 42 +++ .../stubs/behave/formatter/formatters.pyi | 4 + features/stubs/behave/formatter/json.pyi | 44 +++ features/stubs/behave/formatter/null.pyi | 5 + features/stubs/behave/formatter/plain.pyi | 41 +++ features/stubs/behave/formatter/pretty.pyi | 62 ++++ features/stubs/behave/formatter/progress.pyi | 53 ++++ features/stubs/behave/formatter/rerun.pyi | 18 ++ .../stubs/behave/formatter/sphinx_steps.pyi | 74 +++++ .../stubs/behave/formatter/sphinx_util.pyi | 28 ++ features/stubs/behave/formatter/steps.pyi | 77 +++++ features/stubs/behave/formatter/tags.pyi | 33 +++ features/stubs/behave/i18n.pyi | 3 + features/stubs/behave/importer.pyi | 20 ++ features/stubs/behave/json_parser.pyi | 22 ++ features/stubs/behave/log_capture.pyi | 29 ++ features/stubs/behave/matchers.pyi | 82 ++++++ features/stubs/behave/model.pyi | 252 ++++++++++++++++ features/stubs/behave/model_core.pyi | 97 +++++++ features/stubs/behave/model_describe.pyi | 17 ++ features/stubs/behave/parser.pyi | 67 +++++ features/stubs/behave/reporter/__init__.pyi | 0 features/stubs/behave/reporter/base.pyi | 8 + features/stubs/behave/reporter/junit.pyi | 55 ++++ features/stubs/behave/reporter/summary.pyi | 25 ++ features/stubs/behave/runner.pyi | 88 ++++++ features/stubs/behave/runner_util.pyi | 62 ++++ features/stubs/behave/step_registry.pyi | 34 +++ features/stubs/behave/tag_expression.pyi | 15 + features/stubs/behave/tag_matcher.pyi | 92 ++++++ features/stubs/behave/textutil.pyi | 16 ++ features/stubs/behave/userdata.pyi | 48 ++++ poetry.lock | 64 ++++- pyproject.toml | 2 + 62 files changed, 2817 insertions(+), 7 deletions(-) create mode 100644 features/account_address.feature create mode 100644 features/bcs_deserialization.feature create mode 100644 features/bcs_serialization.feature create mode 100644 features/steps/account_address.py create mode 100644 features/steps/bcs.py create mode 100644 features/steps/common.py create mode 100644 features/stubs/behave/__init__.pyi create mode 100644 features/stubs/behave/_stepimport.pyi create mode 100644 features/stubs/behave/_types.pyi create mode 100644 features/stubs/behave/api/__init__.pyi create mode 100644 features/stubs/behave/api/async_step.pyi create mode 100644 features/stubs/behave/capture.pyi create mode 100644 features/stubs/behave/compat/__init__.pyi create mode 100644 features/stubs/behave/compat/collections.pyi create mode 100644 features/stubs/behave/configuration.pyi create mode 100644 features/stubs/behave/contrib/__init__.pyi create mode 100644 features/stubs/behave/contrib/formatter_missing_steps.pyi create mode 100644 features/stubs/behave/contrib/scenario_autoretry.pyi create mode 100644 features/stubs/behave/contrib/steps/__init__.pyi create mode 100644 features/stubs/behave/contrib/substep_dirs.pyi create mode 100644 features/stubs/behave/fixture.pyi create mode 100644 features/stubs/behave/formatter/__init__.pyi create mode 100644 features/stubs/behave/formatter/_builtins.pyi create mode 100644 features/stubs/behave/formatter/_registry.pyi create mode 100644 features/stubs/behave/formatter/ansi_escapes.pyi create mode 100644 features/stubs/behave/formatter/base.pyi create mode 100644 features/stubs/behave/formatter/formatters.pyi create mode 100644 features/stubs/behave/formatter/json.pyi create mode 100644 features/stubs/behave/formatter/null.pyi create mode 100644 features/stubs/behave/formatter/plain.pyi create mode 100644 features/stubs/behave/formatter/pretty.pyi create mode 100644 features/stubs/behave/formatter/progress.pyi create mode 100644 features/stubs/behave/formatter/rerun.pyi create mode 100644 features/stubs/behave/formatter/sphinx_steps.pyi create mode 100644 features/stubs/behave/formatter/sphinx_util.pyi create mode 100644 features/stubs/behave/formatter/steps.pyi create mode 100644 features/stubs/behave/formatter/tags.pyi create mode 100644 features/stubs/behave/i18n.pyi create mode 100644 features/stubs/behave/importer.pyi create mode 100644 features/stubs/behave/json_parser.pyi create mode 100644 features/stubs/behave/log_capture.pyi create mode 100644 features/stubs/behave/matchers.pyi create mode 100644 features/stubs/behave/model.pyi create mode 100644 features/stubs/behave/model_core.pyi create mode 100644 features/stubs/behave/model_describe.pyi create mode 100644 features/stubs/behave/parser.pyi create mode 100644 features/stubs/behave/reporter/__init__.pyi create mode 100644 features/stubs/behave/reporter/base.pyi create mode 100644 features/stubs/behave/reporter/junit.pyi create mode 100644 features/stubs/behave/reporter/summary.pyi create mode 100644 features/stubs/behave/runner.pyi create mode 100644 features/stubs/behave/runner_util.pyi create mode 100644 features/stubs/behave/step_registry.pyi create mode 100644 features/stubs/behave/tag_expression.pyi create mode 100644 features/stubs/behave/tag_matcher.pyi create mode 100644 features/stubs/behave/textutil.pyi create mode 100644 features/stubs/behave/userdata.pyi diff --git a/CHANGELOG.md b/CHANGELOG.md index da4df3c..4eeacae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ All notable changes to the Aptos Python SDK will be captured in this file. This ## 0.9.0 - Add Multikey support for Python, with an example - Deprecate and remove non-BCS transaction submission +- Set max Uleb128 to MAX_U32 +- Add Behave behavioral specifications for BCS and AccountAddress ## 0.8.6 - add client for graphql indexer service with light demo in coin transfer diff --git a/Makefile b/Makefile index 494851a..de57e49 100644 --- a/Makefile +++ b/Makefile @@ -3,19 +3,23 @@ test: poetry run python -m unittest discover -s aptos_sdk/ -p '*.py' -t .. + poetry run behave test-coverage: poetry run python -m coverage run -m unittest discover -s aptos_sdk/ -p '*.py' -t .. poetry run python -m coverage report +test-spec: + poetry run behave + fmt: - find ./examples ./aptos_sdk . -type f -name "*.py" | xargs poetry run autoflake -i -r --remove-all-unused-imports --remove-unused-variables --ignore-init-module-imports - poetry run isort aptos_sdk examples - poetry run black aptos_sdk examples + find ./examples ./aptos_sdk ./features . -type f -name "*.py" | xargs poetry run autoflake -i -r --remove-all-unused-imports --remove-unused-variables --ignore-init-module-imports + poetry run isort aptos_sdk examples features + poetry run black aptos_sdk examples features lint: - poetry run mypy aptos_sdk examples - poetry run flake8 aptos_sdk examples + poetry run mypy aptos_sdk examples features + poetry run flake8 aptos_sdk examples features examples: poetry run python -m examples.aptos_token diff --git a/aptos_sdk/bcs.py b/aptos_sdk/bcs.py index ba50e40..b626c61 100644 --- a/aptos_sdk/bcs.py +++ b/aptos_sdk/bcs.py @@ -129,7 +129,7 @@ def uleb128(self) -> int: break shift += 7 - if value > MAX_U128: + if value > MAX_U32: raise Exception("Unexpectedly large uleb128 value") return value diff --git a/features/account_address.feature b/features/account_address.feature new file mode 100644 index 0000000..fcd5bbd --- /dev/null +++ b/features/account_address.feature @@ -0,0 +1,68 @@ +Feature: Account Address +""" +AccountAddress is a 32-byte value that represents an address on chain. +""" + + Scenario Outline: Parse account address