Best Go-testdeep code snippet using td.Recv
td_recv.go
Source:td_recv.go
...10 "time"11 "github.com/maxatome/go-testdeep/internal/ctxerr"12 "github.com/maxatome/go-testdeep/internal/types"13)14// A RecvKind allows to match that nothing has been received on a15// channel or that a channel has been closed when using [Recv]16// operator.17type RecvKind = types.RecvKind18const (19 _ RecvKind = (iota & 1) == 020 RecvNothing // nothing read on channel21 RecvClosed // channel closed22)23type tdRecv struct {24 tdSmugglerBase25 timeout time.Duration26}27var _ TestDeep = &tdRecv{}28// summary(Recv): checks the value read from a channel29// input(Recv): chan,ptr(ptr on chan)30// Recv is a smuggler operator. It reads from a channel or a pointer31// to a channel and compares the read value to expectedValue.32//33// expectedValue can be any value including a [TestDeep] operator. It34// can also be [RecvNothing] to test nothing can be read from the35// channel or [RecvClosed] to check the channel is closed.36//37// If timeout is passed it should be only one item. It means: try to38// read the channel during this duration to get a value before giving39// up. If timeout is missing or ⤠0, it defaults to 0 meaning Recv40// does not wait for a value but gives up instantly if no value is41// available on the channel.42//43// ch := make(chan int, 6)44// td.Cmp(t, ch, td.Recv(td.RecvNothing)) // succeeds45// td.Cmp(t, ch, td.Recv(42)) // fails, nothing to receive46// // recv(DATA): values differ47// // got: nothing received on channel48// // expected: 4249//50// ch <- 4251// td.Cmp(t, ch, td.Recv(td.RecvNothing)) // fails, 42 received instead52// // recv(DATA): values differ53// // got: 4254// // expected: nothing received on channel55//56// td.Cmp(t, ch, td.Recv(42)) // fails, nothing to receive anymore57// // recv(DATA): values differ58// // got: nothing received on channel59// // expected: 4260//61// ch <- 66662// td.Cmp(t, ch, td.Recv(td.Between(600, 700))) // succeeds63//64// close(ch)65// td.Cmp(t, ch, td.Recv(td.RecvNothing)) // fails as channel is closed66// // recv(DATA): values differ67// // got: channel is closed68// // expected: nothing received on channel69//70// td.Cmp(t, ch, td.Recv(td.RecvClosed)) // succeeds71//72// Note that for convenience Recv accepts pointer on channel:73//74// ch := make(chan int, 6)75// ch <- 4276// td.Cmp(t, &ch, td.Recv(42)) // succeeds77//78// Each time Recv is called, it tries to consume one item from the79// channel, immediately or, if given, before timeout duration. To80// consume several items in a same [Cmp] call, one can use [All]81// operator as in:82//83// ch := make(chan int, 6)84// ch <- 185// ch <- 286// ch <- 387// close(ch)88// td.Cmp(t, ch, td.All( // succeeds89// td.Recv(1),90// td.Recv(2),91// td.Recv(3),92// td.Recv(td.RecvClosed),93// ))94//95// To check nothing can be received during 100ms on channel ch (if96// something is received before, including a close, it fails):97//98// td.Cmp(t, ch, td.Recv(td.RecvNothing, 100*time.Millisecond))99//100// note that in case of success, the above [Cmp] call always lasts 100ms.101//102// To check 42 can be received from channel ch during the next 100ms103// (if nothing is received during these 100ms or something different104// from 42, including a close, it fails):105//106// td.Cmp(t, ch, td.Recv(42, 100*time.Millisecond))107//108// note that in case of success, the above [Cmp] call lasts less than 100ms.109//110// A nil channel is not handled specifically, so it âis never ready111// for communicationâ as specification says:112//113// var ch chan int114// td.Cmp(t, ch, td.Recv(td.RecvNothing)) // always succeeds115// td.Cmp(t, ch, td.Recv(42)) // or any other value, always fails116// td.Cmp(t, ch, td.Recv(td.RecvClosed)) // always fails117//118// so to check if a channel is not nil before reading from it, one can119// either do:120//121// td.Cmp(t, ch, td.All(122// td.NotNil(),123// td.Recv(42),124// ))125// // or126// if td.Cmp(t, ch, td.NotNil()) {127// td.Cmp(t, ch, td.Recv(42))128// }129//130// TypeBehind method returns the [reflect.Type] of expectedValue,131// except if expectedValue is a [TestDeep] operator. In this case, it132// delegates TypeBehind() to the operator.133//134// See also [Cap] and [Len].135func Recv(expectedValue any, timeout ...time.Duration) TestDeep {136 r := tdRecv{}137 r.tdSmugglerBase = newSmugglerBase(expectedValue, 0)138 if !r.isTestDeeper {139 r.expectedValue = reflect.ValueOf(expectedValue)140 }141 switch len(timeout) {142 case 0:143 case 1:144 r.timeout = timeout[0]145 default:146 r.err = ctxerr.OpTooManyParams(r.location.Func, "(EXPECTED[, TIMEOUT])")147 }148 return &r149}150func (r *tdRecv) Match(ctx ctxerr.Context, got reflect.Value) *ctxerr.Error {151 if r.err != nil {152 return ctx.CollectError(r.err)153 }154 switch got.Kind() {155 case reflect.Ptr:156 gotElem := got.Elem()157 if !gotElem.IsValid() {158 if ctx.BooleanError {159 return ctxerr.BooleanError160 }161 return ctx.CollectError(ctxerr.NilPointer(got, "non-nil *chan"))162 }163 if gotElem.Kind() != reflect.Chan {164 break165 }166 got = gotElem167 fallthrough168 case reflect.Chan:169 cases := [2]reflect.SelectCase{170 {171 Dir: reflect.SelectRecv,172 Chan: got,173 },174 }175 var timer *time.Timer176 if r.timeout > 0 {177 timer = time.NewTimer(r.timeout)178 cases[1] = reflect.SelectCase{179 Dir: reflect.SelectRecv,180 Chan: reflect.ValueOf(timer.C),181 }182 } else {183 cases[1] = reflect.SelectCase{184 Dir: reflect.SelectDefault,185 }186 }187 chosen, recv, recvOK := reflect.Select(cases[:])188 if chosen == 1 && timer != nil {189 // check quickly both timeout & expected case didn't occur190 // concurrently and timeout masked the expected case191 cases[1] = reflect.SelectCase{192 Dir: reflect.SelectDefault,193 }194 chosen, recv, recvOK = reflect.Select(cases[:])195 }196 if chosen == 0 {197 if !recvOK {198 recv = reflect.ValueOf(RecvClosed)199 }200 if timer != nil {201 timer.Stop()202 }203 } else {204 recv = reflect.ValueOf(RecvNothing)205 }206 return deepValueEqual(ctx.AddFunctionCall("recv"), recv, r.expectedValue)207 }208 if ctx.BooleanError {209 return ctxerr.BooleanError210 }211 return ctx.CollectError(ctxerr.BadKind(got, "chan OR *chan"))212}213func (r *tdRecv) HandleInvalid() bool {214 return true // Knows how to handle untyped nil values (aka invalid values)215}216func (r *tdRecv) String() string {217 if r.err != nil {218 return r.stringError()219 }220 if r.isTestDeeper {221 return "recv: " + r.expectedValue.Interface().(TestDeep).String()222 }223 return fmt.Sprintf("recv=%d", r.expectedValue.Int())224}225func (r *tdRecv) TypeBehind() reflect.Type {226 if r.err != nil {227 return nil228 }229 return r.internalTypeBehind()230}...
td_recv_test.go
Source:td_recv_test.go
...10 "github.com/maxatome/go-testdeep/internal/test"11 "github.com/maxatome/go-testdeep/internal/types"12 "github.com/maxatome/go-testdeep/td"13)14func TestRecv(t *testing.T) {15 fillCh := func(ch chan int, val int) {16 ch <- val // td.Cmp17 ch <- val // EqDeeply aka boolean context18 ch <- val // EqDeeplyError19 ch <- val // interface + td.Cmp20 ch <- val // interface + EqDeeply aka boolean context21 ch <- val // interface + EqDeeplyError22 }23 mkCh := func(val int) chan int {24 ch := make(chan int, 6)25 fillCh(ch, val)26 close(ch)27 return ch28 }29 t.Run("all good", func(t *testing.T) {30 ch := mkCh(1)31 checkOK(t, ch, td.Recv(1))32 checkOK(t, ch, td.Recv(td.RecvClosed, 10*time.Microsecond))33 ch = mkCh(42)34 checkOK(t, ch, td.Recv(td.Between(40, 45)))35 checkOK(t, ch, td.Recv(td.RecvClosed))36 })37 t.Run("complete cycle", func(t *testing.T) {38 ch := make(chan int, 6)39 t.Run("empty", func(t *testing.T) {40 checkOK(t, ch, td.Recv(td.RecvNothing))41 checkOK(t, ch, td.Recv(td.RecvNothing, 10*time.Microsecond))42 checkOK(t, &ch, td.Recv(td.RecvNothing))43 checkOK(t, &ch, td.Recv(td.RecvNothing, 10*time.Microsecond))44 })45 t.Run("just filled", func(t *testing.T) {46 fillCh(ch, 33)47 checkOK(t, ch, td.Recv(33))48 fillCh(ch, 34)49 checkOK(t, &ch, td.Recv(34))50 })51 t.Run("nothing to recv on channel", func(t *testing.T) {52 checkError(t, ch, td.Recv(td.RecvClosed),53 expectedError{54 Message: mustBe("values differ"),55 Path: mustBe("recv(DATA)"),56 Got: mustBe("nothing received on channel"),57 Expected: mustBe("channel is closed"),58 })59 checkError(t, &ch, td.Recv(td.RecvClosed),60 expectedError{61 Message: mustBe("values differ"),62 Path: mustBe("recv(DATA)"),63 Got: mustBe("nothing received on channel"),64 Expected: mustBe("channel is closed"),65 })66 checkError(t, ch, td.Recv(42),67 expectedError{68 Message: mustBe("values differ"),69 Path: mustBe("recv(DATA)"),70 Got: mustBe("nothing received on channel"),71 Expected: mustBe("42"),72 })73 checkError(t, &ch, td.Recv(42),74 expectedError{75 Message: mustBe("values differ"),76 Path: mustBe("recv(DATA)"),77 Got: mustBe("nothing received on channel"),78 Expected: mustBe("42"),79 })80 })81 close(ch)82 t.Run("closed channel", func(t *testing.T) {83 checkError(t, ch, td.Recv(td.RecvNothing),84 expectedError{85 Message: mustBe("values differ"),86 Path: mustBe("recv(DATA)"),87 Got: mustBe("channel is closed"),88 Expected: mustBe("nothing received on channel"),89 })90 checkError(t, &ch, td.Recv(td.RecvNothing),91 expectedError{92 Message: mustBe("values differ"),93 Path: mustBe("recv(DATA)"),94 Got: mustBe("channel is closed"),95 Expected: mustBe("nothing received on channel"),96 })97 checkError(t, ch, td.Recv(42),98 expectedError{99 Message: mustBe("values differ"),100 Path: mustBe("recv(DATA)"),101 Got: mustBe("channel is closed"),102 Expected: mustBe("42"),103 })104 checkError(t, &ch, td.Recv(42),105 expectedError{106 Message: mustBe("values differ"),107 Path: mustBe("recv(DATA)"),108 Got: mustBe("channel is closed"),109 Expected: mustBe("42"),110 })111 })112 })113 t.Run("nil channel", func(t *testing.T) {114 var ch chan int115 checkError(t, ch, td.Recv(42),116 expectedError{117 Message: mustBe("values differ"),118 Path: mustBe("recv(DATA)"),119 Got: mustBe("nothing received on channel"),120 Expected: mustBe("42"),121 })122 checkError(t, &ch, td.Recv(42),123 expectedError{124 Message: mustBe("values differ"),125 Path: mustBe("recv(DATA)"),126 Got: mustBe("nothing received on channel"),127 Expected: mustBe("42"),128 })129 })130 t.Run("nil pointer", func(t *testing.T) {131 checkError(t, (*chan int)(nil), td.Recv(42),132 expectedError{133 Message: mustBe("nil pointer"),134 Path: mustBe("DATA"),135 Got: mustBe("nil *chan (*chan int type)"),136 Expected: mustBe("non-nil *chan"),137 })138 })139 t.Run("chan any", func(t *testing.T) {140 ch := make(chan any, 6)141 fillCh := func(val any) {142 ch <- val // td.Cmp143 ch <- val // EqDeeply aka boolean context144 ch <- val // EqDeeplyError145 ch <- val // interface + td.Cmp146 ch <- val // interface + EqDeeply aka boolean context147 ch <- val // interface + EqDeeplyError148 }149 fillCh(1)150 checkOK(t, ch, td.Recv(1))151 fillCh(nil)152 checkOK(t, ch, td.Recv(nil))153 close(ch)154 checkOK(t, ch, td.Recv(td.RecvClosed))155 })156 t.Run("errors", func(t *testing.T) {157 checkError(t, "never tested",158 td.Recv(23, time.Second, time.Second),159 expectedError{160 Message: mustBe("bad usage of Recv operator"),161 Path: mustBe("DATA"),162 Summary: mustBe("usage: Recv(EXPECTED[, TIMEOUT]), too many parameters"),163 })164 checkError(t, 42, td.Recv(33),165 expectedError{166 Message: mustBe("bad kind"),167 Path: mustBe("DATA"),168 Got: mustBe("int"),169 Expected: mustBe("chan OR *chan"),170 })171 checkError(t, &struct{}{}, td.Recv(33),172 expectedError{173 Message: mustBe("bad kind"),174 Path: mustBe("DATA"),175 Got: mustBe("*struct (*struct {} type)"),176 Expected: mustBe("chan OR *chan"),177 })178 checkError(t, nil, td.Recv(33),179 expectedError{180 Message: mustBe("bad kind"),181 Path: mustBe("DATA"),182 Got: mustBe("nil"),183 Expected: mustBe("chan OR *chan"),184 })185 })186}187func TestRecvString(t *testing.T) {188 test.EqualStr(t, td.Recv(3).String(), "recv=3")189 test.EqualStr(t, td.Recv(td.Between(3, 8)).String(), "recv: 3 ⤠got ⤠8")190 test.EqualStr(t, td.Recv(td.Gt(8)).String(), "recv: > 8")191 // Erroneous op192 test.EqualStr(t, td.Recv(3, 0, 0).String(), "Recv(<ERROR>)")193}194func TestRecvTypeBehind(t *testing.T) {195 equalTypes(t, td.Recv(3), 0)196 equalTypes(t, td.Recv(td.Between(3, 4)), 0)197 // Erroneous op198 equalTypes(t, td.Recv(3, 0, 0), nil)199}200func TestRecvKind(t *testing.T) {201 test.IsTrue(t, td.RecvNothing == types.RecvNothing)202 test.IsTrue(t, td.RecvClosed == types.RecvClosed)203}...
http.go
Source:http.go
...37 total.Added += mgr.Added38 total.Deleted += mgr.Deleted39 total.New += mgr.New40 total.SentRepros += mgr.SentRepros41 total.RecvRepros += mgr.RecvRepros42 data.Managers = append(data.Managers, UIManager{43 Name: name,44 Corpus: len(mgr.Corpus.Records),45 Added: mgr.Added,46 Deleted: mgr.Deleted,47 New: mgr.New,48 SentRepros: mgr.SentRepros,49 RecvRepros: mgr.RecvRepros,50 })51 }52 sort.Sort(UIManagerArray(data.Managers))53 data.Managers = append([]UIManager{total}, data.Managers...)54 if err := summaryTemplate.Execute(w, data); err != nil {55 log.Logf(0, "failed to execute template: %v", err)56 http.Error(w, fmt.Sprintf("failed to execute template: %v", err), http.StatusInternalServerError)57 return58 }59}60func compileTemplate(html string) *template.Template {61 return template.Must(template.New("").Parse(strings.Replace(html, "{{STYLE}}", htmlStyle, -1)))62}63type UISummaryData struct {64 Managers []UIManager65 Log string66}67type UIManager struct {68 Name string69 Corpus int70 Added int71 Deleted int72 New int73 Repros int74 SentRepros int75 RecvRepros int76}77type UIManagerArray []UIManager78func (a UIManagerArray) Len() int { return len(a) }79func (a UIManagerArray) Less(i, j int) bool { return a[i].Name < a[j].Name }80func (a UIManagerArray) Swap(i, j int) { a[i], a[j] = a[j], a[i] }81var summaryTemplate = compileTemplate(`82<!doctype html>83<html>84<head>85 <title>syz-hub</title>86 {{STYLE}}87</head>88<body>89<b>syz-hub</b>90<br><br>91<table>92 <caption>Managers:</caption>93 <tr>94 <th>Name</th>95 <th>Corpus</th>96 <th>Added</th>97 <th>Deleted</th>98 <th>New</th>99 <th>Repros</th>100 <th>Sent</th>101 <th>Recv</th>102 </tr>103 {{range $m := $.Managers}}104 <tr>105 <td>{{$m.Name}}</td>106 <td>{{$m.Corpus}}</td>107 <td>{{$m.Added}}</td>108 <td>{{$m.Deleted}}</td>109 <td>{{$m.New}}</td>110 <td>{{$m.Repros}}</td>111 <td>{{$m.SentRepros}}</td>112 <td>{{$m.RecvRepros}}</td>113 </tr>114 {{end}}115</table>116<br><br>117Log:118<br>119<textarea id="log_textarea" readonly rows="50">120{{.Log}}121</textarea>122<script>123 var textarea = document.getElementById("log_textarea");124 textarea.scrollTop = textarea.scrollHeight;125</script>126</body></html>...
Recv
Using AI Code Generation
1import "fmt"2func main(){3 fmt.Println("t.a = ",t.a)4 fmt.Println("t.b = ",t.b)5 fmt.Println("t.c = ",t.c)6 fmt.Println("t.d = ",t.d)7 t.recv()8}9import "fmt"10func main(){11 fmt.Println("t.a = ",t.a)12 fmt.Println("t.b = ",t.b)13 fmt.Println("t.c = ",t.c)14 fmt.Println("t.d = ",t.d)15 t.recv()16}17import "fmt"18func main(){19 fmt.Println("t.a = ",t.a)20 fmt.Println("t.b = ",t.b)21 fmt.Println("t.c = ",t.c)22 fmt.Println("t.d = ",t.d)23 t.recv()24}25import "fmt"26func main(){27 fmt.Println("t.a = ",t.a)28 fmt.Println("t.b = ",t.b)29 fmt.Println("t.c = ",t.c)30 fmt.Println("t.d = ",t.d)31 t.recv()32}33import "fmt"34func main(){35 fmt.Println("t.a = ",t.a)36 fmt.Println("
Recv
Using AI Code Generation
1import (2type td struct {3}4func main() {5 fmt.Println(t)6 fmt.Println(reflect.TypeOf(t))7}8{10 Hello 3.14159}9import (10type td struct {11}12func (t td) Recv() {13 fmt.Println(t)14 fmt.Println(reflect.TypeOf(t))15}16func main() {17 t.Recv()18}19{10 Hello 3.14159}20import (21type td struct {22}23func (t *td) Recv() {24 fmt.Println(t)25 fmt.Println(reflect.TypeOf(t))26}27func main() {28 t.Recv()29}30&{10 Hello 3.14159}31import (32type td struct {33}34func (t *td) Recv() {35 fmt.Println(t)36 fmt.Println(reflect.TypeOf(t))37}38func main() {39 p.Recv()40}41&{10 Hello 3.14159}42import (43type td struct {44}45func (t *td) Recv
Recv
Using AI Code Generation
1import (2func main() {3 td := test.Td{}4 td.Send(1, 2)5 td.Recv()6 fmt.Println(td)7}8import (9func main() {10 td := test.Td{1,2}11 td.Send(1, 2)12 td.Recv()13 fmt.Println(td)14}15import (16func main() {17 td := test.Td{1,2}18 td.Send(1, 2)19 td.Recv()20 fmt.Println(td)21}22import (23func main() {24 td := test.Td{1,2}25 td.Send(1, 2)26 td.Recv()27 fmt.Println(td)28}29import (30func main() {31 td := test.Td{1,2}32 td.Send(1, 2)33 td.Recv()34 fmt.Println(td)35}
Recv
Using AI Code Generation
1import (2func main() {3 t = td.TD{2, 3}4 fmt.Println("Sum is ", t.Recv())5}6type TD struct {7}8func (t TD) Recv() int {9}10import (11func main() {12 t = td.TD{2, 3}13 fmt.Println("Sum is ", t.Recv())14}
Recv
Using AI Code Generation
1import (2func main() {3 td := td.New()4 td.Init()5 td2 := td.New()6 td2.Init()7 td3 := td.New()8 td3.Init()9 td4 := td.New()10 td4.Init()11 td5 := td.New()12 td5.Init()13 td6 := td.New()14 td6.Init()15 td7 := td.New()16 td7.Init()17 td8 := td.New()18 td8.Init()19 td9 := td.New()20 td9.Init()21 td10 := td.New()22 td10.Init()23 td11 := td.New()24 td11.Init()25 td12 := td.New()26 td12.Init()27 td13 := td.New()28 td13.Init()29 td14 := td.New()30 td14.Init()31 td15 := td.New()32 td15.Init()33 td16 := td.New()34 td16.Init()35 td17 := td.New()36 td17.Init()37 td18 := td.New()38 td18.Init()39 td19 := td.New()40 td19.Init()41 td20 := td.New()42 td20.Init()43 td21 := td.New()44 td21.Init()
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!