github.com/qxnw/lib4go@v0.0.0-20180426074627-c80c7e84b925/event/delay_test.go (about) 1 package event 2 3 import ( 4 "testing" 5 "time" 6 ) 7 8 // TestNewDelayCallback 测试创建一个延迟回调对象 9 func TestNewDelayCallback(t *testing.T) { 10 delayTime := time.Second * 2 11 firstDelay := time.Second * 2 12 _, err := NewDelayCallback(delayTime, firstDelay, nil) 13 if err == nil { 14 t.Error("test fail") 15 } 16 17 _, err = NewDelayCallback(delayTime, firstDelay, func(...interface{}) { 18 19 }) 20 if err != nil { 21 t.Errorf("test fail %v", err) 22 } 23 } 24 25 // TestDelayCallback 测试延迟回调 26 func TestDelayCallback(t *testing.T) { 27 delayTime := time.Second * 2 28 firstDelay := time.Second * 4 29 number := 1 30 d, err := NewDelayCallback(delayTime, firstDelay, func(data ...interface{}) { 31 num := data[0].(int) 32 number += num 33 }) 34 if err != nil { 35 t.Errorf("test fail %v", err) 36 } 37 38 d.Push(2) 39 // 没有执行,判断值 40 if number != 1 { 41 t.Errorf("test fail %d", number) 42 } 43 44 time.Sleep(firstDelay) 45 time.Sleep(time.Second) 46 47 // 第一次执行之后,判断值 48 if number != 3 { 49 t.Errorf("test fail %d", number) 50 } 51 52 time.Sleep(delayTime) 53 time.Sleep(time.Second) 54 55 // 延迟回调执行了,没有添加触发时间,判断值 56 if number != 3 { 57 t.Errorf("test fail %d", number) 58 } 59 60 d.Push(3) 61 62 time.Sleep(delayTime) 63 time.Sleep(time.Second) 64 // 添加触发事件之后,延迟执行回调函数,判断值 65 if number != 6 { 66 t.Errorf("test fail %d", number) 67 } 68 d.Close() 69 70 number = 1 71 // 测试进入回调函数才开始push值 72 d, err = NewDelayCallback(delayTime, firstDelay, func(data ...interface{}) { 73 num := data[0].(int) 74 number += num 75 }) 76 if err != nil { 77 t.Errorf("test fail %v", err) 78 } 79 time.Sleep(delayTime + firstDelay) 80 d.Push(2) 81 82 time.Sleep(delayTime) 83 if number != 3 { 84 t.Errorf("test fail %d", number) 85 } 86 } 87 88 // TestDelayClose 测试关闭回调对象 89 func TestDelayClose(t *testing.T) { 90 delayTime := time.Second * 2 91 firstDelay := time.Second * 1 92 number := 1 93 d, err := NewDelayCallback(delayTime, firstDelay, func(data ...interface{}) { 94 num := data[0].(int) 95 number += num 96 }) 97 if err != nil { 98 t.Errorf("test fail %v", err) 99 } 100 101 d.Push(2) 102 // 没有执行,判断值 103 if number != 1 { 104 t.Errorf("test fail %d", number) 105 } 106 107 time.Sleep(firstDelay) 108 time.Sleep(time.Second) 109 110 // 第一次执行之后,判断值 111 if number != 3 { 112 t.Errorf("test fail %d", number) 113 } 114 115 d.Push(3) 116 d.Close() 117 118 time.Sleep(delayTime) 119 120 // 关闭回调对象之后判断值 121 if number != 3 { 122 t.Errorf("test fail %d", number) 123 } 124 125 // 直接关闭 126 b, err := NewDelayCallback(delayTime, firstDelay, func(data ...interface{}) { 127 num := data[0].(int) 128 number += num 129 }) 130 if err != nil { 131 t.Errorf("test fail %v", err) 132 } 133 b.Close() 134 }