Metadata-Version: 2.1
Name: wasmite
Version: 0.1.5
Summary: Wasmite: Webassembly is the future but now it has a testing toolchain
Home-page: https://github.com/yusuf8ahmed/Wasmite
Author: Yusuf Ahmed
Author-email: yusufahmed172@gmail.com
License: UNKNOWN
Keywords: wasmer,wasmite,wasp,wasm,debug,debugging,unit,unit testing,unit tests,unit testing wasm,unit tests wasm,debug wasm,debugging wasm
Platform: any
Classifier: Programming Language :: Python :: 3
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Operating System :: OS Independent
Classifier: Intended Audience :: Developers
Classifier: Topic :: Internet
Classifier: Topic :: Internet :: WWW/HTTP :: Browsers
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Middleware
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Server
Classifier: Topic :: Software Development :: Assemblers
Classifier: Topic :: Software Development :: Testing
Classifier: Topic :: Software Development :: Quality Assurance
Classifier: Topic :: System :: Monitoring
Requires-Python: !=3.9, !=2.*
Description-Content-Type: text/markdown
Requires-Dist: loguru
Requires-Dist: wasmer (>=1.0.0-alpha3)
Requires-Dist: wasmer-compiler-cranelift (>=1.0.0-alpha3)

<p align="center">
  <img src="images/logo.svg"/>
</p> 

### What is the Wasmite project
As WebAssembly is the future of the web. I decide to create Wasmite a python package for unit-testing your wasm or wat code. Wasmite is based on **[wasmer](https://wasmerio.github.io/wasmer-python/api/wasmer/)** and the python standard library package **[unittest](https://docs.python.org/3/library/unittest.html)**. Documentation for can be found here: [documentation for unittest](https://docs.python.org/3/library/unittest.html) and [documentation for wasmer](https://wasmerio.github.io/wasmer-python/api/wasmer/)

**This project was formerly an extension of my Rust/Python Web framework Wasp and some section of the code may refer to it's earlier name Native** 

Wasmite looks for tests in python files whose names start with test_\*.py and runs every test_\* function it discovers. The testing folder has more examples.

This project requires python 3 and doesn't support 3.9

### project goals:

- [x] import wasm or wat module successfully
- [x] access functions within module 
- [x] type checking of parameters and the result of functions
- [ ] allow WebAssembly to import and use 
    - Python functions
    - Global Instances
    - Memory Instances
- [ ] release to **PyPi** for public to use
- [ ] more complex examples in testing folder
- [ ] receive community on how to improve


Here is a simple example of :
```python
#in testing/test_wasm.py
import wasmite
from wasmite import types, result
from wasmite import I32, I64

# create a Test class the inherits wasmite.TestWasm
class Test(wasmite.TestWasm):
    # create a variable the hold all the module from a specific wasm file.
    exports = wasmite.wasm_module("test.wasm")
    # create any amount of function that test you functionality
    def test_add(self):
        # test the "add" function in test.wasm
        result = self.exports.add(1,2)
        self.assertEqual(result, 3) 

    def test_sub(self):
        # test the "sub" function in test.wasm
        result = self.exports.sub(2,2) # 2-2 = 0 == -1 => False
        self.assertEqual(result, -1)

    def test_sub_notequal(self):
        # test the "sub" function in test.wasm using assertNotEqual
        result = self.exports.sub(5,2) # 5-2 = 3 != -1 => True
        self.assertNotEqual(result, -1)

    def test_args_add(self):
        # check that the param types of the function "add" is I32, I32
        add_function = self.exports.add
        self.assertTypes(add_function, types(I32, I32))

    def test_result_add(self):
        # check that the return types of the function "add" is I32
        add_function = self.exports.add
        self.assertResult(add_function, result(I32))

if __name__ == "__main__":
    wasmite.main()
```
Then you can then run this test like so:
```bash
# make sure you are in /testing

$ python test_wasm.py

test_add (__main__.Test) ... ok
test_args_add (__main__.Test) ... ok
test_result_add (__main__.Test) ... ok
test_sub (__main__.Test) ... FAIL
test_sub_notequal (__main__.Test) ... ok

======================================================================
FAIL: test_sub (__main__.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_wasm.py", line 18, in test_sub
    self.assertEqual(result, -1)
AssertionError: 0 != -1

----------------------------------------------------------------------
Ran 5 tests in 0.001s

FAILED (failures=1)
```



