No description
Find a file
Benedikt Willi ae6fcbfab4 Add comprehensive test suite with pytest
- Add tests for URL parsing, cookies, HTML/CSS parsing
- Add tests for browser/tab management and history
- Add tests for layout and rendering components
- Configure pytest with coverage reporting
- Add test documentation and runner commands
- All 54 tests passing
2026-01-09 13:37:21 +01:00
.github/prompts Initial bowser project scaffold 2026-01-09 12:20:46 +01:00
assets Initial commit: Setup Bowser educational web browser 2026-01-09 13:31:48 +01:00
src Add comprehensive test suite with pytest 2026-01-09 13:37:21 +01:00
tests Add comprehensive test suite with pytest 2026-01-09 13:37:21 +01:00
.gitignore Add comprehensive test suite with pytest 2026-01-09 13:37:21 +01:00
main.py Initial commit: Setup Bowser educational web browser 2026-01-09 13:31:48 +01:00
pyproject.toml Add comprehensive test suite with pytest 2026-01-09 13:37:21 +01:00
README.md Add comprehensive test suite with pytest 2026-01-09 13:37:21 +01:00
uv.lock Initial commit: Setup Bowser educational web browser 2026-01-09 13:31:48 +01:00

Bowser — Educational Web Browser

A custom web browser built from scratch following the browser.engineering curriculum.

Status: Early scaffolding phase (M0)

Building

Prerequisites

  • Python 3.11+
  • GTK 4 development libraries (Debian: libgtk-4-dev libgtk-4-1)
  • Skia-Python (skia-python): pip install skia-python
  • PyGObject (PyGObject): pip install PyGObject

Setup

uv sync
uv run bowser

Testing

Run the test suite:

# Install dev dependencies
uv sync --extra dev

# Run all tests
uv run pytest

# Run with verbose output
uv run pytest -v

# Run with coverage report
uv run pytest --cov=src --cov-report=html

# Run specific test file
uv run pytest tests/test_browser.py

Development

# Format code
uv run black src tests

# Lint code
uv run ruff check src tests

# Type check
uv run mypy src

Project Structure

bowser/
├── src/
│   ├── network/          # URL parsing, HTTP, cookies
│   ├── parser/           # HTML & CSS parsers
│   ├── layout/           # Block/inline/embedded layout
│   ├── render/           # Paint commands, fonts, compositing
│   ├── script/           # JavaScript integration
│   ├── browser/          # Tab/frame/chrome orchestration
│   └── accessibility/    # A11y tree and screen reader
├── assets/               # Stylesheets, images
├── tests/                # Unit tests
├── pyproject.toml        # Dependencies & build config
└── main.py               # Entry point

Development Milestones

  • M0: Project scaffold
  • M1: Display "Hello World" in GTK window with manual URL fetch & paint
  • M2: Render plain HTML with text wrapping
  • M3: Parse and apply basic CSS
  • M4: Clickable links and navigation
  • M5: Form input and submission
  • M6: JavaScript execution (embed QuickJS)
  • M7: Event handling
  • M8: Images and iframes
  • M9: Animations and visual effects
  • M10: Accessibility and keyboard navigation

References