@@ -50,11 +50,12 @@ func TestBuildToolbarTree_Geometry(t *testing.T) {
5050 SettingsBg : color.RGBA {230 , 234 , 239 , 255 }, SettingsIcon : color.RGBA {1 , 1 , 1 , 255 }, SettingsHole : color.RGBA {2 , 2 , 2 , 255 },
5151 }
5252 m := fixedMeasurer {charW : 10 }
53- tt := buildToolbarTree (ToolbarState {ChineseMode : true , ModeLabel : "拼" }, rtv , 1.0 )
53+ geom := resolveToolbarGeom (nil , 1.0 )
54+ tt := buildToolbarTree (ToolbarState {ChineseMode : true , ModeLabel : "拼" }, rtv , geom )
5455 Layout (tt .root , 0 , 0 , m )
55- // 整条宽 = 116, 高 = 30(scale=1)
56- if tt .root .Rect ().Dx () != 116 || tt .root .Rect ().Dy () != 30 {
57- t .Errorf ("整条尺寸应 116x30 , got %dx%d" , tt .root .Rect ().Dx (), tt .root .Rect ().Dy ())
56+ // 整条宽 = 114(grip 10 + 4×26 槽位;L2 去除旧 116 尾部死区) , 高 = 30(scale=1)
57+ if tt .root .Rect ().Dx () != 114 || tt .root .Rect ().Dy () != 30 {
58+ t .Errorf ("整条尺寸应 114x30 , got %dx%d" , tt .root .Rect ().Dx (), tt .root .Rect ().Dy ())
5859 }
5960 // 按钮框 Stretch 撑高 = 30 - pad*2 = 26
6061 if tt .mode .Rect ().Dy () != 26 {
@@ -65,7 +66,7 @@ func TestBuildToolbarTree_Geometry(t *testing.T) {
6566 t .Errorf ("中文模式 mode 背景应=ModeChineseBg, got %v" , tt .mode .Background .Color )
6667 }
6768 // 英文模式
68- tt2 := buildToolbarTree (ToolbarState {ChineseMode : false }, rtv , 1.0 )
69+ tt2 := buildToolbarTree (ToolbarState {ChineseMode : false }, rtv , geom )
6970 if tt2 .mode .Background .Color != (color.RGBA {115 , 127 , 148 , 255 }) {
7071 t .Errorf ("英文模式 mode 背景应=ModeEnglishBg, got %v" , tt2 .mode .Background .Color )
7172 }
@@ -80,7 +81,7 @@ func TestBuildToolbarTree_Geometry(t *testing.T) {
8081// 且与旧线性公式逐项等价(scale=1:grip=10, button=26, pad=2, H=30)。
8182func TestToolbarGeometry_SingleSource (t * testing.T ) {
8283 m := fixedMeasurer {charW : 10 }
83- tt := buildToolbarTree (ToolbarState {ChineseMode : true }, theme.ResolvedToolbarViews {}, 1.0 )
84+ tt := buildToolbarTree (ToolbarState {ChineseMode : true }, theme.ResolvedToolbarViews {}, resolveToolbarGeom ( nil , 1.0 ) )
8485 Layout (tt .root , 0 , 0 , m )
8586
8687 // content 矩形(GetButtonBounds 语义)= 旧 GetButtonBounds 公式
@@ -130,8 +131,41 @@ func TestToolbarGeometry_SingleSource(t *testing.T) {
130131 prevMax = hb .Max .X
131132 }
132133
133- // 整条尺寸(GetToolbarSize 语义)
134- if sz := tt .root .Rect ().Size (); sz .X != 116 || sz .Y != 30 {
135- t .Errorf ("整条尺寸应 116x30, got %dx%d" , sz .X , sz .Y )
134+ // 整条尺寸(GetToolbarSize 语义)= grip 10 + 4×26 槽位 = 114(去尾部死区)
135+ if sz := tt .root .Rect ().Size (); sz .X != 114 || sz .Y != 30 {
136+ t .Errorf ("整条尺寸应 114x30, got %dx%d" , sz .X , sz .Y )
137+ }
138+ }
139+
140+ // tbDim 构造 *theme.Dimension(dp)供测试覆盖几何。
141+ func tbDim (v int ) * theme.Dimension { d := theme .Dp (v ); return & d }
142+
143+ // TestResolveToolbarGeom_SchemaOverride 守护 L2:views.toolbar 几何字段覆盖默认、总宽随之变化;
144+ // 未覆盖项保持默认(零回归)。
145+ func TestResolveToolbarGeom_SchemaOverride (t * testing.T ) {
146+ rv := & theme.ResolvedV3 {Views : & theme.Views {Toolbar : & theme.ToolbarViews {
147+ GripWidth : tbDim (12 ),
148+ ButtonWidth : tbDim (30 ),
149+ }}}
150+ g := resolveToolbarGeom (rv , 1.0 )
151+ if g .gripWidth != 12 || g .buttonWidth != 30 {
152+ t .Errorf ("schema 覆盖未生效: gripW=%d btnW=%d" , g .gripWidth , g .buttonWidth )
153+ }
154+ if g .height != 30 || g .buttonPadding != 2 || g .buttonRadius != 4 {
155+ t .Errorf ("未覆盖项应保持默认: h=%d pad=%d r=%d" , g .height , g .buttonPadding , g .buttonRadius )
156+ }
157+ // 总宽随之变化 = grip + 4×button 槽位
158+ tt := buildToolbarTree (ToolbarState {}, theme.ResolvedToolbarViews {}, g )
159+ Layout (tt .root , 0 , 0 , zeroMeasurer {})
160+ if w , want := tt .root .Rect ().Dx (), 12 + 4 * 30 ; w != want {
161+ t .Errorf ("覆盖后总宽应=%d, got %d" , want , w )
162+ }
163+ }
164+
165+ // TestResolveToolbarGeom_NilDefaults 守护:rv 为 nil 时回退内置默认(grip 10 + 4×26 = 114)。
166+ func TestResolveToolbarGeom_NilDefaults (t * testing.T ) {
167+ g := resolveToolbarGeom (nil , 1.0 )
168+ if g .gripWidth != 10 || g .buttonWidth != 26 || g .height != 30 {
169+ t .Errorf ("默认几何错误: gripW=%d btnW=%d h=%d" , g .gripWidth , g .buttonWidth , g .height )
136170 }
137171}
0 commit comments