Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(45)

Side by Side Diff: test/mjsunit/function-call.js

Issue 433413002: `1..isPrototypeOf.call(null)` should return false, not throw TypeError. (Closed) Base URL: git://github.com/v8/v8.git@master
Patch Set: Patch Set 5 Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/v8natives.js ('k') | test/mjsunit/regress/regress-3483.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 e.message.indexOf("Cannot convert undefined or null to object") >= 0); 155 e.message.indexOf("Cannot convert undefined or null to object") >= 0);
156 } 156 }
157 157
158 // Test that all natives using the ToObject call throw the right exception. 158 // Test that all natives using the ToObject call throw the right exception.
159 for (var i = 0; i < should_throw_on_null_and_undefined.length; i++) { 159 for (var i = 0; i < should_throw_on_null_and_undefined.length; i++) {
160 // Sanity check that all functions are correct 160 // Sanity check that all functions are correct
161 assertEquals(typeof(should_throw_on_null_and_undefined[i]), "function"); 161 assertEquals(typeof(should_throw_on_null_and_undefined[i]), "function");
162 162
163 var exception = false; 163 var exception = false;
164 try { 164 try {
165 // We call all functions with no parameters, which means that essential 165 // We need to pass a dummy object argument ({}) to these functions because
166 // parameters will have the undefined value. 166 // of Object.prototype.isPrototypeOf's special behavior, see issue 3483
167 // The test for whether the "this" value is null or undefined is always 167 // for more details.
168 // performed before access to the other parameters, so even if the 168 should_throw_on_null_and_undefined[i].call(null, {});
169 // undefined value is an invalid argument value, it mustn't change
170 // the result of the test.
171 should_throw_on_null_and_undefined[i].call(null);
172 } catch (e) { 169 } catch (e) {
173 exception = true; 170 exception = true;
174 checkExpectedMessage(e); 171 checkExpectedMessage(e);
175 } 172 }
176 assertTrue(exception); 173 assertTrue(exception);
177 174
178 exception = false; 175 exception = false;
179 try { 176 try {
180 should_throw_on_null_and_undefined[i].call(undefined); 177 should_throw_on_null_and_undefined[i].call(undefined, {});
181 } catch (e) { 178 } catch (e) {
182 exception = true; 179 exception = true;
183 checkExpectedMessage(e); 180 checkExpectedMessage(e);
184 } 181 }
185 assertTrue(exception); 182 assertTrue(exception);
186 183
187 exception = false; 184 exception = false;
188 try { 185 try {
189 should_throw_on_null_and_undefined[i].apply(null); 186 should_throw_on_null_and_undefined[i].apply(null, [{}]);
190 } catch (e) { 187 } catch (e) {
191 exception = true; 188 exception = true;
192 checkExpectedMessage(e); 189 checkExpectedMessage(e);
193 } 190 }
194 assertTrue(exception); 191 assertTrue(exception);
195 192
196 exception = false; 193 exception = false;
197 try { 194 try {
198 should_throw_on_null_and_undefined[i].apply(undefined); 195 should_throw_on_null_and_undefined[i].apply(undefined, [{}]);
199 } catch (e) { 196 } catch (e) {
200 exception = true; 197 exception = true;
201 checkExpectedMessage(e); 198 checkExpectedMessage(e);
202 } 199 }
203 assertTrue(exception); 200 assertTrue(exception);
204 } 201 }
205 202
206 // Test that all natives that are non generic throw on null and undefined. 203 // Test that all natives that are non generic throw on null and undefined.
207 for (var i = 0; i < non_generic.length; i++) { 204 for (var i = 0; i < non_generic.length; i++) {
208 // Sanity check that all functions are correct 205 // Sanity check that all functions are correct
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 } catch (e) { 238 } catch (e) {
242 exception = true; 239 exception = true;
243 assertTrue(e instanceof TypeError); 240 assertTrue(e instanceof TypeError);
244 } 241 }
245 assertTrue(exception); 242 assertTrue(exception);
246 } 243 }
247 244
248 245
249 // Test that we still throw when calling with thisArg null or undefined 246 // Test that we still throw when calling with thisArg null or undefined
250 // through an array mapping function. 247 // through an array mapping function.
251 var array = [1,2,3,4,5]; 248 // We need to make sure that the elements of `array` are all object values,
249 // see issue 3483 for more details.
250 var array = [{}, [], new Number, new Map, new WeakSet];
252 for (var j = 0; j < mapping_functions.length; j++) { 251 for (var j = 0; j < mapping_functions.length; j++) {
253 for (var i = 0; i < should_throw_on_null_and_undefined.length; i++) { 252 for (var i = 0; i < should_throw_on_null_and_undefined.length; i++) {
254 exception = false; 253 exception = false;
255 try { 254 try {
256 mapping_functions[j].call(array, 255 mapping_functions[j].call(array,
257 should_throw_on_null_and_undefined[i], 256 should_throw_on_null_and_undefined[i],
258 null); 257 null);
259 } catch (e) { 258 } catch (e) {
260 exception = true; 259 exception = true;
261 checkExpectedMessage(e); 260 checkExpectedMessage(e);
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 } 346 }
348 } 347 }
349 348
350 349
351 // Object.prototype.toString() 350 // Object.prototype.toString()
352 assertEquals(Object.prototype.toString.call(null), 351 assertEquals(Object.prototype.toString.call(null),
353 '[object Null]') 352 '[object Null]')
354 353
355 assertEquals(Object.prototype.toString.call(undefined), 354 assertEquals(Object.prototype.toString.call(undefined),
356 '[object Undefined]') 355 '[object Undefined]')
OLDNEW
« no previous file with comments | « src/v8natives.js ('k') | test/mjsunit/regress/regress-3483.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698