@@ -1406,122 +1406,101 @@ describe("ngAnimate $animateCss", function() {
1406
1406
} ) ;
1407
1407
1408
1408
describe ( 'transitionend/animationend event listeners' , function ( ) {
1409
- var element , callLog , proxyListener , origListener , type , progress ;
1409
+ var element , elementOnSpy , elementOffSpy , progress ;
1410
+
1411
+ function setStyles ( event ) {
1412
+ switch ( event ) {
1413
+ case TRANSITIONEND_EVENT :
1414
+ ss . addRule ( '.ng-enter' , 'transition: 10s linear all;' ) ;
1415
+ progress = transitionProgress ;
1416
+ break ;
1417
+ case ANIMATIONEND_EVENT :
1418
+ ss . addRule ( '.ng-enter' , ANIMATION_PROP + ':animation 10s;' ) ;
1419
+ progress = keyframeProgress ;
1420
+ break ;
1421
+ }
1422
+ }
1410
1423
1411
1424
beforeEach ( inject ( function ( $rootElement , $document ) {
1412
-
1413
1425
element = jqLite ( '<div></div>' ) ;
1414
1426
$rootElement . append ( element ) ;
1415
1427
jqLite ( $document [ 0 ] . body ) . append ( $rootElement ) ;
1416
1428
1417
- callLog = { } ;
1418
-
1419
- var origOn = element . on ,
1420
- origOff = element . off ;
1421
-
1422
- proxyListener = function ( ) {
1423
- callLog [ type ] = callLog [ type ] ++ || 1 ;
1424
- origListener . apply ( this , arguments ) ;
1425
- } ;
1426
-
1427
- // Overwrite the .on function to log calls to the event listeners
1428
- element . on = function ( ) {
1429
- origListener = arguments [ 1 ] ;
1430
- type = arguments [ 0 ] ;
1431
- origOn . call ( this , arguments [ 0 ] , proxyListener ) ;
1432
- } ;
1433
-
1434
- // Make sure the .off function removes the proxyListener
1435
- element . off = function ( ) {
1436
- origOff . call ( this , arguments [ 0 ] , proxyListener ) ;
1437
- } ;
1438
-
1429
+ elementOnSpy = spyOn ( element , 'on' ) . andCallThrough ( ) ;
1430
+ elementOffSpy = spyOn ( element , 'off' ) . andCallThrough ( ) ;
1439
1431
} ) ) ;
1440
1432
1441
1433
they ( 'should remove the $prop event listeners on cancel' ,
1442
- [ TRANSITIONEND_EVENT , ANIMATIONEND_EVENT ] ,
1443
- function ( event ) { inject ( function ( $animateCss ) {
1444
-
1445
- switch ( event ) {
1446
- case TRANSITIONEND_EVENT :
1447
- progress = bind ( this , transitionProgress , element , 10 ) ;
1448
- break ;
1449
- case ANIMATIONEND_EVENT :
1450
- progress = bind ( this , keyframeProgress , element , 10 ) ;
1451
- break ;
1452
- }
1434
+ [ TRANSITIONEND_EVENT , ANIMATIONEND_EVENT ] , function ( event ) {
1435
+ inject ( function ( $animateCss ) {
1453
1436
1454
- var animator = $animateCss ( element , {
1455
- duration : 10 ,
1456
- to : { 'background' : 'red' }
1457
- } ) ;
1437
+ setStyles ( event ) ;
1458
1438
1459
- var runner = animator . start ( ) ;
1460
- triggerAnimationStartFrame ( ) ;
1439
+ var animator = $animateCss ( element , {
1440
+ event : 'enter' ,
1441
+ structural : true
1442
+ } ) ;
1461
1443
1462
- runner . cancel ( ) ;
1444
+ var runner = animator . start ( ) ;
1445
+ triggerAnimationStartFrame ( ) ;
1463
1446
1464
- // Trigger an end event
1465
- progress ( ) ;
1447
+ expect ( elementOnSpy ) . toHaveBeenCalledOnce ( ) ;
1448
+ expect ( elementOnSpy . mostRecentCall . args [ 0 ] ) . toBe ( event ) ;
1466
1449
1467
- expect ( callLog [ event ] ) . toBeFalsy ( ) ;
1468
- } ) ;
1450
+ runner . cancel ( ) ;
1451
+
1452
+ expect ( elementOffSpy ) . toHaveBeenCalledOnce ( ) ;
1453
+ expect ( elementOffSpy . mostRecentCall . args [ 0 ] ) . toBe ( event ) ;
1454
+ } ) ;
1469
1455
} ) ;
1470
1456
1471
1457
they ( "should remove the $prop event listener when the animation is closed" ,
1472
1458
[ TRANSITIONEND_EVENT , ANIMATIONEND_EVENT ] , function ( event ) {
1473
- inject ( function ( $animateCss ) {
1459
+ inject ( function ( $animateCss ) {
1474
1460
1475
- switch ( event ) {
1476
- case TRANSITIONEND_EVENT :
1477
- ss . addRule ( '.ng-enter' , TRANSITION_PROP + '1s linear all;' +
1478
- TRANSITION_PROP + '-duration:10s;' ) ;
1479
-
1480
- progress = bind ( this , transitionProgress , element , 10 ) ;
1481
- break ;
1482
- case ANIMATIONEND_EVENT :
1483
- ss . addRule ( '.ng-enter' , ANIMATION_PROP + ':animation 10s;' ) ;
1484
- progress = bind ( this , keyframeProgress , element , 10 ) ;
1485
- break ;
1486
- }
1461
+ setStyles ( event ) ;
1487
1462
1488
- var animator = $animateCss ( element , {
1489
- event : 'enter' ,
1490
- structural : true
1491
- } ) ;
1463
+ var animator = $animateCss ( element , {
1464
+ event : 'enter' ,
1465
+ structural : true
1466
+ } ) ;
1492
1467
1493
- var runner = animator . start ( ) ;
1494
- triggerAnimationStartFrame ( ) ;
1468
+ var runner = animator . start ( ) ;
1469
+ triggerAnimationStartFrame ( ) ;
1495
1470
1496
- progress ( ) ;
1497
- expect ( element ) . not . toHaveClass ( 'ng-enter ng-enter-active' ) ;
1471
+ expect ( elementOnSpy ) . toHaveBeenCalledOnce ( ) ;
1472
+ expect ( elementOnSpy . mostRecentCall . args [ 0 ] ) . toBe ( event ) ;
1498
1473
1499
- // Trigger another end event
1500
- progress ( ) ;
1474
+ progress ( element , 10 ) ;
1501
1475
1502
- expect ( callLog [ event ] ) . toBe ( 1 ) ;
1503
- } ) ;
1476
+ expect ( elementOffSpy ) . toHaveBeenCalledOnce ( ) ;
1477
+ expect ( elementOffSpy . mostRecentCall . args [ 0 ] ) . toBe ( event ) ;
1478
+ } ) ;
1504
1479
} ) ;
1505
1480
1506
- it ( "should remove the transitionend event listener when the closing timeout occurs" ,
1507
- inject ( function ( $animateCss , $document , $rootElement , $timeout ) {
1481
+ they ( "should remove the $prop event listener when the closing timeout occurs" ,
1482
+ [ TRANSITIONEND_EVENT , ANIMATIONEND_EVENT ] , function ( event ) {
1483
+ inject ( function ( $animateCss , $timeout ) {
1508
1484
1509
- ss . addRule ( '.ng-enter' , 'transition:10s linear all;' ) ;
1485
+ setStyles ( event ) ;
1510
1486
1511
- var animator = $animateCss ( element , {
1512
- event : 'enter' ,
1513
- structural : true
1514
- } ) ;
1487
+ var animator = $animateCss ( element , {
1488
+ event : 'enter' ,
1489
+ structural : true
1490
+ } ) ;
1515
1491
1516
- animator . start ( ) ;
1517
- triggerAnimationStartFrame ( ) ;
1518
- $timeout . flush ( 15000 ) ;
1492
+ animator . start ( ) ;
1493
+ triggerAnimationStartFrame ( ) ;
1519
1494
1520
- // Force an transitionend event
1521
- transitionProgress ( element , 10 ) ;
1495
+ expect ( elementOnSpy ) . toHaveBeenCalledOnce ( ) ;
1496
+ expect ( elementOnSpy . mostRecentCall . args [ 0 ] ) . toBe ( event ) ;
1522
1497
1523
- expect ( callLog [ TRANSITIONEND_EVENT ] ) . toBeFalsy ( ) ;
1524
- } ) ) ;
1498
+ $timeout . flush ( 15000 ) ;
1499
+
1500
+ expect ( elementOffSpy ) . toHaveBeenCalledOnce ( ) ;
1501
+ expect ( elementOffSpy . mostRecentCall . args [ 0 ] ) . toBe ( event ) ;
1502
+ } ) ;
1503
+ } ) ;
1525
1504
} ) ;
1526
1505
} ) ;
1527
1506
0 commit comments