Skip to content

Commit ecc5fc8

Browse files
authored
Merge pull request #68 from WheeskyJack/WheeskyJack-patch-2a
Update node_test.go with TestWildcardNodeMatchMiddleware test case
2 parents 5976a56 + 5b574a0 commit ecc5fc8

File tree

1 file changed

+68
-9
lines changed

1 file changed

+68
-9
lines changed

mux/node_test.go

Lines changed: 68 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -384,21 +384,80 @@ func TestStaticNodeMatchMiddleware(t *testing.T) {
384384
runMiddlewareTests(tests, t)
385385
}
386386

387+
func TestWildcardNodeMatchMiddleware(t *testing.T) {
388+
paramSize := 3
389+
middleware1 := buildMockMiddlewareFunc("1")
390+
middleware2 := buildMockMiddlewareFunc("2")
391+
middleware3 := buildMockMiddlewareFunc("3")
392+
middleware4 := buildMockMiddlewareFunc("4")
393+
mw1 := middleware.NewCollection(middleware1)
394+
mw2 := middleware.NewCollection(middleware2, middleware3)
395+
mw3 := middleware.NewCollection(middleware4)
396+
397+
node1 := NewNode("test", uint8(paramSize))
398+
node1.PrependMiddleware(mw1)
399+
item := NewNode("{item}", node1.MaxParamsSize()) // wildcardnode
400+
item.PrependMiddleware(mw2)
401+
view := NewNode("view", node1.MaxParamsSize()+1)
402+
view.PrependMiddleware(mw3)
403+
node1.WithChildren(node1.Tree().withNode(item).sort())
404+
item.WithChildren(item.Tree().withNode(view).sort())
405+
node1.WithChildren(node1.Tree().Compile())
406+
407+
node2 := NewNode("test", uint8(paramSize))
408+
node2.PrependMiddleware(mw1)
409+
item2 := NewNode("{item}", node1.MaxParamsSize()) // wildcardnode
410+
item2.PrependMiddleware(mw2)
411+
item2.SkipSubPath()
412+
node2.WithChildren(node2.Tree().withNode(item2).sort())
413+
node2.WithChildren(node2.Tree().Compile())
414+
415+
tests := []middlewareTest{
416+
{
417+
name: "WildcardNode Exact match",
418+
node: node1,
419+
path: "test/item1",
420+
expectedResult: middleware.NewCollection(middleware1, middleware2, middleware3),
421+
},
422+
{
423+
name: "WildcardNode Subpath match with skipSubPath",
424+
node: node2,
425+
path: "test/item2/random",
426+
expectedResult: middleware.NewCollection(middleware1, middleware2, middleware3),
427+
},
428+
{
429+
name: "WildcardNode Subpath match without skipSubPath",
430+
node: node1,
431+
path: "test/item3/view",
432+
expectedResult: middleware.NewCollection(middleware1, middleware2, middleware3, middleware4),
433+
},
434+
{
435+
name: "WildcardNode Subpath No match",
436+
node: node1,
437+
path: "test/item4/nomatch",
438+
expectedResult: middleware.NewCollection(middleware1, middleware2, middleware3),
439+
},
440+
}
441+
442+
runMiddlewareTests(tests, t)
443+
}
444+
387445
func runMiddlewareTests(tests []middlewareTest, t *testing.T) {
388446
for _, tt := range tests {
389447
t.Run(tt.name, func(t *testing.T) {
390448
got := tt.node.MatchMiddleware(tt.path)
391449
if len(got) != len(tt.expectedResult) {
392450
t.Errorf("%s: middleware length mismatch: got= %v, want %v", tt.name, got, tt.expectedResult)
393-
}
394-
for k, v := range tt.expectedResult {
395-
// reflect.DeepEqual do not work for function values.
396-
// hence compare the pointers of functions as a substitute.
397-
// function pointers are unique to each function, even if the functions have the same code.
398-
expectedPointer := reflect.ValueOf(v).Pointer()
399-
gotPointer := reflect.ValueOf(got[k]).Pointer()
400-
if expectedPointer != gotPointer {
401-
t.Errorf("%s: middleware mismatch: got= %v, want %v", tt.name, v, got[k])
451+
} else {
452+
for k, v := range tt.expectedResult {
453+
// reflect.DeepEqual do not work for function values.
454+
// hence compare the pointers of functions as a substitute.
455+
// function pointers are unique to each function, even if the functions have the same code.
456+
expectedPointer := reflect.ValueOf(v).Pointer()
457+
gotPointer := reflect.ValueOf(got[k]).Pointer()
458+
if expectedPointer != gotPointer {
459+
t.Errorf("%s: middleware mismatch: got= %v, want %v", tt.name, v, got[k])
460+
}
402461
}
403462
}
404463
})

0 commit comments

Comments
 (0)