github.com/vugu/vugu@v0.3.5/change-counter_test.go (about) 1 package vugu 2 3 import ( 4 "log" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func TestModCheckerChangeCounter(t *testing.T) { 11 12 assert := assert.New(t) 13 14 var wl WidgetList 15 wl.SetList([]Widget{ 16 {ID: 1, Name: "Willy"}, 17 {ID: 2, Name: "Nilly"}, 18 {ID: 3, Name: "Silly"}, 19 }) 20 21 var mc ModTracker 22 mc.TrackNext() 23 24 changed := mc.ModCheckAll(&wl) 25 assert.True(changed) 26 log.Printf("changed(1) = %v", changed) 27 28 mc.TrackNext() 29 30 wl.Changed() 31 changed = mc.ModCheckAll(&wl) 32 assert.True(changed) 33 log.Printf("changed(2) = %v", changed) 34 35 mc.TrackNext() 36 37 changed = mc.ModCheckAll(&wl) 38 assert.False(changed) 39 log.Printf("changed(3) = %v", changed) 40 41 mc.TrackNext() 42 43 changed = mc.ModCheckAll(&wl) 44 assert.False(changed) 45 log.Printf("changed(4) = %v", changed) 46 47 mc.TrackNext() 48 49 wl.SetList([]Widget{ 50 {ID: 4, Name: "Billy"}, 51 {ID: 5, Name: "Lilly"}, 52 {ID: 6, Name: "Milly"}, 53 }) 54 55 changed = mc.ModCheckAll(&wl) 56 assert.True(changed) 57 log.Printf("changed(5) = %v", changed) 58 59 mc.TrackNext() 60 61 changed = mc.ModCheckAll(&wl) 62 assert.False(changed) 63 log.Printf("changed(6) = %v", changed) 64 65 } 66 67 type Widget struct { 68 ID uint64 69 Name string 70 } 71 72 type WidgetList struct { 73 items []Widget 74 ChangeCounter 75 } 76 77 func (l *WidgetList) SetList(items []Widget) { 78 l.items = items 79 l.Changed() 80 } 81 82 func (l *WidgetList) Len() int { 83 return len(l.items) 84 } 85 86 func (l *WidgetList) Index(idx int) Widget { 87 return l.items[idx] 88 }