@@ -974,36 +974,90 @@ describe('$aria', function() {
974
974
}
975
975
) ;
976
976
977
- it ( 'should not prevent default keyboard action if the target element has editable content' ,
977
+ fit ( 'should not prevent default keyboard action if the target element has editable content' ,
978
978
function ( ) {
979
+ // Note:
980
+ // `contenteditable` is an enumarated (not a boolean) attribute (see
981
+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/contenteditable).
982
+ // We need to check the following conditions:
983
+ // - No attribute.
984
+ // - Value: ""
985
+ // - Value: "true"
986
+ // - Value: "false"
987
+
988
+ function eventFor ( keyCode ) {
989
+ return { bubbles : true , cancelable : true , keyCode : keyCode } ;
990
+ }
991
+
979
992
compileElement (
980
993
'<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>' +
994
+ // No attribute.
995
+ '<div id="no-attribute">' +
996
+ '<div ng-click="onClick($event)"></div>' +
997
+ '<ul ng-click="onClick($event)"><li></li></ul>' +
998
+ '</div>' +
999
+
1000
+ // Value: ""
1001
+ '<div id="value-empty">' +
1002
+ '<div ng-click="onClick($event)" contenteditable=""></div>' +
1003
+ '<ul ng-click="onClick($event)"><li contenteditable=""></li></ul>' +
1004
+ '</div>' +
1005
+
1006
+ // Value: "true"
1007
+ '<div id="value-true">' +
1008
+ '<div ng-click="onClick($event)" contenteditable="true"></div>' +
1009
+ '<ul ng-click="onClick($event)"><li contenteditable="true"></li></ul>' +
1010
+ '</div>' +
1011
+
1012
+ // Value: "false"
1013
+ '<div id="value-false">' +
1014
+ '<div ng-click="onClick($event)" contenteditable="false"></div>' +
1015
+ '<ul ng-click="onClick($event)"><li contenteditable="false"></li></ul>' +
1016
+ '</div>' +
983
1017
'</section>' ) ;
984
1018
985
- var divElement = element . find ( 'div' ) ;
986
- var ulElement = element . find ( 'ul' ) ;
987
- var liElement = element . find ( 'li' ) ;
1019
+ var containers = element . children ( ) ;
1020
+ var container ;
1021
+
1022
+ // Attach to DOM, because... <--- TODO
1023
+ document . body . appendChild ( element [ 0 ] ) ;
988
1024
989
1025
// Using `browserTrigger()`, because it supports event bubbling.
990
1026
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 } ) ;
1027
+ // No attribute | Elements are not editable.
1028
+ container = containers . eq ( 0 ) ;
1029
+ browserTrigger ( container . find ( 'div' ) , 'keydown' , eventFor ( 13 ) ) ;
1030
+ browserTrigger ( container . find ( 'ul' ) , 'keydown' , eventFor ( 32 ) ) ;
1031
+ browserTrigger ( container . find ( 'li' ) , 'keydown' , eventFor ( 13 ) ) ;
995
1032
996
1033
expect ( clickEvents ) . toEqual ( [ 'div(true)' , 'ul(true)' , 'li(true)' ] ) ;
997
1034
1035
+ // Value: "" | Elements are editable.
998
1036
clickEvents = [ ] ;
999
- scope . $apply ( 'edit = true' ) ;
1037
+ container = containers . eq ( 1 ) ;
1038
+ browserTrigger ( container . find ( 'div' ) , 'keydown' , eventFor ( 32 ) ) ;
1039
+ browserTrigger ( container . find ( 'ul' ) , 'keydown' , eventFor ( 13 ) ) ;
1040
+ browserTrigger ( container . find ( 'li' ) , 'keydown' , eventFor ( 32 ) ) ;
1041
+
1042
+ expect ( clickEvents ) . toEqual ( [ 'div(false)' , 'ul(true)' , 'li(false)' ] ) ;
1000
1043
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 } ) ;
1044
+ // Value: "true" | Elements are editable.
1045
+ clickEvents = [ ] ;
1046
+ container = containers . eq ( 2 ) ;
1047
+ browserTrigger ( container . find ( 'div' ) , 'keydown' , eventFor ( 13 ) ) ;
1048
+ browserTrigger ( container . find ( 'ul' ) , 'keydown' , eventFor ( 32 ) ) ;
1049
+ browserTrigger ( container . find ( 'li' ) , 'keydown' , eventFor ( 13 ) ) ;
1005
1050
1006
1051
expect ( clickEvents ) . toEqual ( [ 'div(false)' , 'ul(true)' , 'li(false)' ] ) ;
1052
+
1053
+ // Value: "false" | Elements are not editable.
1054
+ clickEvents = [ ] ;
1055
+ container = containers . eq ( 3 ) ;
1056
+ browserTrigger ( container . find ( 'div' ) , 'keydown' , eventFor ( 32 ) ) ;
1057
+ browserTrigger ( container . find ( 'ul' ) , 'keydown' , eventFor ( 13 ) ) ;
1058
+ browserTrigger ( container . find ( 'li' ) , 'keydown' , eventFor ( 32 ) ) ;
1059
+
1060
+ expect ( clickEvents ) . toEqual ( [ 'div(true)' , 'ul(true)' , 'li(true)' ] ) ;
1007
1061
}
1008
1062
) ;
1009
1063
0 commit comments