github.com/vugu/vugu@v0.3.6-0.20240430171613-3f6f402e014b/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  }