@@ -1769,7 +1769,70 @@ func TestPanicOnCapturingGroups(t *testing.T) {
1769
1769
}
1770
1770
1771
1771
func TestRouterInContext (t * testing.T ) {
1772
- // TODO Write tests for router in context
1772
+ router := NewRouter ()
1773
+ router .HandleFunc ("/r1" , func (w http.ResponseWriter , r * http.Request ) {
1774
+ contextRouter := CurrentRouter (r )
1775
+ if contextRouter == nil {
1776
+ t .Fatal ("Router not found in context" )
1777
+ return
1778
+ }
1779
+
1780
+ route := contextRouter .Get ("r2" )
1781
+ if route == nil {
1782
+ t .Fatal ("Route with name not found" )
1783
+ return
1784
+ }
1785
+
1786
+ url , err := route .URL ()
1787
+ if err != nil {
1788
+ t .Fatal ("Error while getting url for r2: " , err )
1789
+ return
1790
+ }
1791
+
1792
+ _ , err = w .Write ([]byte (url .String ()))
1793
+ if err != nil {
1794
+ t .Fatalf ("Failed writing HTTP response: %v" , err )
1795
+ }
1796
+ }).Name ("r1" )
1797
+
1798
+ noRouterMsg := []byte ("no-router" )
1799
+ haveRouterMsg := []byte ("have-router" )
1800
+ router .HandleFunc ("/r2" , func (w http.ResponseWriter , r * http.Request ) {
1801
+ var msg []byte
1802
+
1803
+ contextRouter := CurrentRouter (r )
1804
+ if contextRouter == nil {
1805
+ msg = noRouterMsg
1806
+ } else {
1807
+ msg = haveRouterMsg
1808
+ }
1809
+
1810
+ _ , err := w .Write (msg )
1811
+ if err != nil {
1812
+ t .Fatalf ("Failed writing HTTP response: %v" , err )
1813
+ }
1814
+ }).Name ("r2" )
1815
+
1816
+ t .Run ("router in request context get route by name" , func (t * testing.T ) {
1817
+ rw := NewRecorder ()
1818
+ req := newRequest ("GET" , "/r1" )
1819
+
1820
+ router .ServeHTTP (rw , req )
1821
+ if ! bytes .Equal (rw .Body .Bytes (), []byte ("/r2" )) {
1822
+ t .Fatalf ("Expected output to be '/r1' but got '%s'" , rw .Body .String ())
1823
+ }
1824
+ })
1825
+
1826
+ t .Run ("omit router from request context" , func (t * testing.T ) {
1827
+ rw := NewRecorder ()
1828
+ req := newRequest ("GET" , "/r2" )
1829
+
1830
+ router .OmitRouterFromContext (true )
1831
+ router .ServeHTTP (rw , req )
1832
+ if ! bytes .Equal (rw .Body .Bytes (), noRouterMsg ) {
1833
+ t .Fatal ("Router not omitted from context" )
1834
+ }
1835
+ })
1773
1836
}
1774
1837
1775
1838
// ----------------------------------------------------------------------------
0 commit comments