FIX: Add infrastructure for python tests (#91)
Also integrated with CI and runs tests in documentation
This commit is contained in:
committed by
GitHub
parent
11df4a55c7
commit
bf9a1ed9f4
14
Makefile
14
Makefile
@@ -1,11 +1,14 @@
|
|||||||
|
.PHONY: lint
|
||||||
lint:
|
lint:
|
||||||
cargo fmt -- --check
|
cargo fmt -- --check
|
||||||
cargo clippy --all-targets --all-features
|
cargo clippy --all-targets --all-features
|
||||||
cd webapp && npm install && npm run check
|
cd webapp && npm install && npm run check
|
||||||
|
|
||||||
|
.PHONY: format
|
||||||
format:
|
format:
|
||||||
cargo fmt
|
cargo fmt
|
||||||
|
|
||||||
|
.PHONY: tests
|
||||||
tests: lint
|
tests: lint
|
||||||
cargo test
|
cargo test
|
||||||
./target/debug/documentation
|
./target/debug/documentation
|
||||||
@@ -15,31 +18,36 @@ tests: lint
|
|||||||
# and a second one for the vitest.
|
# and a second one for the vitest.
|
||||||
cd bindings/wasm/ && wasm-pack build --target nodejs && node tests/test.mjs && make
|
cd bindings/wasm/ && wasm-pack build --target nodejs && node tests/test.mjs && make
|
||||||
cd webapp && npm run test
|
cd webapp && npm run test
|
||||||
|
cd bindings/python && ./run_tests.sh && ./run_examples.sh
|
||||||
|
|
||||||
|
.PHONY: remove-artifacts
|
||||||
remove-artifacts:
|
remove-artifacts:
|
||||||
rm -f xlsx/hello-calc.xlsx
|
rm -f xlsx/hello-calc.xlsx
|
||||||
rm -f xlsx/hello-styles.xlsx
|
rm -f xlsx/hello-styles.xlsx
|
||||||
rm -f xlsx/widths-and-heights.xlsx
|
rm -f xlsx/widths-and-heights.xlsx
|
||||||
rm -f functions.md
|
rm -f functions.md
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
clean: remove-artifacts
|
clean: remove-artifacts
|
||||||
cargo clean
|
cargo clean
|
||||||
rm -r -f base/target
|
rm -r -f base/target
|
||||||
rm -r -f xlsx/target
|
rm -r -f xlsx/target
|
||||||
|
rm -r -f bindings/python/target
|
||||||
|
rm -r -f bindings/wasm/targets
|
||||||
rm -f cargo-test-*
|
rm -f cargo-test-*
|
||||||
rm -f base/cargo-test-*
|
rm -f base/cargo-test-*
|
||||||
rm -f xlsx/cargo-test-*
|
rm -f xlsx/cargo-test-*
|
||||||
|
|
||||||
|
.PHONY: coverage
|
||||||
coverage:
|
coverage:
|
||||||
CARGO_INCREMENTAL=0 RUSTFLAGS='-C instrument-coverage' LLVM_PROFILE_FILE='cargo-test-%p-%m.profraw' cargo test
|
CARGO_INCREMENTAL=0 RUSTFLAGS='-C instrument-coverage' LLVM_PROFILE_FILE='cargo-test-%p-%m.profraw' cargo test
|
||||||
grcov . --binary-path ./target/debug/deps/ -s . -t html --branch --ignore-not-existing --ignore '../*' --ignore "/*" -o target/coverage/html
|
grcov . --binary-path ./target/debug/deps/ -s . -t html --branch --ignore-not-existing --ignore '../*' --ignore "/*" -o target/coverage/html
|
||||||
|
|
||||||
|
.PHONY: update-docs
|
||||||
update-docs:
|
update-docs:
|
||||||
cargo build
|
cargo build
|
||||||
./target/debug/documentation -o wiki/functions.md
|
./target/debug/documentation -o wiki/functions.md
|
||||||
|
|
||||||
|
.PHONY: docs
|
||||||
docs:
|
docs:
|
||||||
cargo doc --no-deps
|
cargo doc --no-deps
|
||||||
|
|
||||||
.PHONY: lint format tests docs coverage all
|
|
||||||
@@ -132,11 +132,11 @@ fn test_get_style_for_cell() {
|
|||||||
|
|
||||||
// Case2 : Invalid Row
|
// Case2 : Invalid Row
|
||||||
let update_result = model.get_style_for_cell(0, 0, 2);
|
let update_result = model.get_style_for_cell(0, 0, 2);
|
||||||
assert_eq!(update_result.is_ok(), true);
|
assert!(update_result.is_ok());
|
||||||
|
|
||||||
// Case3 : Invalid Column
|
// Case3 : Invalid Column
|
||||||
let update_result = model.get_style_for_cell(0, 1, 1048579);
|
let update_result = model.get_style_for_cell(0, 1, 1048579);
|
||||||
assert_eq!(update_result.is_ok(), true);
|
assert!(update_result.is_ok());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
3
bindings/python/.gitignore
vendored
3
bindings/python/.gitignore
vendored
@@ -1,2 +1,5 @@
|
|||||||
target/*
|
target/*
|
||||||
venv/*
|
venv/*
|
||||||
|
sphinx-venv/*
|
||||||
|
html/*
|
||||||
|
tests/__pycache*
|
||||||
|
|||||||
8
bindings/python/docs/examples/simple.py
Normal file
8
bindings/python/docs/examples/simple.py
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import ironcalc as ic
|
||||||
|
|
||||||
|
model = ic.create("model", "en", "UTC")
|
||||||
|
|
||||||
|
model.set_user_input(0, 1, 1, "=21*2")
|
||||||
|
model.evaluate()
|
||||||
|
|
||||||
|
assert model.get_formatted_cell_value(0, 1, 1), 42
|
||||||
@@ -1,7 +1,13 @@
|
|||||||
Welcome to ProjectName's documentation!
|
IronCalc: The democratization of spreadsheets
|
||||||
======================================
|
=============================================
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
:caption: Contents:
|
:caption: Contents:
|
||||||
|
|
||||||
|
IronCalc is a spreadsheet engine that allows you to create, modify and safe spreadsheets.
|
||||||
|
|
||||||
|
A simple example that creates a model, sets a formula, evaluates it and gets the result back:
|
||||||
|
|
||||||
|
.. literalinclude:: examples/simple.py
|
||||||
|
:language: python
|
||||||
29
bindings/python/run_examples.sh
Executable file
29
bindings/python/run_examples.sh
Executable file
@@ -0,0 +1,29 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Define the directory containing the Python files
|
||||||
|
EXAMPLES_DIR="docs/examples"
|
||||||
|
|
||||||
|
# Check if the directory exists
|
||||||
|
if [ ! -d "$EXAMPLES_DIR" ]; then
|
||||||
|
echo "Directory $EXAMPLES_DIR does not exist."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Iterate over all Python files in the examples directory
|
||||||
|
for file in "$EXAMPLES_DIR"/*.py; do
|
||||||
|
# Check if there are any Python files
|
||||||
|
if [ -f "$file" ]; then
|
||||||
|
echo "Running $file..."
|
||||||
|
python "$file"
|
||||||
|
|
||||||
|
# Check if the script ran successfully
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Error running $file"
|
||||||
|
else
|
||||||
|
echo "$file ran successfully"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "No Python files found in $EXAMPLES_DIR"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
9
bindings/python/run_tests.sh
Executable file
9
bindings/python/run_tests.sh
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
python -m venv venv
|
||||||
|
source venv/bin/activate
|
||||||
|
# not sure why this is needed
|
||||||
|
pip install patchelf
|
||||||
|
pip install maturin
|
||||||
|
pip install pytest
|
||||||
|
maturin develop
|
||||||
|
pytest tests/
|
||||||
8
bindings/python/tests/test_create.py
Normal file
8
bindings/python/tests/test_create.py
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import ironcalc as ic
|
||||||
|
|
||||||
|
def test_simple():
|
||||||
|
model = ic.create("model", "en", "UTC")
|
||||||
|
model.set_user_input(0, 1, 1, "=1+2")
|
||||||
|
model.evaluate()
|
||||||
|
|
||||||
|
assert model.get_formatted_cell_value(0, 1, 1) == "3"
|
||||||
Reference in New Issue
Block a user