The Garage SDKs, in the open
garage_auth, garage_entitlements, garage_iap and garage_ui, moved out of Garage-Services and Metro-Map-Maker into one public repo. MIT, one readme, docs under docs/. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013F4NWNvYcdeSgqbWMT1VQ7
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
import "dart:ui" show Color;
|
||||
|
||||
import "package:flutter_test/flutter_test.dart";
|
||||
import "package:garage_ui/theme/theme_data.dart";
|
||||
|
||||
// CHARACTERISATION BASELINE — do not "fix" these numbers.
|
||||
//
|
||||
// This locks the geometry Arcs & Angles renders at today, ahead of the density
|
||||
// API being reshaped. The API is expected to change; the numbers are not. A
|
||||
// failure here means the refactor moved something on screen, which is the one
|
||||
// outcome that isn't allowed.
|
||||
//
|
||||
// Captured 28 Aug 2026 from Density() and Density.normal().
|
||||
void main() {
|
||||
group("compact", () {
|
||||
const d = Density();
|
||||
test("type", () {
|
||||
expect(d.fontSize, 10.0);
|
||||
expect(d.lineHeight, 1.1);
|
||||
expect(d.lineBox, 11.0);
|
||||
// level with the font, not the line box - an icon sized to the line box
|
||||
// reads heavier than the label beside it
|
||||
expect(d.iconSize, 10.0);
|
||||
});
|
||||
test("text ladder", () {
|
||||
expect(d.textXs, 11.0);
|
||||
expect(d.textSm, 14.0);
|
||||
expect(d.textLg, 18.0);
|
||||
});
|
||||
test("control geometry", () {
|
||||
expect(d.controlHeight, 23.0);
|
||||
expect(d.controlPaddingY, 6.0);
|
||||
expect(d.buttonPaddingX, 10.0);
|
||||
expect(d.controlGap, 4.0);
|
||||
expect(d.controlBorderWidth, 1.0);
|
||||
expect(d.buttonPadding.horizontal, 20.0);
|
||||
expect(d.buttonPadding.vertical, 12.0);
|
||||
expect(d.borderedControlPadding.horizontal, 18.0);
|
||||
expect(d.borderedControlPadding.vertical, 10.0);
|
||||
});
|
||||
test("rows", () {
|
||||
expect(d.menuRowHeight, 20.0);
|
||||
expect(d.popupRowHeight, 20.0);
|
||||
expect(d.popupMaxHeight, 240.0);
|
||||
expect(d.explorerRowHeight, 22.0);
|
||||
expect(d.explorerRowPaddingY, 5.5);
|
||||
expect(d.explorerRowBasePadding, 4.0);
|
||||
expect(d.explorerRowEndPadding, 10.0);
|
||||
expect(d.listRowIndent, 6.0);
|
||||
});
|
||||
test("containers and gaps", () {
|
||||
expect(d.containerGap, 8.0);
|
||||
expect(d.containerPadding, 16.0);
|
||||
expect([d.gapXxs, d.gapXs, d.gapSm, d.gapMd, d.gapLg, d.gapXl, d.gapXxl],
|
||||
[2.0, 4.0, 6.0, 8.0, 12.0, 16.0, 24.0]);
|
||||
});
|
||||
});
|
||||
|
||||
group("normal", () {
|
||||
const d = Density.normal();
|
||||
test("type", () {
|
||||
expect(d.fontSize, 10.0);
|
||||
expect(d.lineBox, 11.0);
|
||||
});
|
||||
test("text ladder", () {
|
||||
expect(d.textXs, 11.0);
|
||||
expect(d.textSm, 14.0);
|
||||
expect(d.textLg, 18.0);
|
||||
});
|
||||
test("control geometry", () {
|
||||
expect(d.controlHeight, 27.0);
|
||||
expect(d.controlPaddingY, 8.0);
|
||||
expect(d.buttonPaddingX, 12.0);
|
||||
expect(d.controlGap, 5.0);
|
||||
});
|
||||
test("rows", () {
|
||||
expect(d.menuRowHeight, 26.0);
|
||||
expect(d.popupRowHeight, 26.0);
|
||||
expect(d.explorerRowHeight, 30.0);
|
||||
expect(d.explorerRowBasePadding, 8.0);
|
||||
expect(d.explorerRowEndPadding, 14.0);
|
||||
expect(d.listRowIndent, 12.0);
|
||||
});
|
||||
test("containers and gaps", () {
|
||||
expect(d.containerGap, 10.0);
|
||||
expect(d.containerPadding, 20.0);
|
||||
expect([d.gapXxs, d.gapXs, d.gapSm, d.gapMd, d.gapLg, d.gapXl, d.gapXxl],
|
||||
[3.0, 5.0, 8.0, 10.0, 15.0, 20.0, 30.0]);
|
||||
});
|
||||
});
|
||||
|
||||
test("icon tiers at scaling 1.0", () {
|
||||
final t = IconThemeTokens.forDensity(const Density(), 1.0, const Color(0));
|
||||
expect(t.small.size, 10.0);
|
||||
expect(t.medium.size, 20.0);
|
||||
expect(t.large.size, 24.0);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user