Skip to content

Commit 5f312bb

Browse files
committed
Test that a 7-column grid's pinned cells fill their columns
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01F3B1XCZZ7QGvZLUGgSG5H4
1 parent 71351c9 commit 5f312bb

2 files changed

Lines changed: 61 additions & 0 deletions

File tree

‎test/fixtures/day_strip_grid.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"0SfOJNhvYxUvAF6ovb6w": {"variables": {"data": "${= map(range(0, 6), i => formatDate(addDays(formatDate(now(sunDays[0].offset), 'yyyy-MM-dd'), i), 'yyyy-MM-dd'))}"}, "id": "0SfOJNhvYxUvAF6ovb6w", "name": "Day strip", "horizontalFit": "expanded", "verticalFit": "shrinkWrap", "basicBoxLocal": [40, 138, 1104, 87], "margin": [0, 20, 0, 0], "children": ["0SfOJNhv3Sjvz06eUrBb"], "allowedTypes": [], "deniedTypes": ["gridView"], "isScrollable": false, "useFlutterListView": false, "type": "gridView", "properties": {"gridDelegate": {"crossAxisSpacing": 7, "mainAxisExtent": 87, "crossAxisCount": 7, "type": "fixedCrossAxisCount"}}}, "0SfOJNhv3Sjvz06eUrBb": {"id": "0SfOJNhv3Sjvz06eUrBb", "name": "Day cell holder", "horizontalFit": "expanded", "verticalFit": "expanded", "reactions": [{"name": "Tap", "action": {"type": "setVariable", "variable": {"id": "0SfNPIrIeU9ATTBR1dsp", "name": "selectedDay"}, "newValue": "${item}"}, "trigger": {"type": "click"}, "id": "0SfOJNiHYwCnjABRyvma"}], "basicBoxLocal": [0, 0, 151.714, 87], "children": ["0SfOJNhuBhTxoaJNoRE9", "0SfOJNhvCIoovS8unN6r"], "type": "frame"}, "0SfOJNhuBhTxoaJNoRE9": {"variables": {"visible": "${= selectedDay == item}"}, "id": "0SfOJNhuBhTxoaJNoRE9", "name": "Rectangle", "edgePins": {"left": 3, "top": 3, "right": 0, "bottom": 0}, "positioningMode": "pin", "basicBoxLocal": [3, 3, 148.714, 84], "fills": [{"id": "p288", "type": "solid", "color": "#D9573B"}], "cornerRadius": [4, true, "circular"], "type": "rectangle"}, "0SfOJNhvCIoovS8unN6r": {"variables": {"fill-p286": "${= selectedDay == item ? '#1F2B2E' : '#FBF7EE'}"}, "id": "0SfOJNhvCIoovS8unN6r", "name": "Day cell", "edgePins": {"left": 0, "top": 0, "right": 3, "bottom": 3}, "positioningMode": "pin", "basicBoxLocal": [0, 0, 148.714, 84], "padding": [0, 10], "children": ["0SfOJNhulkVxCHU9Y2eE", "0SfOJNhuD2OGWfkLrY_o", "0SfOJNhv6HHFBqroJZz3", "0SfOJNhvYnpLzJFoVBdp"], "fills": [{"id": "p286", "type": "solid", "color": "#FBF7EE"}], "strokes": [{"id": "p287", "type": "solid", "color": "#1F2B2E"}], "strokeWeight": 1.5, "cornerRadius": [4, true, "circular"], "rowColumnType": "column", "mainAxisAlignment": "start", "type": "rowColumn"}, "0SfOJNhulkVxCHU9Y2eE": {"variables": {"textColor": "${= selectedDay == item ? '#9CC5B5' : '#4A5558'}"}, "id": "0SfOJNhulkVxCHU9Y2eE", "name": "${= item == formatDate(now(sunDays[0].of\u2026", "horizontalFit": "shrinkWrap", "verticalFit": "shrinkWrap", "characters": "${= item == formatDate(now(sunDays[0].offset), 'yyyy-MM-dd') ? 'TODAY' : upper(formatDate(item, 'EEE'))}", "textMixedProps": [{"fills": [{"id": "p281", "type": "solid", "color": "#1F2B2E"}], "fontSize": 10, "letterSpacing": {"value": 1.2}, "fontName": {"family": "IBM Plex Mono", "style": "Medium", "weight": "w500"}, "lineHeight": {"value": 14}, "start": 0, "end": 104}], "basicBoxLocal": [56.357, 10, 36, 14], "type": "text"}, "0SfOJNhuD2OGWfkLrY_o": {"variables": {"textColor": "${= selectedDay == item ? '#F3ECDD' : '#1F2B2E'}"}, "id": "0SfOJNhuD2OGWfkLrY_o", "name": "${= day(item)}", "horizontalFit": "shrinkWrap", "verticalFit": "shrinkWrap", "characters": "${= day(item)}", "textMixedProps": [{"fills": [{"id": "p282", "type": "solid", "color": "#1F2B2E"}], "fontSize": 22, "letterSpacing": {"value": -0.2}, "fontName": {"family": "Fraunces", "style": "SemiBold", "weight": "w600"}, "lineHeight": {"value": 28}, "start": 0, "end": 14}], "basicBoxLocal": [61.544, 26, 25.626, 28], "margin": [0, 2, 0, 0], "type": "text"}, "0SfOJNhv6HHFBqroJZz3": {"variables": {"visible": "${= find(days, d => d.date == item).lowest != null}"}, "id": "0SfOJNhv6HHFBqroJZz3", "name": "Row Column", "horizontalFit": "shrinkWrap", "basicBoxLocal": [64.457, 56, 19.8, 16], "margin": [0, 2, 0, 0], "children": ["0SfOJNhviuRCJI6AxerP", "0SfOJNhvse2Ai7eqH4Q0"], "rowColumnType": "row", "type": "rowColumn"}, "0SfOJNhviuRCJI6AxerP": {"variables": {"visible": "${= length(find(days, d => d.date == item).windows) > 0}"}, "id": "0SfOJNhviuRCJI6AxerP", "name": "Row Column", "basicBoxLocal": [-5.5, 4.5, 7, 7], "margin": [0, 0, 4, 0], "fills": [{"id": "p283", "type": "solid", "color": "#D9573B"}], "cornerRadius": [4, true, "circular"], "rowColumnType": "column", "mainAxisAlignment": "start", "crossAxisAlignment": "start", "type": "rowColumn"}, "0SfOJNhvse2Ai7eqH4Q0": {"variables": {"textColor": "${= selectedDay == item ? '#F3ECDD' : '#4A5558'}"}, "id": "0SfOJNhvse2Ai7eqH4Q0", "name": "${= (storage.units == 'm' ? replace(fixe\u2026", "horizontalFit": "shrinkWrap", "verticalFit": "shrinkWrap", "characters": "${= (storage.units == 'm' ? replace(fixed((find(days, d => d.date == item).lowest.v) * 0.3048, 2), '-0.00', '0.00') : replace(fixed(find(days, d => d.date == item).lowest.v, 1), '-0.0', '0.0'))}", "textMixedProps": [{"fills": [{"id": "p284", "type": "solid", "color": "#1F2B2E"}], "fontSize": 11, "fontName": {"family": "IBM Plex Mono", "style": "Medium", "weight": "w500"}, "lineHeight": {"value": 18}, "start": 0, "end": 194}], "basicBoxLocal": [0, -1, 19.8, 18], "type": "text"}, "0SfOJNhvYnpLzJFoVBdp": {"variables": {"visible": "${= find(days, d => d.date == item).lowest == null}"}, "id": "0SfOJNhvYnpLzJFoVBdp", "name": "Rectangle", "basicBoxLocal": [59.357, 60, 30, 8], "margin": [0, 6, 0, 2], "fills": [{"id": "p285", "type": "solid", "color": "#E9DFCB"}], "cornerRadius": [2, true, "circular"], "type": "rectangle"}}

‎test/grid_cell_stretch_test.dart‎

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import 'dart:convert';
2+
import 'dart:io';
3+
4+
import 'package:codelessly_api/codelessly_api.dart';
5+
import 'package:codelessly_sdk/codelessly_sdk.dart';
6+
import 'package:flutter/material.dart';
7+
import 'package:flutter_test/flutter_test.dart';
8+
9+
import 'responsive_variance_test.dart' show pumpPage;
10+
11+
void main() {
12+
testWidgets('day strip grid cells fill their columns', (tester) async {
13+
final Map raw = jsonDecode(
14+
File('test/fixtures/day_strip_grid.json').readAsStringSync(),
15+
);
16+
final nodes = <String, BaseNode>{
17+
for (final e in raw.entries)
18+
e.key as String: NodeJsonConverter().fromJson(e.value as Map)!,
19+
};
20+
for (final node in nodes.values) {
21+
for (final child in node.childrenOrEmpty) {
22+
nodes[child]!.parentID = node.id;
23+
}
24+
}
25+
const gridId = '0SfOJNhvYxUvAF6ovb6w';
26+
nodes['canvas'] = CanvasNode(
27+
id: 'canvas',
28+
name: 'canvas',
29+
basicBoxLocal: NodeBox(0, 0, 1104, 400),
30+
children: ['body'],
31+
properties: CanvasProperties(
32+
bodyId: 'body',
33+
safeArea: const SafeAreaModel.all(false),
34+
),
35+
)..parentID = kRootNode;
36+
nodes['body'] = AutoPlaceholderNode(
37+
id: 'body',
38+
name: 'body',
39+
basicBoxLocal: NodeBox(0, 0, 1104, 400),
40+
children: [gridId],
41+
)..parentID = 'canvas';
42+
nodes[gridId]!
43+
..parentID = 'body'
44+
..variables.clear();
45+
// Seven items without a data source.
46+
final grid = nodes[gridId]! as GridViewNode;
47+
grid.properties.itemCount = 7;
48+
nodes['0SfOJNhuBhTxoaJNoRE9']!.variables.clear();
49+
await pumpPage(tester, nodes, screen: const Size(1104, 400));
50+
expect(tester.takeException(), isNull);
51+
// The coral block behind each cell is pinned 3 px in on the top left.
52+
final block = nodes['0SfOJNhuBhTxoaJNoRE9']!;
53+
final blocks = find.byKey(
54+
ValueKey('Rectangle Transformer of ${block.debugLabel}'),
55+
);
56+
expect(blocks, findsWidgets);
57+
// (1104 - 6 * 7) / 7 = 151.7 per column, less the 3 px offset.
58+
expect(tester.getSize(blocks.first).width, closeTo(148.7, 1));
59+
});
60+
}

0 commit comments

Comments
 (0)