mirror of
				https://github.com/tc39/test262.git
				synced 2025-11-03 21:24:30 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			54 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// Copyright (c) 2012 Ecma International.  All rights reserved.
 | 
						|
// Ecma International makes this code available under the terms and conditions set
 | 
						|
// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
 | 
						|
// "Use Terms").   Any redistribution of this code must retain the above
 | 
						|
// copyright and this notice and otherwise comply with the Use Terms.
 | 
						|
 | 
						|
/*---
 | 
						|
info: >
 | 
						|
    Step 4 of defineProperty calls the [[DefineOwnProperty]] internal method
 | 
						|
    of O to define the property. Step 6 of [[DefineOwnProperty]] returns if
 | 
						|
    every field of desc also occurs in current and every field in desc has
 | 
						|
    the same value as current.
 | 
						|
es5id: 15.2.3.6-4-6
 | 
						|
description: >
 | 
						|
    Object.defineProperty is no-op if current and desc are the same
 | 
						|
    accessor desc
 | 
						|
includes: [runTestCase.js]
 | 
						|
---*/
 | 
						|
 | 
						|
function testcase() {
 | 
						|
  function sameAccessorDescriptorValues(d1, d2) {
 | 
						|
    return (d1.get == d2.get &&
 | 
						|
            d1.enumerable == d2.enumerable &&
 | 
						|
            d1.configurable == d2.configurable);
 | 
						|
  }
 | 
						|
 | 
						|
  var o = {};
 | 
						|
 | 
						|
  // create an accessor property with the following attributes:
 | 
						|
  // enumerable: true, configurable: true
 | 
						|
  var desc = {
 | 
						|
               get: function () {},
 | 
						|
               enumerable: true,
 | 
						|
               configurable: true
 | 
						|
             };
 | 
						|
 | 
						|
  Object.defineProperty(o, "foo", desc);
 | 
						|
 | 
						|
  // query for, and save, the desc. A subsequent call to defineProperty
 | 
						|
  // with the same desc should not disturb the property definition.
 | 
						|
  var d1 = Object.getOwnPropertyDescriptor(o, "foo");  
 | 
						|
 | 
						|
  // now, redefine the property with the same descriptor
 | 
						|
  // the property defintion should not get disturbed.
 | 
						|
  Object.defineProperty(o, "foo", desc);
 | 
						|
 | 
						|
  var d2 = Object.getOwnPropertyDescriptor(o, "foo"); 
 | 
						|
 | 
						|
  if (sameAccessorDescriptorValues(d1, d2) === true) {
 | 
						|
    return true;
 | 
						|
  }
 | 
						|
 }
 | 
						|
runTestCase(testcase);
 |