Description
make integration-test command fails immediately after the first passing test due to two issues in the test runner script.
db.ez test fails on second run. But success on first run.
Environment
- OS: Linux (Ubuntu/WSL)
- Branch: SchoolyB/main
Steps to Reproduce
git clone https://github.com/SchoolyB/EZ.git
cd EZ
make install
make integration-test
### Actual Result
```bash
sullung@DESKTOP-1MJVMNK:~/Development/EZ$ make integration-test
Building EZ...
go build -ldflags "-X main.Version=9254fcd -X main.BuildTime=2026-01-10_10:41:38" -o ez ./cmd/ez
Build complete! Binary: ./ez
./integration-tests/run_tests.sh
========================================
EZ Integration Test Suite
========================================
Running PASS tests...
----------------------------------------
core/arrays... PASS
make: *** [Makefile:61: integration-test] Error
sullung@DESKTOP-1MJVMNK:~/Development/EZ$ ./ez integration-tests/pass/stdlib/db.ez
warning[W2009]: accessing member 'message' on error type which may be nil - consider checking for nil first
--> integration-tests/pass/stdlib/db.ez:193:18
|
193 | println("Failed: ${save_err.message}")
| ^ accessing member on potentially nil value
|
summary: generated 1 warning
=== @db Standard Library Test ===
-- Opening --
[PASS] db.open(string)
-- Setting --
[PASS] db.set(database, string, string)
-- Getting --
[PASS] db.get(database, string)
[PASS] db.get(database, string)
-- db.has --
[PASS] db.has(database, string)
[PASS] db.has(database, string)
-- db.keys --
[PASS] db.keys(database)
-- db.prefix --
[PASS] db.prefix(database,string)
-- db.count --
[PASS] db.count(database)
-- db.delete --
[PASS] db.delete(database, string)
[PASS] db.delete(database, string)
-- db.save --
[PASS] db.save(database)
-- db.exists --
[PASS] db.exists(string) returns false for missing file
[PASS] db.exists(string) returns true for existing file
-- db.update_key_name --
[PASS] db.update_key_name() returns true
[PASS] db.update_key_name() old key removed
[PASS] db.update_key_name() new key has value
[PASS] db.update_key_name() returns false for missing key
-- db.sort --
[PASS] db.sort(db.ALPHA)
[PASS] db.sort(db.ALPHA_DESC)
[PASS] db.sort(db.VALUE_ALPHA)
[PASS] db.sort(db.KEY_LEN)
[PASS] db.sort(db.VALUE_LEN)
[PASS] db.sort(db.NUMERIC)
[PASS] db.sort(db.NUMERIC_DESC)
-- db.close --
[PASS] db.close(database)
=== Summary ===
Passed: 26
Failed: 0
ALL TESTS PASSED
sullung@DESKTOP-1MJVMNK:~/Development/EZ$ ./ez integration-tests/pass/stdlib/db.ez
warning[W2009]: accessing member 'message' on error type which may be nil - consider checking for nil first
--> integration-tests/pass/stdlib/db.ez:193:18
|
193 | println("Failed: ${save_err.message}")
| ^ accessing member on potentially nil value
|
summary: generated 1 warning
=== @db Standard Library Test ===
-- Opening --
[PASS] db.open(string)
-- Setting --
[PASS] db.set(database, string, string)
-- Getting --
[PASS] db.get(database, string)
[PASS] db.get(database, string)
-- db.has --
[PASS] db.has(database, string)
[PASS] db.has(database, string)
-- db.keys --
[FAIL] db.keys(database): unknown key found in database
-- db.prefix --
[PASS] db.prefix(database,string)
-- db.count --
[PASS] db.count(database)
-- db.delete --
[PASS] db.delete(database, string)
[PASS] db.delete(database, string)
-- db.save --
[PASS] db.save(database)
-- db.exists --
[PASS] db.exists(string) returns false for missing file
[PASS] db.exists(string) returns true for existing file
-- db.update_key_name --
[PASS] db.update_key_name() returns true
[PASS] db.update_key_name() old key removed
[PASS] db.update_key_name() new key has value
[PASS] db.update_key_name() returns false for missing key
-- db.sort --
[PASS] db.sort(db.ALPHA)
[PASS] db.sort(db.ALPHA_DESC)
[PASS] db.sort(db.VALUE_ALPHA)
[PASS] db.sort(db.KEY_LEN)
[PASS] db.sort(db.VALUE_LEN)
[PASS] db.sort(db.NUMERIC)
[PASS] db.sort(db.NUMERIC_DESC)
-- db.close --
[PASS] db.close(database)
=== Summary ===
Passed: 25
Failed: 1
SOME TESTS FAILED
Root Cause
Post-increment operation
In run_tests.sh, the script uses set -e (exit on error) combined with post-increment ((PASS_COUNT++)).
When PASS_COUNT=0, the expression ((PASS_COUNT++)), which bash treats as false (exit code 1), causing immediate script termination.
Leftover .ezdb files
The db.ez test creates database files that persist between runs, causing subsequent test runs to fail with "unknown key found in database".
Proposal
- Change post-increment to pre-increment ->
((++PASS_COUNT)) and ((++FAIL_COUNT))
- Add cleanup at the start of the script like,
rm -f "$PROJECT_ROOT"/*.ezdb
Description
make integration-testcommand fails immediately after the first passing test due to two issues in the test runner script.db.eztest fails on second run. But success on first run.Environment
Steps to Reproduce
Root Cause
Post-increment operation
In run_tests.sh, the script uses set -e (exit on error) combined with post-increment ((PASS_COUNT++)).
When PASS_COUNT=0, the expression ((PASS_COUNT++)), which bash treats as false (exit code 1), causing immediate script termination.
Leftover .ezdb files
The db.ez test creates database files that persist between runs, causing subsequent test runs to fail with "unknown key found in database".
Proposal
((++PASS_COUNT))and((++FAIL_COUNT))rm -f "$PROJECT_ROOT"/*.ezdb