@@ -1294,4 +1294,125 @@ describe('link', () => {
12941294 emitter . unlink ( 'foo' ) ;
12951295 } ) . to . throw ( 'Expected argument to be a HookEmitter.' ) ;
12961296 } ) ;
1297+
1298+ it ( 'should link nested emitted events' , async ( ) => {
1299+ let aCount = 0 ;
1300+ let bCount = 0 ;
1301+ let cCount = 0 ;
1302+
1303+ const a = new HookEmitter ( ) . on ( 'foo' , ( ) => aCount ++ ) ;
1304+ const b = new HookEmitter ( ) . on ( 'foo' , ( ) => bCount ++ ) ;
1305+ const c = new HookEmitter ( ) . on ( 'foo' , ( ) => cCount ++ ) ;
1306+
1307+ await a . emit ( 'foo' ) ;
1308+ expect ( aCount ) . to . equal ( 1 ) ;
1309+ expect ( bCount ) . to . equal ( 0 ) ;
1310+ expect ( cCount ) . to . equal ( 0 ) ;
1311+
1312+ a . link ( b ) ;
1313+
1314+ await a . emit ( 'foo' ) ;
1315+ expect ( aCount ) . to . equal ( 2 ) ;
1316+ expect ( bCount ) . to . equal ( 1 ) ;
1317+ expect ( cCount ) . to . equal ( 0 ) ;
1318+
1319+ await b . emit ( 'foo' ) ;
1320+ expect ( aCount ) . to . equal ( 2 ) ;
1321+ expect ( bCount ) . to . equal ( 2 ) ;
1322+ expect ( cCount ) . to . equal ( 0 ) ;
1323+
1324+ b . link ( c ) ;
1325+
1326+ await a . emit ( 'foo' ) ;
1327+ expect ( aCount ) . to . equal ( 3 ) ;
1328+ expect ( bCount ) . to . equal ( 3 ) ;
1329+ expect ( cCount ) . to . equal ( 1 ) ;
1330+
1331+ await b . emit ( 'foo' ) ;
1332+ expect ( aCount ) . to . equal ( 3 ) ;
1333+ expect ( bCount ) . to . equal ( 4 ) ;
1334+ expect ( cCount ) . to . equal ( 2 ) ;
1335+ } ) ;
1336+
1337+ it ( 'should link nested emitted hooks' , async ( ) => {
1338+ let aCount = 0 ;
1339+ let bCount = 0 ;
1340+ let cCount = 0 ;
1341+
1342+ let ahCount = 0 ;
1343+ let bhCount = 0 ;
1344+ let chCount = 0 ;
1345+
1346+ const a = new HookEmitter ( ) . on ( 'foo' , ( ) => aCount ++ ) ;
1347+ const b = new HookEmitter ( ) . on ( 'foo' , ( ) => bCount ++ ) ;
1348+ const c = new HookEmitter ( ) . on ( 'foo' , ( ) => cCount ++ ) ;
1349+
1350+ a . name = 'a' ;
1351+ b . name = 'b' ;
1352+ c . name = 'c' ;
1353+
1354+ const afn = a . hook ( 'foo' , ( ) => ahCount ++ ) ;
1355+ const bfn = b . hook ( 'foo' , ( ) => bhCount ++ ) ;
1356+ const cfn = c . hook ( 'foo' , ( ) => chCount ++ ) ;
1357+
1358+ await afn ( ) ;
1359+ expect ( ahCount ) . to . equal ( 1 ) ;
1360+ expect ( bhCount ) . to . equal ( 0 ) ;
1361+ expect ( chCount ) . to . equal ( 0 ) ;
1362+ expect ( aCount ) . to . equal ( 1 ) ;
1363+ expect ( bCount ) . to . equal ( 0 ) ;
1364+ expect ( cCount ) . to . equal ( 0 ) ;
1365+
1366+ await bfn ( ) ;
1367+ expect ( ahCount ) . to . equal ( 1 ) ;
1368+ expect ( bhCount ) . to . equal ( 1 ) ;
1369+ expect ( chCount ) . to . equal ( 0 ) ;
1370+ expect ( aCount ) . to . equal ( 1 ) ;
1371+ expect ( bCount ) . to . equal ( 1 ) ;
1372+ expect ( cCount ) . to . equal ( 0 ) ;
1373+
1374+ a . link ( b ) ;
1375+
1376+ await afn ( ) ;
1377+ expect ( ahCount ) . to . equal ( 2 ) ;
1378+ expect ( bhCount ) . to . equal ( 1 ) ;
1379+ expect ( chCount ) . to . equal ( 0 ) ;
1380+ expect ( aCount ) . to . equal ( 2 ) ;
1381+ expect ( bCount ) . to . equal ( 2 ) ;
1382+ expect ( cCount ) . to . equal ( 0 ) ;
1383+
1384+ await bfn ( ) ;
1385+ expect ( ahCount ) . to . equal ( 2 ) ;
1386+ expect ( bhCount ) . to . equal ( 2 ) ;
1387+ expect ( chCount ) . to . equal ( 0 ) ;
1388+ expect ( aCount ) . to . equal ( 2 ) ;
1389+ expect ( bCount ) . to . equal ( 3 ) ;
1390+ expect ( cCount ) . to . equal ( 0 ) ;
1391+
1392+ b . link ( c ) ;
1393+
1394+ await afn ( ) ;
1395+ expect ( ahCount ) . to . equal ( 3 ) ;
1396+ expect ( bhCount ) . to . equal ( 2 ) ;
1397+ expect ( chCount ) . to . equal ( 0 ) ;
1398+ expect ( aCount ) . to . equal ( 3 ) ;
1399+ expect ( bCount ) . to . equal ( 4 ) ;
1400+ expect ( cCount ) . to . equal ( 1 ) ;
1401+
1402+ await bfn ( ) ;
1403+ expect ( ahCount ) . to . equal ( 3 ) ;
1404+ expect ( bhCount ) . to . equal ( 3 ) ;
1405+ expect ( chCount ) . to . equal ( 0 ) ;
1406+ expect ( aCount ) . to . equal ( 3 ) ;
1407+ expect ( bCount ) . to . equal ( 5 ) ;
1408+ expect ( cCount ) . to . equal ( 2 ) ;
1409+
1410+ await cfn ( ) ;
1411+ expect ( ahCount ) . to . equal ( 3 ) ;
1412+ expect ( bhCount ) . to . equal ( 3 ) ;
1413+ expect ( chCount ) . to . equal ( 1 ) ;
1414+ expect ( aCount ) . to . equal ( 3 ) ;
1415+ expect ( bCount ) . to . equal ( 5 ) ;
1416+ expect ( cCount ) . to . equal ( 3 ) ;
1417+ } ) ;
12971418} ) ;
0 commit comments