github.com/gogf/gf@v1.16.9/os/gtimer/gtimer_z_unit_timer_test.go (about)

     1  // Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
     2  //
     3  // This Source Code Form is subject to the terms of the MIT License.
     4  // If a copy of the MIT was not distributed with this file,
     5  // You can obtain one at https://github.com/gogf/gf.
     6  
     7  // Timer Operations
     8  
     9  package gtimer_test
    10  
    11  import (
    12  	"testing"
    13  	"time"
    14  
    15  	"github.com/gogf/gf/container/garray"
    16  	"github.com/gogf/gf/os/gtimer"
    17  	"github.com/gogf/gf/test/gtest"
    18  )
    19  
    20  func New() *gtimer.Timer {
    21  	return gtimer.New()
    22  }
    23  
    24  func TestTimer_Add_Close(t *testing.T) {
    25  	gtest.C(t, func(t *gtest.T) {
    26  		timer := New()
    27  		array := garray.New(true)
    28  		//fmt.Println("start", time.Now())
    29  		timer.Add(200*time.Millisecond, func() {
    30  			//fmt.Println("job1", time.Now())
    31  			array.Append(1)
    32  		})
    33  		timer.Add(200*time.Millisecond, func() {
    34  			//fmt.Println("job2", time.Now())
    35  			array.Append(1)
    36  		})
    37  		timer.Add(400*time.Millisecond, func() {
    38  			//fmt.Println("job3", time.Now())
    39  			array.Append(1)
    40  		})
    41  		time.Sleep(250 * time.Millisecond)
    42  		t.Assert(array.Len(), 2)
    43  		time.Sleep(250 * time.Millisecond)
    44  		t.Assert(array.Len(), 5)
    45  		timer.Close()
    46  		time.Sleep(250 * time.Millisecond)
    47  		fixedLength := array.Len()
    48  		time.Sleep(250 * time.Millisecond)
    49  		t.Assert(array.Len(), fixedLength)
    50  	})
    51  }
    52  
    53  func TestTimer_Start_Stop_Close(t *testing.T) {
    54  	gtest.C(t, func(t *gtest.T) {
    55  		timer := New()
    56  		array := garray.New(true)
    57  		timer.Add(1000*time.Millisecond, func() {
    58  			array.Append(1)
    59  		})
    60  		t.Assert(array.Len(), 0)
    61  		time.Sleep(1200 * time.Millisecond)
    62  		t.Assert(array.Len(), 1)
    63  		timer.Stop()
    64  		time.Sleep(1200 * time.Millisecond)
    65  		t.Assert(array.Len(), 1)
    66  		timer.Start()
    67  		time.Sleep(1200 * time.Millisecond)
    68  		t.Assert(array.Len(), 2)
    69  		timer.Close()
    70  		time.Sleep(1200 * time.Millisecond)
    71  		t.Assert(array.Len(), 2)
    72  	})
    73  }
    74  
    75  func TestJob_Reset(t *testing.T) {
    76  	gtest.C(t, func(t *gtest.T) {
    77  		timer := New()
    78  		array := garray.New(true)
    79  		job := timer.AddSingleton(500*time.Millisecond, func() {
    80  			array.Append(1)
    81  		})
    82  		time.Sleep(300 * time.Millisecond)
    83  		job.Reset()
    84  		time.Sleep(300 * time.Millisecond)
    85  		job.Reset()
    86  		time.Sleep(300 * time.Millisecond)
    87  		job.Reset()
    88  		time.Sleep(600 * time.Millisecond)
    89  		t.Assert(array.Len(), 1)
    90  	})
    91  }
    92  
    93  func TestTimer_AddSingleton(t *testing.T) {
    94  	gtest.C(t, func(t *gtest.T) {
    95  		timer := New()
    96  		array := garray.New(true)
    97  		timer.AddSingleton(200*time.Millisecond, func() {
    98  			array.Append(1)
    99  			time.Sleep(10 * time.Second)
   100  		})
   101  		time.Sleep(250 * time.Millisecond)
   102  		t.Assert(array.Len(), 1)
   103  
   104  		time.Sleep(500 * time.Millisecond)
   105  		t.Assert(array.Len(), 1)
   106  	})
   107  }
   108  
   109  func TestTimer_AddOnce(t *testing.T) {
   110  	gtest.C(t, func(t *gtest.T) {
   111  		timer := New()
   112  		array := garray.New(true)
   113  		timer.AddOnce(200*time.Millisecond, func() {
   114  			array.Append(1)
   115  		})
   116  		timer.AddOnce(200*time.Millisecond, func() {
   117  			array.Append(1)
   118  		})
   119  		time.Sleep(250 * time.Millisecond)
   120  		t.Assert(array.Len(), 2)
   121  		time.Sleep(250 * time.Millisecond)
   122  		t.Assert(array.Len(), 2)
   123  		timer.Close()
   124  		time.Sleep(250 * time.Millisecond)
   125  		fixedLength := array.Len()
   126  		time.Sleep(250 * time.Millisecond)
   127  		t.Assert(array.Len(), fixedLength)
   128  	})
   129  }
   130  
   131  func TestTimer_AddTimes(t *testing.T) {
   132  	gtest.C(t, func(t *gtest.T) {
   133  		timer := New()
   134  		array := garray.New(true)
   135  		timer.AddTimes(200*time.Millisecond, 2, func() {
   136  			array.Append(1)
   137  		})
   138  		time.Sleep(1000 * time.Millisecond)
   139  		t.Assert(array.Len(), 2)
   140  	})
   141  }
   142  
   143  func TestTimer_DelayAdd(t *testing.T) {
   144  	gtest.C(t, func(t *gtest.T) {
   145  		timer := New()
   146  		array := garray.New(true)
   147  		timer.DelayAdd(200*time.Millisecond, 200*time.Millisecond, func() {
   148  			array.Append(1)
   149  		})
   150  		time.Sleep(250 * time.Millisecond)
   151  		t.Assert(array.Len(), 0)
   152  		time.Sleep(250 * time.Millisecond)
   153  		t.Assert(array.Len(), 1)
   154  	})
   155  }
   156  
   157  func TestTimer_DelayAddJob(t *testing.T) {
   158  	gtest.C(t, func(t *gtest.T) {
   159  		timer := New()
   160  		array := garray.New(true)
   161  		timer.DelayAddEntry(200*time.Millisecond, 200*time.Millisecond, func() {
   162  			array.Append(1)
   163  		}, false, 100, gtimer.StatusReady)
   164  		time.Sleep(250 * time.Millisecond)
   165  		t.Assert(array.Len(), 0)
   166  		time.Sleep(250 * time.Millisecond)
   167  		t.Assert(array.Len(), 1)
   168  	})
   169  }
   170  
   171  func TestTimer_DelayAddSingleton(t *testing.T) {
   172  	gtest.C(t, func(t *gtest.T) {
   173  		timer := New()
   174  		array := garray.New(true)
   175  		timer.DelayAddSingleton(200*time.Millisecond, 200*time.Millisecond, func() {
   176  			array.Append(1)
   177  			time.Sleep(10 * time.Second)
   178  		})
   179  		time.Sleep(250 * time.Millisecond)
   180  		t.Assert(array.Len(), 0)
   181  
   182  		time.Sleep(1000 * time.Millisecond)
   183  		t.Assert(array.Len(), 1)
   184  	})
   185  }
   186  
   187  func TestTimer_DelayAddOnce(t *testing.T) {
   188  	gtest.C(t, func(t *gtest.T) {
   189  		timer := New()
   190  		array := garray.New(true)
   191  		timer.DelayAddOnce(200*time.Millisecond, 200*time.Millisecond, func() {
   192  			array.Append(1)
   193  		})
   194  		time.Sleep(250 * time.Millisecond)
   195  		t.Assert(array.Len(), 0)
   196  
   197  		time.Sleep(250 * time.Millisecond)
   198  		t.Assert(array.Len(), 1)
   199  
   200  		time.Sleep(500 * time.Millisecond)
   201  		t.Assert(array.Len(), 1)
   202  	})
   203  }
   204  
   205  func TestTimer_DelayAddTimes(t *testing.T) {
   206  	gtest.C(t, func(t *gtest.T) {
   207  		timer := New()
   208  		array := garray.New(true)
   209  		timer.DelayAddTimes(200*time.Millisecond, 500*time.Millisecond, 2, func() {
   210  			array.Append(1)
   211  		})
   212  		time.Sleep(200 * time.Millisecond)
   213  		t.Assert(array.Len(), 0)
   214  
   215  		time.Sleep(600 * time.Millisecond)
   216  		t.Assert(array.Len(), 1)
   217  
   218  		time.Sleep(600 * time.Millisecond)
   219  		t.Assert(array.Len(), 2)
   220  
   221  		time.Sleep(1000 * time.Millisecond)
   222  		t.Assert(array.Len(), 2)
   223  	})
   224  }
   225  
   226  func TestTimer_AddLessThanInterval(t *testing.T) {
   227  	gtest.C(t, func(t *gtest.T) {
   228  		timer := gtimer.New(gtimer.TimerOptions{
   229  			Interval: 100 * time.Millisecond,
   230  		})
   231  		array := garray.New(true)
   232  		timer.Add(20*time.Millisecond, func() {
   233  			array.Append(1)
   234  		})
   235  		time.Sleep(50 * time.Millisecond)
   236  		t.Assert(array.Len(), 0)
   237  
   238  		time.Sleep(110 * time.Millisecond)
   239  		t.Assert(array.Len(), 1)
   240  
   241  		time.Sleep(110 * time.Millisecond)
   242  		t.Assert(array.Len(), 2)
   243  	})
   244  }
   245  
   246  func TestTimer_AddLeveledJob1(t *testing.T) {
   247  	gtest.C(t, func(t *gtest.T) {
   248  		timer := New()
   249  		array := garray.New(true)
   250  		//glog.Println("start")
   251  		timer.DelayAdd(1000*time.Millisecond, 1000*time.Millisecond, func() {
   252  			//glog.Println("add")
   253  			array.Append(1)
   254  		})
   255  		time.Sleep(1500 * time.Millisecond)
   256  		t.Assert(array.Len(), 0)
   257  		time.Sleep(1300 * time.Millisecond)
   258  		//glog.Println("check")
   259  		t.Assert(array.Len(), 1)
   260  	})
   261  }
   262  
   263  func TestTimer_Exit(t *testing.T) {
   264  	gtest.C(t, func(t *gtest.T) {
   265  		timer := New()
   266  		array := garray.New(true)
   267  		timer.Add(200*time.Millisecond, func() {
   268  			array.Append(1)
   269  			gtimer.Exit()
   270  		})
   271  		time.Sleep(1000 * time.Millisecond)
   272  		t.Assert(array.Len(), 1)
   273  	})
   274  }