mirror of
				https://github.com/tc39/test262.git
				synced 2025-11-04 05:33:50 +01:00 
			
		
		
		
	Improve Promise constructor coverage (#2158)
* Add constructor descriptor test * Rename & improve non-callable executor test * Rename & simplify executor call context tests * Remove duplicate reject via abrupt test * Deduplicate undefined NewTarget tests * Add basic constructor test * Add abrupt prototype getting tests
This commit is contained in:
		
							parent
							
								
									a9abd418cc
								
							
						
					
					
						commit
						ee960aefb5
					
				@ -1,16 +0,0 @@
 | 
				
			|||||||
// Copyright 2014 Cubane Canada, Inc.  All rights reserved.
 | 
					 | 
				
			||||||
// See LICENSE for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*---
 | 
					 | 
				
			||||||
info: |
 | 
					 | 
				
			||||||
    Promise is the Promise property of the global object
 | 
					 | 
				
			||||||
es6id: S25.4.3.1_A1.1_T1
 | 
					 | 
				
			||||||
author: Sam Mikes
 | 
					 | 
				
			||||||
description: Promise === global.Promise
 | 
					 | 
				
			||||||
---*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var global = this;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if (Promise !== global.Promise) {
 | 
					 | 
				
			||||||
  $ERROR("Expected Promise === global.Promise.");
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,14 +0,0 @@
 | 
				
			|||||||
// Copyright 2014 Cubane Canada, Inc.  All rights reserved.
 | 
					 | 
				
			||||||
// See LICENSE for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*---
 | 
					 | 
				
			||||||
info: |
 | 
					 | 
				
			||||||
    Promise throws TypeError when 'this' is not Object
 | 
					 | 
				
			||||||
es6id: S25.4.3.1_A2.1_T1
 | 
					 | 
				
			||||||
author: Sam Mikes
 | 
					 | 
				
			||||||
description: Promise.call("non-object") throws TypeError
 | 
					 | 
				
			||||||
---*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
assert.throws(TypeError, function() {
 | 
					 | 
				
			||||||
  Promise.call("non-object", function() {});
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
@ -1,16 +0,0 @@
 | 
				
			|||||||
// Copyright 2014 Cubane Canada, Inc.  All rights reserved.
 | 
					 | 
				
			||||||
// See LICENSE for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*---
 | 
					 | 
				
			||||||
info: |
 | 
					 | 
				
			||||||
    Promise throws TypeError when 'this' is constructed but unsettled promise
 | 
					 | 
				
			||||||
es6id: S25.4.3.1_A2.2_T1
 | 
					 | 
				
			||||||
author: Sam Mikes
 | 
					 | 
				
			||||||
description: Promise.call(new Promise()) throws TypeError
 | 
					 | 
				
			||||||
---*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var p = new Promise(function() {});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
assert.throws(TypeError, function() {
 | 
					 | 
				
			||||||
  Promise.call(p, function() {});
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
@ -1,25 +0,0 @@
 | 
				
			|||||||
// Copyright 2014 Cubane Canada, Inc.  All rights reserved.
 | 
					 | 
				
			||||||
// See LICENSE for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*---
 | 
					 | 
				
			||||||
info: |
 | 
					 | 
				
			||||||
    Promise throws TypeError when 'this' is resolved promise
 | 
					 | 
				
			||||||
es6id: S25.4.3.1_A2.3_T1
 | 
					 | 
				
			||||||
author: Sam Mikes
 | 
					 | 
				
			||||||
description: Promise.call(resolved Promise) throws TypeError
 | 
					 | 
				
			||||||
flags: [async]
 | 
					 | 
				
			||||||
---*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var p = new Promise(function(resolve) {
 | 
					 | 
				
			||||||
  resolve(1);
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
p.then(function() {
 | 
					 | 
				
			||||||
  Promise.call(p, function() {});
 | 
					 | 
				
			||||||
}).then(function() {
 | 
					 | 
				
			||||||
  $ERROR("Unexpected resolution - expected TypeError");
 | 
					 | 
				
			||||||
}, function(err) {
 | 
					 | 
				
			||||||
  if (!(err instanceof TypeError)) {
 | 
					 | 
				
			||||||
    $ERROR("Expected TypeError, got " + err);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}).then($DONE, $DONE);
 | 
					 | 
				
			||||||
@ -1,25 +0,0 @@
 | 
				
			|||||||
// Copyright 2014 Cubane Canada, Inc.  All rights reserved.
 | 
					 | 
				
			||||||
// See LICENSE for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*---
 | 
					 | 
				
			||||||
info: |
 | 
					 | 
				
			||||||
    Promise throws TypeError when 'this' is rejected promise
 | 
					 | 
				
			||||||
es6id: S25.4.3.1_A2.4_T1
 | 
					 | 
				
			||||||
author: Sam Mikes
 | 
					 | 
				
			||||||
description: Promise.call(rejected Promise) throws TypeError
 | 
					 | 
				
			||||||
flags: [async]
 | 
					 | 
				
			||||||
---*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var p = new Promise(function(resolve, reject) {
 | 
					 | 
				
			||||||
  reject(1)
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
p.catch(function() {
 | 
					 | 
				
			||||||
  Promise.call(p, function() {});
 | 
					 | 
				
			||||||
}).then(function() {
 | 
					 | 
				
			||||||
  $ERROR("Unexpected resolution - expected TypeError");
 | 
					 | 
				
			||||||
}, function(err) {
 | 
					 | 
				
			||||||
  if (!(err instanceof TypeError)) {
 | 
					 | 
				
			||||||
    $ERROR("Expected TypeError, got " + err);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}).then($DONE, $DONE);
 | 
					 | 
				
			||||||
@ -1,14 +0,0 @@
 | 
				
			|||||||
// Copyright 2014 Cubane Canada, Inc.  All rights reserved.
 | 
					 | 
				
			||||||
// See LICENSE for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*---
 | 
					 | 
				
			||||||
info: |
 | 
					 | 
				
			||||||
    Promise throws TypeError when executor is not callable
 | 
					 | 
				
			||||||
es6id: S25.4.3.1_A3.1_T1
 | 
					 | 
				
			||||||
author: Sam Mikes
 | 
					 | 
				
			||||||
description: new Promise("not callable") throws TypeError
 | 
					 | 
				
			||||||
---*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
assert.throws(TypeError, function() {
 | 
					 | 
				
			||||||
  new Promise("not callable");
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
@ -1,25 +0,0 @@
 | 
				
			|||||||
// Copyright 2014 Cubane Canada, Inc.  All rights reserved.
 | 
					 | 
				
			||||||
// See LICENSE for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*---
 | 
					 | 
				
			||||||
info: |
 | 
					 | 
				
			||||||
    Promise catches exceptions thrown from executor and turns
 | 
					 | 
				
			||||||
    them into reject
 | 
					 | 
				
			||||||
es6id: S25.4.3.1_A4.1_T1
 | 
					 | 
				
			||||||
author: Sam Mikes
 | 
					 | 
				
			||||||
description: new Promise(function () { throw }) should reject
 | 
					 | 
				
			||||||
flags: [async]
 | 
					 | 
				
			||||||
---*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var errorObject = {},
 | 
					 | 
				
			||||||
  p = new Promise(function() {
 | 
					 | 
				
			||||||
    throw errorObject;
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
p.then(function() {
 | 
					 | 
				
			||||||
  $ERROR("Unexpected fulfill -- promise should reject.");
 | 
					 | 
				
			||||||
}, function(err) {
 | 
					 | 
				
			||||||
  if (err !== errorObject) {
 | 
					 | 
				
			||||||
    $ERROR("Expected promise rejection reason to be thrown errorObject, actually " + err);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}).then($DONE, $DONE);
 | 
					 | 
				
			||||||
@ -1,23 +0,0 @@
 | 
				
			|||||||
// Copyright 2014 Cubane Canada, Inc.  All rights reserved.
 | 
					 | 
				
			||||||
// See LICENSE for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*---
 | 
					 | 
				
			||||||
info: |
 | 
					 | 
				
			||||||
    Promise executor has predictable environment
 | 
					 | 
				
			||||||
    'this' should be global object in sloppy mode,
 | 
					 | 
				
			||||||
    undefined in strict mode
 | 
					 | 
				
			||||||
es6id: S25.4.3.1_A5.1_T1
 | 
					 | 
				
			||||||
author: Sam Mikes
 | 
					 | 
				
			||||||
description: Promise executor gets default handling for 'this'
 | 
					 | 
				
			||||||
flags: [async, noStrict]
 | 
					 | 
				
			||||||
---*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var expectedThis = this;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var p = new Promise(function(resolve) {
 | 
					 | 
				
			||||||
  if (this !== expectedThis) {
 | 
					 | 
				
			||||||
    $ERROR("'this' must be global object, got " + this);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  resolve();
 | 
					 | 
				
			||||||
}).then($DONE, $DONE);
 | 
					 | 
				
			||||||
@ -1,23 +0,0 @@
 | 
				
			|||||||
// Copyright 2014 Cubane Canada, Inc.  All rights reserved.
 | 
					 | 
				
			||||||
// See LICENSE for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*---
 | 
					 | 
				
			||||||
info: |
 | 
					 | 
				
			||||||
    Promise executor has predictable environment
 | 
					 | 
				
			||||||
    'this' should be global object in sloppy mode,
 | 
					 | 
				
			||||||
    undefined in strict mode
 | 
					 | 
				
			||||||
es6id: S25.4.3.1_A5.1_T2
 | 
					 | 
				
			||||||
author: Sam Mikes
 | 
					 | 
				
			||||||
description: Promise executor gets default handling for 'this'
 | 
					 | 
				
			||||||
flags: [async, onlyStrict]
 | 
					 | 
				
			||||||
---*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var expectedThis = undefined;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var p = new Promise(function(resolve) {
 | 
					 | 
				
			||||||
  if (this !== expectedThis) {
 | 
					 | 
				
			||||||
    $ERROR("'this' must be undefined, got " + this);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  resolve();
 | 
					 | 
				
			||||||
}).then($DONE, $DONE);
 | 
					 | 
				
			||||||
							
								
								
									
										9
									
								
								test/built-ins/Promise/constructor.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								test/built-ins/Promise/constructor.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					// Copyright (C) 2019 Aleksey Shvayka. All rights reserved.
 | 
				
			||||||
 | 
					// This code is governed by the BSD license found in the LICENSE file.
 | 
				
			||||||
 | 
					/*---
 | 
				
			||||||
 | 
					esid: sec-promise-executor
 | 
				
			||||||
 | 
					description: >
 | 
				
			||||||
 | 
					  The Promise constructor is a built-in function
 | 
				
			||||||
 | 
					---*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					assert.sameValue(typeof Promise, 'function');
 | 
				
			||||||
							
								
								
									
										22
									
								
								test/built-ins/Promise/executor-call-context-sloppy.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								test/built-ins/Promise/executor-call-context-sloppy.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					// Copyright 2014 Cubane Canada, Inc. All rights reserved.
 | 
				
			||||||
 | 
					// This code is governed by the BSD license found in the LICENSE file.
 | 
				
			||||||
 | 
					/*---
 | 
				
			||||||
 | 
					esid: sec-promise-executor
 | 
				
			||||||
 | 
					author: Sam Mikes
 | 
				
			||||||
 | 
					description: >
 | 
				
			||||||
 | 
					  Promise executor is called in global object context in sloppy mode.
 | 
				
			||||||
 | 
					info: |
 | 
				
			||||||
 | 
					  25.6.3.1 Promise ( executor )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [...]
 | 
				
			||||||
 | 
					  9. Let completion be Call(executor, undefined, « resolvingFunctions.[[Resolve]], resolvingFunctions.[[Reject]] »).
 | 
				
			||||||
 | 
					flags: [noStrict]
 | 
				
			||||||
 | 
					---*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var _this;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new Promise(function() {
 | 
				
			||||||
 | 
					  _this = this;
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					assert.sameValue(_this, this);
 | 
				
			||||||
							
								
								
									
										22
									
								
								test/built-ins/Promise/executor-call-context-strict.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								test/built-ins/Promise/executor-call-context-strict.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					// Copyright 2014 Cubane Canada, Inc. All rights reserved.
 | 
				
			||||||
 | 
					// This code is governed by the BSD license found in the LICENSE file.
 | 
				
			||||||
 | 
					/*---
 | 
				
			||||||
 | 
					esid: sec-promise-executor
 | 
				
			||||||
 | 
					author: Sam Mikes
 | 
				
			||||||
 | 
					description: >
 | 
				
			||||||
 | 
					  Promise executor is called in `undefined` context in strict mode.
 | 
				
			||||||
 | 
					info: |
 | 
				
			||||||
 | 
					  25.6.3.1 Promise ( executor )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [...]
 | 
				
			||||||
 | 
					  9. Let completion be Call(executor, undefined, « resolvingFunctions.[[Resolve]], resolvingFunctions.[[Reject]] »).
 | 
				
			||||||
 | 
					flags: [onlyStrict]
 | 
				
			||||||
 | 
					---*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var _this;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new Promise(function() {
 | 
				
			||||||
 | 
					  _this = this;
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					assert.sameValue(_this, undefined);
 | 
				
			||||||
							
								
								
									
										29
									
								
								test/built-ins/Promise/executor-not-callable.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								test/built-ins/Promise/executor-not-callable.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					// Copyright 2014 Cubane Canada, Inc. All rights reserved.
 | 
				
			||||||
 | 
					// This code is governed by the BSD license found in the LICENSE file.
 | 
				
			||||||
 | 
					/*---
 | 
				
			||||||
 | 
					esid: sec-promise-executor
 | 
				
			||||||
 | 
					author: Sam Mikes
 | 
				
			||||||
 | 
					description: >
 | 
				
			||||||
 | 
					  Promise constructor throws TypeError if executor is not callable.
 | 
				
			||||||
 | 
					info: |
 | 
				
			||||||
 | 
					  25.6.3.1 Promise ( executor )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [...]
 | 
				
			||||||
 | 
					  2. If IsCallable(executor) is false, throw a TypeError exception.
 | 
				
			||||||
 | 
					---*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					assert.throws(TypeError, function() {
 | 
				
			||||||
 | 
					  new Promise('not callable');
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					assert.throws(TypeError, function() {
 | 
				
			||||||
 | 
					  new Promise(1);
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					assert.throws(TypeError, function() {
 | 
				
			||||||
 | 
					  new Promise(null);
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					assert.throws(TypeError, function() {
 | 
				
			||||||
 | 
					  new Promise({});
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
@ -0,0 +1,35 @@
 | 
				
			|||||||
 | 
					// Copyright (C) 2019 Aleksey Shvayka. All rights reserved.
 | 
				
			||||||
 | 
					// This code is governed by the BSD license found in the LICENSE file.
 | 
				
			||||||
 | 
					/*---
 | 
				
			||||||
 | 
					esid: sec-promise-executor
 | 
				
			||||||
 | 
					description: >
 | 
				
			||||||
 | 
					  Promise constructor gets prototype after checking that executor is callable.
 | 
				
			||||||
 | 
					info: |
 | 
				
			||||||
 | 
					  25.6.3.1 Promise ( executor )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [...]
 | 
				
			||||||
 | 
					  2. If IsCallable(executor) is false, throw a TypeError exception.
 | 
				
			||||||
 | 
					  3. Let promise be ? OrdinaryCreateFromConstructor(NewTarget, "%PromisePrototype%", « [[PromiseState]], [[PromiseResult]], [[PromiseFulfillReactions]], [[PromiseRejectReactions]], [[PromiseIsHandled]] »).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  9.1.13 OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [...]
 | 
				
			||||||
 | 
					  2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  9.1.14 GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [...]
 | 
				
			||||||
 | 
					  3. Let proto be ? Get(constructor, "prototype").
 | 
				
			||||||
 | 
					features: [Reflect, Reflect.construct]
 | 
				
			||||||
 | 
					---*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var bound = (function() {}).bind();
 | 
				
			||||||
 | 
					Object.defineProperty(bound, 'prototype', {
 | 
				
			||||||
 | 
					  get: function() {
 | 
				
			||||||
 | 
					    throw new Test262Error();
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					assert.throws(TypeError, function() {
 | 
				
			||||||
 | 
					  Reflect.construct(Promise, [], bound);
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
							
								
								
									
										34
									
								
								test/built-ins/Promise/get-prototype-abrupt.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								test/built-ins/Promise/get-prototype-abrupt.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					// Copyright (C) 2019 Aleksey Shvayka. All rights reserved.
 | 
				
			||||||
 | 
					// This code is governed by the BSD license found in the LICENSE file.
 | 
				
			||||||
 | 
					/*---
 | 
				
			||||||
 | 
					esid: sec-promise-executor
 | 
				
			||||||
 | 
					description: >
 | 
				
			||||||
 | 
					  Promise constructor rethrows errors raised at getting prototype.
 | 
				
			||||||
 | 
					info: |
 | 
				
			||||||
 | 
					  25.6.3.1 Promise ( executor )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [...]
 | 
				
			||||||
 | 
					  3. Let promise be ? OrdinaryCreateFromConstructor(NewTarget, "%PromisePrototype%", « [[PromiseState]], [[PromiseResult]], [[PromiseFulfillReactions]], [[PromiseRejectReactions]], [[PromiseIsHandled]] »).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  9.1.13 OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [...]
 | 
				
			||||||
 | 
					  2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  9.1.14 GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [...]
 | 
				
			||||||
 | 
					  3. Let proto be ? Get(constructor, "prototype").
 | 
				
			||||||
 | 
					features: [Reflect, Reflect.construct]
 | 
				
			||||||
 | 
					---*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var bound = (function() {}).bind();
 | 
				
			||||||
 | 
					Object.defineProperty(bound, 'prototype', {
 | 
				
			||||||
 | 
					  get: function() {
 | 
				
			||||||
 | 
					    throw new Test262Error();
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					assert.throws(Test262Error, function() {
 | 
				
			||||||
 | 
					  Reflect.construct(Promise, [function() {}], bound);
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
							
								
								
									
										25
									
								
								test/built-ins/Promise/promise.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								test/built-ins/Promise/promise.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					// Copyright 2019 Aleksey Shvayka. All rights reserved.
 | 
				
			||||||
 | 
					// This code is governed by the BSD license found in the LICENSE file.
 | 
				
			||||||
 | 
					/*---
 | 
				
			||||||
 | 
					esid: sec-promise-constructor
 | 
				
			||||||
 | 
					description: >
 | 
				
			||||||
 | 
					  Property descriptor of Promise
 | 
				
			||||||
 | 
					info: |
 | 
				
			||||||
 | 
					  25.6.3 The Promise Constructor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * is the initial value of the Promise property of the global object.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  17 ECMAScript Standard Built-in Objects
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Every other data property described in clauses 18 through 26 and in Annex B.2
 | 
				
			||||||
 | 
					  has the attributes { [[Writable]]: true, [[Enumerable]]: false,
 | 
				
			||||||
 | 
					  [[Configurable]]: true } unless otherwise specified.
 | 
				
			||||||
 | 
					includes: [propertyHelper.js]
 | 
				
			||||||
 | 
					---*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					verifyProperty(this, 'Promise', {
 | 
				
			||||||
 | 
					  value: Promise,
 | 
				
			||||||
 | 
					  writable: true,
 | 
				
			||||||
 | 
					  enumerable: false,
 | 
				
			||||||
 | 
					  configurable: true,
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
							
								
								
									
										24
									
								
								test/built-ins/Promise/undefined-newtarget.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								test/built-ins/Promise/undefined-newtarget.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					// Copyright (C) 2019 Aleksey Shvayka. All rights reserved.
 | 
				
			||||||
 | 
					// This code is governed by the BSD license found in the LICENSE file.
 | 
				
			||||||
 | 
					/*---
 | 
				
			||||||
 | 
					esid: sec-promise-executor
 | 
				
			||||||
 | 
					description: >
 | 
				
			||||||
 | 
					  Throws a TypeError if Promise is called without a NewTarget.
 | 
				
			||||||
 | 
					info: |
 | 
				
			||||||
 | 
					  25.6.3.1 Promise ( executor )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  1. If NewTarget is undefined, throw a TypeError exception.
 | 
				
			||||||
 | 
					---*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					assert.throws(TypeError, function() {
 | 
				
			||||||
 | 
					  Promise(function() {});
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					assert.throws(TypeError, function() {
 | 
				
			||||||
 | 
					  Promise.call(null, function() {});
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var p = new Promise(function() {});
 | 
				
			||||||
 | 
					assert.throws(TypeError, function() {
 | 
				
			||||||
 | 
					  Promise.call(p, function() {});
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user