@@ -707,8 +707,12 @@ describe('jqLite', function() {
707707 describe ( 'class' , function ( ) {
708708
709709 it ( 'should properly do with SVG elements' , function ( ) {
710- // this is a jqLite & SVG only test (jquery doesn't behave this way right now, which is a bug)
711- if ( ! window . SVGElement || ! _jqLiteMode ) return ;
710+ // This is not working correctly in jQuery prior to v3.0.
711+ // See https://github.com/jquery/jquery/issues/2199 for details.
712+ var jQueryVersion = window . jQuery && window . jQuery . fn . jquery . split ( '.' ) [ 0 ] ;
713+ var jQuery3xOrNewer = jQueryVersion && ( Number ( jQueryVersion ) >= 3 ) ;
714+ if ( ! _jqLiteMode && ! jQuery3xOrNewer ) return ;
715+
712716 var svg = jqLite ( '<svg><rect></rect></svg>' ) ;
713717 var rect = svg . children ( ) ;
714718
@@ -1532,6 +1536,10 @@ describe('jqLite', function() {
15321536
15331537
15341538 describe ( 'native listener deregistration' , function ( ) {
1539+ var jQueryVersionString = window . jQuery && window . jQuery . fn . jquery ;
1540+ var jQueryMajor = jQueryVersionString && Number ( jQueryVersionString . split ( '.' ) [ 0 ] ) ;
1541+ var jQueryMinor = jQueryVersionString && Number ( jQueryVersionString . split ( '.' ) [ 1 ] ) ;
1542+ var jQuery21 = jQueryMajor === 2 && jQueryMinor === 1 ;
15351543
15361544 it ( 'should deregister the native listener when all jqLite listeners for given type are gone ' +
15371545 'after off("eventName", listener) call' , function ( ) {
@@ -1543,12 +1551,22 @@ describe('jqLite', function() {
15431551 var jqLiteListener = function ( ) { } ;
15441552 aElem . on ( 'click' , jqLiteListener ) ;
15451553
1546- expect ( addEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'click' , jasmine . any ( Function ) , false ) ;
1554+ // jQuery <2.2 passes the non-needed `false` useCapture parameter.
1555+ // See https://github.com/jquery/jquery/issues/2199 for details.
1556+ if ( jQuery21 ) {
1557+ expect ( addEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'click' , jasmine . any ( Function ) , false ) ;
1558+ } else {
1559+ expect ( addEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'click' , jasmine . any ( Function ) ) ;
1560+ }
15471561 nativeListenerFn = addEventListenerSpy . mostRecentCall . args [ 1 ] ;
15481562 expect ( removeEventListenerSpy ) . not . toHaveBeenCalled ( ) ;
15491563
15501564 aElem . off ( 'click' , jqLiteListener ) ;
1551- expect ( removeEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'click' , nativeListenerFn , false ) ;
1565+ if ( jQuery21 ) {
1566+ expect ( removeEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'click' , nativeListenerFn , false ) ;
1567+ } else {
1568+ expect ( removeEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'click' , nativeListenerFn ) ;
1569+ }
15521570 } ) ;
15531571
15541572
@@ -1560,12 +1578,20 @@ describe('jqLite', function() {
15601578 var nativeListenerFn ;
15611579
15621580 aElem . on ( 'click' , function ( ) { } ) ;
1563- expect ( addEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'click' , jasmine . any ( Function ) , false ) ;
1581+ if ( jQuery21 ) {
1582+ expect ( addEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'click' , jasmine . any ( Function ) , false ) ;
1583+ } else {
1584+ expect ( addEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'click' , jasmine . any ( Function ) ) ;
1585+ }
15641586 nativeListenerFn = addEventListenerSpy . mostRecentCall . args [ 1 ] ;
15651587 expect ( removeEventListenerSpy ) . not . toHaveBeenCalled ( ) ;
15661588
15671589 aElem . off ( 'click' ) ;
1568- expect ( removeEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'click' , nativeListenerFn , false ) ;
1590+ if ( jQuery21 ) {
1591+ expect ( removeEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'click' , nativeListenerFn , false ) ;
1592+ } else {
1593+ expect ( removeEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'click' , nativeListenerFn ) ;
1594+ }
15691595 } ) ;
15701596
15711597
@@ -1577,19 +1603,32 @@ describe('jqLite', function() {
15771603 var nativeListenerFn ;
15781604
15791605 aElem . on ( 'click' , function ( ) { } ) ;
1580- expect ( addEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'click' , jasmine . any ( Function ) , false ) ;
1606+ if ( jQuery21 ) {
1607+ expect ( addEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'click' , jasmine . any ( Function ) , false ) ;
1608+ } else {
1609+ expect ( addEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'click' , jasmine . any ( Function ) ) ;
1610+ }
15811611 nativeListenerFn = addEventListenerSpy . mostRecentCall . args [ 1 ] ;
15821612 addEventListenerSpy . reset ( ) ;
15831613
15841614 aElem . on ( 'dblclick' , function ( ) { } ) ;
1585- expect ( addEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'dblclick' , nativeListenerFn , false ) ;
1615+ if ( jQuery21 ) {
1616+ expect ( addEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'dblclick' , nativeListenerFn , false ) ;
1617+ } else {
1618+ expect ( addEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'dblclick' , nativeListenerFn ) ;
1619+ }
15861620
15871621 expect ( removeEventListenerSpy ) . not . toHaveBeenCalled ( ) ;
15881622
15891623 aElem . off ( 'click dblclick' ) ;
15901624
1591- expect ( removeEventListenerSpy ) . toHaveBeenCalledWith ( 'click' , nativeListenerFn , false ) ;
1592- expect ( removeEventListenerSpy ) . toHaveBeenCalledWith ( 'dblclick' , nativeListenerFn , false ) ;
1625+ if ( jQuery21 ) {
1626+ expect ( removeEventListenerSpy ) . toHaveBeenCalledWith ( 'click' , nativeListenerFn , false ) ;
1627+ expect ( removeEventListenerSpy ) . toHaveBeenCalledWith ( 'dblclick' , nativeListenerFn , false ) ;
1628+ } else {
1629+ expect ( removeEventListenerSpy ) . toHaveBeenCalledWith ( 'click' , nativeListenerFn ) ;
1630+ expect ( removeEventListenerSpy ) . toHaveBeenCalledWith ( 'dblclick' , nativeListenerFn ) ;
1631+ }
15931632 expect ( removeEventListenerSpy . callCount ) . toBe ( 2 ) ;
15941633 } ) ;
15951634
@@ -1602,17 +1641,30 @@ describe('jqLite', function() {
16021641 var nativeListenerFn ;
16031642
16041643 aElem . on ( 'click' , function ( ) { } ) ;
1605- expect ( addEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'click' , jasmine . any ( Function ) , false ) ;
1644+ if ( jQuery21 ) {
1645+ expect ( addEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'click' , jasmine . any ( Function ) , false ) ;
1646+ } else {
1647+ expect ( addEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'click' , jasmine . any ( Function ) ) ;
1648+ }
16061649 nativeListenerFn = addEventListenerSpy . mostRecentCall . args [ 1 ] ;
16071650 addEventListenerSpy . reset ( ) ;
16081651
16091652 aElem . on ( 'dblclick' , function ( ) { } ) ;
1610- expect ( addEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'dblclick' , nativeListenerFn , false ) ;
1653+ if ( jQuery21 ) {
1654+ expect ( addEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'dblclick' , nativeListenerFn , false ) ;
1655+ } else {
1656+ expect ( addEventListenerSpy ) . toHaveBeenCalledOnceWith ( 'dblclick' , nativeListenerFn ) ;
1657+ }
16111658
16121659 aElem . off ( ) ;
16131660
1614- expect ( removeEventListenerSpy ) . toHaveBeenCalledWith ( 'click' , nativeListenerFn , false ) ;
1615- expect ( removeEventListenerSpy ) . toHaveBeenCalledWith ( 'dblclick' , nativeListenerFn , false ) ;
1661+ if ( jQuery21 ) {
1662+ expect ( removeEventListenerSpy ) . toHaveBeenCalledWith ( 'click' , nativeListenerFn , false ) ;
1663+ expect ( removeEventListenerSpy ) . toHaveBeenCalledWith ( 'dblclick' , nativeListenerFn , false ) ;
1664+ } else {
1665+ expect ( removeEventListenerSpy ) . toHaveBeenCalledWith ( 'click' , nativeListenerFn ) ;
1666+ expect ( removeEventListenerSpy ) . toHaveBeenCalledWith ( 'dblclick' , nativeListenerFn ) ;
1667+ }
16161668 expect ( removeEventListenerSpy . callCount ) . toBe ( 2 ) ;
16171669 } ) ;
16181670 } ) ;
0 commit comments