|
| 1 | +# CLAUDE.md |
| 2 | + |
| 3 | +Este archivo proporciona orientación a Claude Code (claude.ai/code) al trabajar con el código en este repositorio. |
| 4 | + |
| 5 | +## Comandos |
| 6 | + |
| 7 | +```bash |
| 8 | +# Instalar dependencias |
| 9 | +pip install -r requirements.txt |
| 10 | + |
| 11 | +# Ejecutar todas las pruebas (sin interfaz gráfica, funciona en CI) |
| 12 | +pytest -v |
| 13 | + |
| 14 | +# Ejecutar un archivo de pruebas específico |
| 15 | +pytest tests/test_calculator.py -v |
| 16 | +pytest tests/test_gui.py -v |
| 17 | + |
| 18 | +# Ejecutar una prueba específica por palabra clave |
| 19 | +pytest tests/test_gui.py -k "parenthesis" -v |
| 20 | + |
| 21 | +# Ejecutar con cobertura |
| 22 | +pytest --cov=src -v |
| 23 | + |
| 24 | +# Lanzar la aplicación con GUI |
| 25 | +python src/gui.py |
| 26 | + |
| 27 | +# Lanzar la aplicación por CLI |
| 28 | +python src/cli.py |
| 29 | +``` |
| 30 | + |
| 31 | +## Arquitectura |
| 32 | + |
| 33 | +Calculadora Python con tres capas: |
| 34 | + |
| 35 | +**Core (`src/calculator.py`):** Funciones puras sin dependencias externas — `add`, `subtract`, `multiply`, `divide`, `power`, `valor_maximo`, `valor_minimo`, `abs_value`. Lanza `ZeroDivisionError` y `ValueError` para entradas inválidas. |
| 36 | + |
| 37 | +**GUI (`src/gui.py`):** Clase única `CalculatorGUI` con tkinter. Funciona en dos modos controlados por `use_expression_mode`: |
| 38 | +- **Modo normal:** Cálculos de dos operandos usando el estado `first_number` + `operator` + `current_value` |
| 39 | +- **Modo expresión:** Se activa al usar paréntesis; construye una cadena `expression` que se evalúa mediante parsing con regex y las funciones de `calculator.py` |
| 40 | + |
| 41 | +**CLI (`src/cli.py`):** Bucle interactivo que parsea entradas como `"5 + 3"` o `"5 abs"`. |
| 42 | + |
| 43 | +**Tests (`tests/`):** `conftest.py` provee mocks `DummyRoot`, `DummyEntry`, `DummyButton`, `DummyLabel` que reemplazan tkinter automáticamente (fixture autouse), permitiendo pruebas de GUI sin pantalla en CI. |
| 44 | + |
| 45 | +## Ramas y Convención de Commits |
| 46 | + |
| 47 | +Nomenclatura de ramas: `feature/*`, `bugfix/*`, `hotfix/*`, `release/*` a partir de `dev`; los PRs se fusionan a `dev` y luego a `main`. |
| 48 | + |
| 49 | +Los commits siguen [Conventional Commits](https://www.conventionalcommits.org/): `feat:`, `fix:`, `test:`, `docs:`, `refactor:`, `chore:`. |
| 50 | + |
| 51 | +El CI ejecuta pytest en push/PR a `main` y `dev` mediante `.github/workflows/ci.yml`. |
0 commit comments