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  }