@@ -954,6 +954,59 @@ describe('$aria', function() {
954
954
expect ( clickEvents ) . toEqual ( [ 'div(true)' , 'li(true)' , 'div(true)' , 'li(true)' ] ) ;
955
955
} ) ;
956
956
957
+ it ( 'should trigger a click in browsers that provide `event.which` instead of `event.keyCode`' ,
958
+ function ( ) {
959
+ compileElement (
960
+ '<section>' +
961
+ '<div ng-click="onClick($event)"></div>' +
962
+ '<ul><li ng-click="onClick($event)"></li></ul>' +
963
+ '</section>' ) ;
964
+
965
+ var divElement = element . find ( 'div' ) ;
966
+ var liElement = element . find ( 'li' ) ;
967
+
968
+ divElement . triggerHandler ( { type : 'keydown' , which : 13 } ) ;
969
+ liElement . triggerHandler ( { type : 'keydown' , which : 13 } ) ;
970
+ divElement . triggerHandler ( { type : 'keydown' , which : 32 } ) ;
971
+ liElement . triggerHandler ( { type : 'keydown' , which : 32 } ) ;
972
+
973
+ expect ( clickEvents ) . toEqual ( [ 'div(true)' , 'li(true)' , 'div(true)' , 'li(true)' ] ) ;
974
+ }
975
+ ) ;
976
+
977
+ it ( 'should not prevent default keyboard action if the target element has editable content' ,
978
+ function ( ) {
979
+ compileElement (
980
+ '<section>' +
981
+ '<div ng-click="onClick($event)" ng-attr-contenteditable="{{ edit }}"></div>' +
982
+ '<ul ng-click="onClick($event)"><li ng-attr-contenteditable="{{ edit }}"></li></ul>' +
983
+ '</section>' ) ;
984
+
985
+ var divElement = element . find ( 'div' ) ;
986
+ var ulElement = element . find ( 'ul' ) ;
987
+ var liElement = element . find ( 'li' ) ;
988
+
989
+ // Using `browserTrigger()`, because it supports event bubbling.
990
+
991
+ // Element are not editable yet.
992
+ browserTrigger ( divElement , 'keydown' , { bubbles : true , cancelable : true , keyCode : 13 } ) ;
993
+ browserTrigger ( ulElement , 'keydown' , { bubbles : true , cancelable : true , keyCode : 32 } ) ;
994
+ browserTrigger ( liElement , 'keydown' , { bubbles : true , cancelable : true , keyCode : 13 } ) ;
995
+
996
+ expect ( clickEvents ) . toEqual ( [ 'div(true)' , 'ul(true)' , 'li(true)' ] ) ;
997
+
998
+ clickEvents = [ ] ;
999
+ scope . $apply ( 'edit = true' ) ;
1000
+
1001
+ // Element are now editable.
1002
+ browserTrigger ( divElement , 'keydown' , { bubbles : true , cancelable : true , keyCode : 32 } ) ;
1003
+ browserTrigger ( ulElement , 'keydown' , { bubbles : true , cancelable : true , keyCode : 13 } ) ;
1004
+ browserTrigger ( liElement , 'keydown' , { bubbles : true , cancelable : true , keyCode : 32 } ) ;
1005
+
1006
+ expect ( clickEvents ) . toEqual ( [ 'div(false)' , 'ul(true)' , 'li(false)' ] ) ;
1007
+ }
1008
+ ) ;
1009
+
957
1010
they ( 'should not prevent default keyboard action if an interactive $type element' +
958
1011
'is nested inside ng-click' , nodeBlackList , function ( elementType ) {
959
1012
function createHTML ( type ) {
@@ -981,26 +1034,6 @@ describe('$aria', function() {
981
1034
}
982
1035
) ;
983
1036
984
- it ( 'should trigger a click in browsers that provide `event.which` instead of `event.keyCode`' ,
985
- function ( ) {
986
- compileElement (
987
- '<section>' +
988
- '<div ng-click="onClick($event)"></div>' +
989
- '<ul><li ng-click="onClick($event)"></li></ul>' +
990
- '</section>' ) ;
991
-
992
- var divElement = element . find ( 'div' ) ;
993
- var liElement = element . find ( 'li' ) ;
994
-
995
- divElement . triggerHandler ( { type : 'keydown' , which : 13 } ) ;
996
- liElement . triggerHandler ( { type : 'keydown' , which : 13 } ) ;
997
- divElement . triggerHandler ( { type : 'keydown' , which : 32 } ) ;
998
- liElement . triggerHandler ( { type : 'keydown' , which : 32 } ) ;
999
-
1000
- expect ( clickEvents ) . toEqual ( [ 'div(true)' , 'li(true)' , 'div(true)' , 'li(true)' ] ) ;
1001
- }
1002
- ) ;
1003
-
1004
1037
they ( 'should not bind to key events if there is existing `ng-$prop`' ,
1005
1038
[ 'keydown' , 'keypress' , 'keyup' ] , function ( eventName ) {
1006
1039
scope . onKeyEvent = jasmine . createSpy ( 'onKeyEvent' ) ;
0 commit comments