FIX: Add infrastructure for python tests (#91)

Also integrated with CI and runs tests in documentation
This commit is contained in:
Nicolás Hatcher Andrés
2024-09-21 15:46:32 +02:00
committed by GitHub
parent 11df4a55c7
commit bf9a1ed9f4
8 changed files with 79 additions and 8 deletions

View File

@@ -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

View File

@@ -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]

View File

@@ -1,2 +1,5 @@
target/* target/*
venv/* venv/*
sphinx-venv/*
html/*
tests/__pycache*

View 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

View File

@@ -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
View 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
View 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/

View 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"