@@ -1246,6 +1246,172 @@ describe('Router', function () {
12461246 . expect ( 200 , 'saw GET /bar' , done )
12471247 } )
12481248 } )
1249+
1250+ describe ( 'req.matchedRoutes' , function ( ) {
1251+ it ( 'should be set if there is a match' , function ( done ) {
1252+ var router = new Router ( )
1253+ var server = createServer ( router )
1254+ var matchedRoutes
1255+
1256+ router . get ( '/foo' , function ( req , res , next ) {
1257+ matchedRoutes = req . matchedRoutes
1258+ next ( )
1259+ } )
1260+ router . use ( saw )
1261+
1262+ request ( server )
1263+ . get ( '/foo' )
1264+ . expect ( 200 , 'saw GET /foo' , function ( err , res ) {
1265+ assert . deepEqual ( matchedRoutes , [ '/foo' ] )
1266+ done ( err )
1267+ } )
1268+ } )
1269+
1270+ it ( 'should be undefined if there is not a match' , function ( done ) {
1271+ var router = new Router ( )
1272+ var server = createServer ( router )
1273+ var matchedRoutes
1274+
1275+ router . use ( function ( req , res , next ) {
1276+ matchedRoutes = req . matchedRoutes
1277+ next ( )
1278+ } )
1279+
1280+ request ( server )
1281+ . get ( '/foo' )
1282+ . expect ( 404 , function ( err , res ) {
1283+ assert . strictEqual ( matchedRoutes , undefined )
1284+ done ( err )
1285+ } )
1286+ } )
1287+
1288+ it ( 'should work with sub-routers' , function ( done ) {
1289+ var router = new Router ( )
1290+ var fooRouter = new Router ( )
1291+ var server = createServer ( router )
1292+ var matchedFooRoutes
1293+ var matchedBarRoutes
1294+
1295+ router . use ( '/foo' , function ( req , res , next ) {
1296+ matchedFooRoutes = req . matchedRoutes
1297+ next ( )
1298+ } , fooRouter )
1299+ fooRouter . get ( '/bar' , function ( req , res , next ) {
1300+ matchedBarRoutes = req . matchedRoutes
1301+ next ( )
1302+ } )
1303+ router . use ( saw )
1304+
1305+ request ( server )
1306+ . get ( '/foo/bar' )
1307+ . expect ( 200 , 'saw GET /foo/bar' , function ( err , res ) {
1308+ assert . deepEqual ( matchedFooRoutes , [ '/foo' ] )
1309+ assert . deepEqual ( matchedBarRoutes , [ '/foo' , '/bar' ] )
1310+ done ( err )
1311+ } )
1312+ } )
1313+
1314+ it ( 'should be undefined if sub-router did not match' , function ( done ) {
1315+ var router = new Router ( )
1316+ var fooRouter = new Router ( )
1317+ var server = createServer ( router )
1318+ var matchedRoutes
1319+
1320+ router . use ( '/foo' , fooRouter )
1321+ fooRouter . get ( '/bar' , function ( req , res , next ) {
1322+ matchedRoutes = req . matchedRoutes
1323+ next ( )
1324+ } )
1325+ router . use ( saw )
1326+
1327+ request ( server )
1328+ . get ( '/foo/baz' )
1329+ . expect ( 200 , 'saw GET /foo/baz' , function ( err , res ) {
1330+ assert . strictEqual ( matchedRoutes , undefined )
1331+ done ( err )
1332+ } )
1333+ } )
1334+
1335+ it ( 'should work with regexp-defined routes' , function ( done ) {
1336+ var router = new Router ( )
1337+ var server = createServer ( router )
1338+ var matchedRoutes
1339+ var regexp = / f o + /
1340+
1341+ router . get ( regexp , function ( req , res , next ) {
1342+ matchedRoutes = req . matchedRoutes
1343+ next ( )
1344+ } )
1345+ router . use ( saw )
1346+
1347+ request ( server )
1348+ . get ( '/foo' )
1349+ . expect ( 200 , 'saw GET /foo' , function ( err , res ) {
1350+ assert . deepEqual ( matchedRoutes , [ regexp ] )
1351+ done ( err )
1352+ } )
1353+ } )
1354+
1355+ it ( 'should support routes defined with arrays of paths' , function ( done ) {
1356+ var router = new Router ( )
1357+ var server = createServer ( router )
1358+ var matchedRoutes
1359+
1360+ router . get ( [ '/foo' , '/bar/:id' ] , function ( req , res , next ) {
1361+ matchedRoutes = req . matchedRoutes
1362+ next ( )
1363+ } )
1364+ router . use ( saw )
1365+
1366+ request ( server )
1367+ . get ( '/foo' )
1368+ . expect ( 200 , 'saw GET /foo' , function ( err , res ) {
1369+ if ( err ) {
1370+ return done ( err )
1371+ }
1372+ assert . deepEqual ( matchedRoutes , [ '/foo' ] )
1373+
1374+ request ( server )
1375+ . get ( '/bar/1' )
1376+ . expect ( 200 , 'saw GET /bar/1' , function ( err , res ) {
1377+ if ( err ) {
1378+ return done ( err )
1379+ }
1380+ assert . deepEqual ( matchedRoutes , [ '/bar/:id' ] )
1381+ done ( )
1382+ } )
1383+ } )
1384+ } )
1385+
1386+ it ( 'should support sibling routes at same path' , function ( done ) {
1387+ var router = new Router ( )
1388+ var server = createServer ( router )
1389+ var matchedRoutes1
1390+ var matchedRoutes2
1391+
1392+ router . get ( '/foo' , function ( req , res , next ) {
1393+ matchedRoutes1 = req . matchedRoutes
1394+ next ( )
1395+ } )
1396+ router . get ( '/foo' , function ( req , res , next ) {
1397+ matchedRoutes2 = req . matchedRoutes
1398+ next ( )
1399+ } )
1400+ router . use ( saw )
1401+
1402+ request ( server )
1403+ . get ( '/foo' )
1404+ . expect ( 200 , 'saw GET /foo' , function ( err , res ) {
1405+ if ( err ) {
1406+ return done ( err )
1407+ }
1408+ assert . deepEqual ( matchedRoutes1 , [ '/foo' ] )
1409+ assert . deepEqual ( matchedRoutes2 , [ '/foo' ] )
1410+
1411+ done ( )
1412+ } )
1413+ } )
1414+ } )
12491415} )
12501416
12511417function helloWorld ( req , res ) {
0 commit comments