forked from fyne-io/fyne
-
Notifications
You must be signed in to change notification settings - Fork 0
/
confirm_test.go
121 lines (104 loc) · 3.66 KB
/
confirm_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package dialog
import (
"image/color"
"testing"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/canvas"
"fyne.io/fyne/v2/test"
"fyne.io/fyne/v2/theme"
"fyne.io/fyne/v2/widget"
"github.com/stretchr/testify/assert"
)
func TestDialog_ConfirmDoubleCallback(t *testing.T) {
ch := make(chan int)
cnf := NewConfirm("Test", "Test", func(_ bool) {
ch <- 42
}, test.NewTempWindow(t, nil))
cnf.SetDismissText("No")
cnf.SetConfirmText("Yes")
cnf.SetOnClosed(func() {
ch <- 43
})
cnf.Show()
assert.False(t, cnf.win.Hidden)
go test.Tap(cnf.dismiss)
assert.EqualValues(t, <-ch, 43)
assert.EqualValues(t, <-ch, 42)
assert.True(t, cnf.win.Hidden)
}
func TestDialog_ConfirmCallbackOnlyOnClosed(t *testing.T) {
ch := make(chan int)
cnf := NewConfirm("Test", "Test", nil, test.NewTempWindow(t, nil))
cnf.SetDismissText("No")
cnf.SetConfirmText("Yes")
cnf.SetOnClosed(func() {
ch <- 43
})
cnf.Show()
assert.False(t, cnf.win.Hidden)
go test.Tap(cnf.dismiss)
assert.EqualValues(t, <-ch, 43)
assert.True(t, cnf.win.Hidden)
}
func TestDialog_ConfirmCallbackOnlyOnConfirm(t *testing.T) {
ch := make(chan int)
cnf := NewConfirm("Test", "Test", func(_ bool) {
ch <- 42
}, test.NewTempWindow(t, nil))
cnf.SetDismissText("No")
cnf.SetConfirmText("Yes")
cnf.Show()
assert.False(t, cnf.win.Hidden)
go test.Tap(cnf.dismiss)
assert.EqualValues(t, <-ch, 42)
assert.True(t, cnf.win.Hidden)
}
func TestConfirmDialog_Resize(t *testing.T) {
window := test.NewWindow(nil)
defer window.Close()
window.Resize(fyne.NewSize(600, 400))
d := NewConfirm("Test", "Test", nil, window)
theDialog := d.dialog
d.dialog.Show() // we cannot check window size if not shown
//Test resize - normal size scenario
size := fyne.NewSize(300, 180) //normal size to fit (600,400)
theDialog.Resize(size)
expectedWidth := float32(300)
assert.Equal(t, expectedWidth, theDialog.win.Content.Size().Width+theme.Padding()*2)
expectedHeight := float32(180)
assert.Equal(t, expectedHeight, theDialog.win.Content.Size().Height+theme.Padding()*2)
//Test resize - normal size scenario again
size = fyne.NewSize(310, 280) //normal size to fit (600,400)
theDialog.Resize(size)
expectedWidth = 310
assert.Equal(t, expectedWidth, theDialog.win.Content.Size().Width+theme.Padding()*2)
expectedHeight = 280
assert.Equal(t, expectedHeight, theDialog.win.Content.Size().Height+theme.Padding()*2)
//Test resize - greater than max size scenario
size = fyne.NewSize(800, 600)
theDialog.Resize(size)
expectedWidth = 600 //since win width only 600
assert.Equal(t, expectedWidth, theDialog.win.Size().Width) //max, also work
assert.Equal(t, expectedWidth, theDialog.win.Content.Size().Width+theme.Padding()*2)
expectedHeight = 400 //since win heigh only 400
assert.Equal(t, expectedHeight, theDialog.win.Size().Height) //max, also work
assert.Equal(t, expectedHeight, theDialog.win.Content.Size().Height+theme.Padding()*2)
//Test again - extreme small size
size = fyne.NewSize(1, 1)
theDialog.Resize(size)
expectedWidth = theDialog.win.Content.MinSize().Width
assert.Equal(t, expectedWidth, theDialog.win.Content.Size().Width)
expectedHeight = theDialog.win.Content.MinSize().Height
assert.Equal(t, expectedHeight, theDialog.win.Content.Size().Height)
}
func TestConfirm_Importance(t *testing.T) {
test.NewTempApp(t)
w := test.NewTempWindow(t, canvas.NewRectangle(color.Transparent))
size := fyne.NewSize(200, 300)
w.Resize(size)
d := NewConfirm("Delete me?", "This is dangerous!", nil, w)
d.SetConfirmImportance(widget.DangerImportance)
test.ApplyTheme(t, test.Theme())
d.Show()
test.AssertRendersToImage(t, "dialog-confirm-importance.png", w.Canvas())
}