Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions .github/pages/template.html
Original file line number Diff line number Diff line change
Expand Up @@ -164,10 +164,14 @@
p.banner { display: block; margin: 0 auto 26px; max-width: 640px; max-inline-size: 100%; }
p.banner img { display: block; width: 100%; }

p.badges { margin: 1.5em 0 0; gap: 7px; }
/* line-height: 0 matters -- two of these badges are wrapped in links, and
an inline image inside an <a> carries line-box leading, which made those
flex items 37.5px tall against the bare images' 28px */
p.badges { margin: 1.5em 0 0; gap: 7px; line-height: 0; }
p.badges a { display: flex; flex: 0 0 auto; }
/* shields.io renders for-the-badge at 28px tall; pin it so every badge in
the row matches exactly, and keep flex out of their sizing */
p.badges img { height: 28px; width: auto; flex: 0 0 auto; }
p.badges img { display: block; height: 28px; width: auto; flex: 0 0 auto; }

/* screenshots get a terminal frame rather than a bare border */
p.shot {
Expand Down
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ python3 install.py # --cli-only, --dev, --prefix, --verify, --uninstal
# Pipe a single command (non-interactive; cli.py detects a non-tty stdin)
echo '/search "q2 plan"' | python3 -m glean_code

# Run the full test suite (1,108 tests, stdlib unittest — works with or without pytest)
# Run the full test suite (1,109 tests, stdlib unittest — works with or without pytest)
python3 -m pytest tests/
python3 -m unittest discover tests/

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ The full Glean Code REPL — slash commands, status bar, mock/live switching, se
| 🔐 **[SSO / OAuth](docs/SSO_OAUTH.md)** · **[Secure tokens](docs/SECURE_TOKENS.md)** | Browser sign-in, secure refs, the masking matrix |
| 🔌 **[MCP server](docs/MCP.md)** | Glean as native tools in Claude Code, Claude Desktop, Cursor |
| 🏛️ **[Architecture](docs/ARCHITECTURE.md)** · **[REST paths](docs/REST_PATHS.md)** | Module map, request flow, endpoints, how to add a command |
| ✅ **[Testing](docs/TESTING.md)** | Running the 1,108-test suite and what it covers |
| ✅ **[Testing](docs/TESTING.md)** | Running the 1,109-test suite and what it covers |
| 🛟 **[Support](SUPPORT.md)** · **[Changelog](CHANGELOG.md)** | How to report a bug · release history |

> [!NOTE]
Expand Down
4 changes: 2 additions & 2 deletions docs/TESTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ files, and they outrank the `Glean Code.app` launcher in `Cmd+Space`:
export PYTHONPYCACHEPREFIX="$HOME/.cache/python"
```

1,108 tests covering the client and every mock response, commands and dispatch, config, UI, auth, completion, help docs, the mock corpus, indexing-walk, scaffold, the installer, the MCP server, the flow mapper, the Pages site builder, and Glean Personal (text extraction, the index, the content graph, ranking explanations, local mode, and the local MCP tools).
1,109 tests covering the client and every mock response, commands and dispatch, config, UI, auth, completion, help docs, the mock corpus, indexing-walk, scaffold, the installer, the MCP server, the flow mapper, the Pages site builder, and Glean Personal (text extraction, the index, the content graph, ranking explanations, local mode, and the local MCP tools).

## Development notes

Notes on the test suite added during development of glean-code-cli.

All 1,108 tests pass. Here's what was added across the development passes:
All 1,109 tests pass. Here's what was added across the development passes:

`tests/test_commands_extended.py` (155 new tests) — covers all previously untested commands:

Expand Down
20 changes: 17 additions & 3 deletions tests/test_pages_build.py
Original file line number Diff line number Diff line change
Expand Up @@ -290,10 +290,16 @@ class TestTemplate(unittest.TestCase):
def setUp(self):
self.css = (REPO_ROOT / ".github" / "pages" / "template.html").read_text()

def _rule(self, selector):
body = self.css[self.css.index(selector) + len(selector):]
return body[:body.index("}")]

def test_badge_height_is_pinned(self):
# Without an explicit height the flex line stretched the badges and the
# widest one, clamped by the space left, stayed shorter than the rest.
self.assertIn("p.badges img { height: 28px; width: auto; flex: 0 0 auto; }", self.css)
rule = self._rule("p.badges img {")
for decl in ("display: block", "height: 28px", "width: auto", "flex: 0 0 auto"):
self.assertIn(decl, rule)

def test_tagline_is_set_in_the_mono_face(self):
rule = self.css[self.css.index('[align="center"] .banner + p {'):]
Expand All @@ -308,9 +314,17 @@ def test_headings_and_table_headers_use_the_mono_face(self):
rule = self.css[self.css.index(selector):]
self.assertIn("font-family: var(--mono)", rule[:rule.index("}")], selector)

def test_badge_links_are_not_leaded(self):
# Two badges are wrapped in links. An inline image inside an <a> carries
# line-box leading, which made those flex items 37.5px tall against the
# bare images' 28px -- the row's cross size, and the misalignment.
self.assertIn("line-height: 0", self._rule("p.badges {"))
anchor = self._rule("p.badges a {")
self.assertIn("display: flex", anchor)
self.assertIn("flex: 0 0 auto", anchor)

def test_image_rows_do_not_stretch_their_items(self):
row = self.css[self.css.index("p.imgrow {"):]
self.assertIn("align-items: center", row[:row.index("}")])
self.assertIn("align-items: center", self._rule("p.imgrow {"))


class TestIcons(unittest.TestCase):
Expand Down
Loading