1package cef
2
3import (
4 "fmt"
5 "testing"
6
7 "github.com/stretchr/testify/assert"
8)
9
10func TestZoomConversionsRoundTrip(t *testing.T) {
11 factors := []float64{0.5, 0.8, 1.0, 1.1, 1.2, 1.4, 2.0}
12 for _, factor := range factors {
13 t.Run(fmt.Sprintf("factor_%.1f", factor), func(t *testing.T) {
14 level := cefZoomFromFactor(factor)
15 got := factorFromCEFZoom(level)
16 assert.InDelta(t, factor, got, 1e-9, "round-trip mismatch for factor %.6f: level %.6f -> factor %.12f", factor, level, got)
17 })
18 }
19}
20
21func TestZoomConversionsCompensateDeviceSizedOSRBackingAndSurfaceScale(t *testing.T) {
22 tests := []struct {
23 name string
24 surfaceScale float64
25 backingScale float64
26 pageZoom float64
27 wantInternal float64
28 }{
29 {
30 name: "fractional_hidpi_keeps_100_percent_internal_zoom",
31 surfaceScale: 1.2,
32 backingScale: 1.2,
33 pageZoom: 1.0,
34 wantInternal: 1.0,
35 },
36 {
37 name: "integer_hidpi_keeps_requested_user_zoom",
38 surfaceScale: 2.0,
39 backingScale: 2.0,
40 pageZoom: 1.2,
41 wantInternal: 1.2,
42 },
43 {
44 name: "normal_osr_hidpi_keeps_requested_user_zoom",
45 surfaceScale: 1.2,
46 backingScale: 1.0,
47 pageZoom: 1.0,
48 wantInternal: 1.0,
49 },
50 {
51 name: "device_sized_backing_remains_compensated",
52 surfaceScale: 1.25,
53 backingScale: 2.0,
54 pageZoom: 1.2,
55 wantInternal: 0.75,
56 },
57 }
58
59 for _, tt := range tests {
60 t.Run(tt.name, func(t *testing.T) {
61 level := cefZoomFromPageAndScaleFactors(tt.pageZoom, tt.surfaceScale, tt.backingScale)
62 assert.InDelta(t, tt.wantInternal, factorFromCEFZoom(level), 1e-9)
63 assert.InDelta(t, tt.pageZoom, pageZoomFromCEFAndScaleLevel(level, tt.surfaceScale, tt.backingScale), 1e-9)
64 })
65 }
66}
67
68func TestZoomReapplyGuardTracksEffectiveScaleRatio(t *testing.T) {
69 wv := &WebView{}
70
71 wv.recordAppliedZoomScaleRatio(1.2, 1.2)
72
73 assert.False(t, wv.shouldReapplyZoomForScaleRatio(2.0, 2.0), "same effective ratio should not reapply")
74 assert.True(t, wv.shouldReapplyZoomForScaleRatio(1.2, 2.0), "changed active-backing ratio should reapply")
75}