@@ -19,12 +19,10 @@ var tests = [
19
19
assert . areEqual ( 'whatever' , arr . non_indexed , "arr.non_indexed is set to 'whatever'" ) ;
20
20
assert . areEqual ( 'with getter' , arr . with_getter , "arr.with_getter is set to 'with getter'" ) ;
21
21
22
- var res = delete arr . non_indexed ;
23
- assert . areEqual ( true , res , "Deleting own property should succeed" ) ;
22
+ assert . areEqual ( true , delete arr . non_indexed , "Deleting own property should succeed" ) ;
24
23
assert . areEqual ( undefined , arr . non_indexed , "arr.non_indexed has been deleted" ) ;
25
24
26
- var res = delete arr . with_getter ;
27
- assert . areEqual ( true , res , "Deleting own property with a getter should succeed" ) ;
25
+ assert . areEqual ( true , delete arr . with_getter , "Deleting own property with a getter should succeed" ) ;
28
26
assert . areEqual ( undefined , arr . with_getter , "arr.with_getter has been deleted" ) ;
29
27
}
30
28
} ,
@@ -35,8 +33,7 @@ var tests = [
35
33
var id = 'id' ;
36
34
Object . defineProperty ( arr , id , { value : 17 , configurable : false } ) ;
37
35
38
- var res = delete arr [ id ] ;
39
- assert . areEqual ( false , res ) ;
36
+ assert . areEqual ( false , delete arr [ id ] ) ;
40
37
assert . areEqual ( 17 , arr [ id ] , "arr['id'] value after failed delete" ) ;
41
38
42
39
assert . throws ( function ( ) { 'use strict' ; delete arr [ id ] ; } , TypeError ,
@@ -49,8 +46,7 @@ var tests = [
49
46
body : function ( ) {
50
47
var arr = [ 1 , 4 , 9 , 16 ] ;
51
48
52
- var res = delete arr . length ;
53
- assert . areEqual ( false , res , "delete of arr.length should fail (as noop)" ) ;
49
+ assert . areEqual ( false , delete arr . length , "delete of arr.length should fail (as noop)" ) ;
54
50
assert . areEqual ( 4 , arr . length , "arr.length after attempting to delete it" ) ;
55
51
56
52
assert . throws ( function ( ) { 'use strict' ; delete arr . length ; } , TypeError ,
@@ -64,18 +60,15 @@ var tests = [
64
60
body : function ( ) {
65
61
var arr = [ 1 , 4 , 9 , 16 ] ;
66
62
67
- var res = delete arr [ 1 ] ;
68
- assert . areEqual ( true , res , "delete of arr[1] should succeed" ) ;
63
+ assert . areEqual ( true , delete arr [ 1 ] , "delete of arr[1] should succeed" ) ;
69
64
assert . areEqual ( undefined , arr [ 1 ] , "arr[1] value after delete should be undefined" ) ;
70
65
assert . areEqual ( 4 , arr . length , "the array's lenght should not change" ) ;
71
66
72
- res = delete arr [ 42 ] ;
73
- assert . areEqual ( true , res , "delete of arr[42] (beyond the array bounds) should succeed" ) ;
67
+ assert . areEqual ( true , delete arr [ 42 ] , "delete of arr[42] (beyond the array bounds) should succeed" ) ;
74
68
assert . areEqual ( 4 , arr . length , "the array's length is unchanged" ) ;
75
69
76
70
const last = arr . length - 1 ;
77
- res = delete arr [ last ] ;
78
- assert . areEqual ( true , res , "delete of last element should succeed" ) ;
71
+ assert . areEqual ( true , delete arr [ last ] , "delete of last element should succeed" ) ;
79
72
assert . areEqual ( undefined , arr [ last ] , "arr[last] value after delete should be undefined" ) ;
80
73
assert . areEqual ( 4 , arr . length , "the array's lenght should not change" ) ;
81
74
}
@@ -87,16 +80,56 @@ var tests = [
87
80
Array . prototype [ 1 ] = "arr.proto" ;
88
81
var arr = [ 1 , 4 , 9 , 16 , 25 ] ;
89
82
90
- var res = delete arr [ 1 ] ;
91
- assert . areEqual ( true , res , "delete of arr[1] should succeed" ) ;
83
+ assert . areEqual ( true , delete arr [ 1 ] , "delete of arr[1] should succeed" ) ;
92
84
assert . areEqual ( "arr.proto" , arr [ 1 ] , "arr[1] after deleting should be picked up from the Array prototype" ) ;
93
85
94
- var res = delete arr [ 4 ] ;
95
- assert . areEqual ( true , res , "delete of arr[4] should succeed" ) ;
86
+ assert . areEqual ( true , delete arr [ 4 ] , "delete of arr[4] should succeed" ) ;
96
87
assert . areEqual ( "obj.proto" , arr [ 4 ] , "arr[4] after deleting should be picked up from the Object prototype" ) ;
97
88
assert . areEqual ( 5 , arr . length , "arr.length after deleting of the last element" ) ;
98
89
}
99
90
} ,
91
+ {
92
+ name : "Deleting of properties on frozen Arrays" ,
93
+ body : function ( ) {
94
+ var arr = [ 42 ] ;
95
+ arr . foo = 'fourty-two' ;
96
+
97
+ Object . freeze ( arr ) ;
98
+
99
+ // indexed property
100
+ assert . areEqual ( false , delete arr [ 0 ] , "delete arr[0] from frozen array" ) ;
101
+ assert . throws ( function ( ) { 'use strict' ; delete arr [ 0 ] ; } , TypeError ,
102
+ "Should throw on delete of non-indexed property in array" ,
103
+ "Calling delete on '0' is not allowed in strict mode" ) ;
104
+
105
+ // non-indexed property
106
+ assert . areEqual ( false , delete arr . foo , "delete arr.foo from frozen array" ) ;
107
+ assert . throws ( function ( ) { 'use strict' ; delete arr . foo ; } , TypeError ,
108
+ "Should throw on delete of non-indexed property in array" ,
109
+ "Calling delete on 'foo' is not allowed in strict mode" ) ;
110
+ }
111
+ } ,
112
+ {
113
+ name : "Deleting of indexed properties on sealed Arrays" ,
114
+ body : function ( ) {
115
+ var arr = [ 42 ] ;
116
+ arr . foo = 'fourty-two' ;
117
+
118
+ Object . seal ( arr ) ;
119
+
120
+ // indexed property
121
+ assert . areEqual ( false , delete arr [ 0 ] , "delete arr[0] from sealed array" ) ;
122
+ assert . throws ( function ( ) { 'use strict' ; delete arr [ 0 ] ; } , TypeError ,
123
+ "Should throw on delete of non-indexed property in array" ,
124
+ "Calling delete on '0' is not allowed in strict mode" ) ;
125
+
126
+ // non-indexed property
127
+ assert . areEqual ( false , delete arr . foo , "delete arr.foo from sealed array" ) ;
128
+ assert . throws ( function ( ) { 'use strict' ; delete arr . foo ; } , TypeError ,
129
+ "Should throw on delete of non-indexed property in array" ,
130
+ "Calling delete on 'foo' is not allowed in strict mode" ) ;
131
+ }
132
+ } ,
100
133
] ;
101
134
102
135
testRunner . runTests ( tests , { verbose : false /*so no need to provide baseline*/ } ) ;
0 commit comments