tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

strings-and-symbol-order.js (1749B)


      1 // Copyright (C) 2018 André Bargull. All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 
      4 /*---
      5 esid: sec-object.assign
      6 description: >
      7  Symbol-valued properties are copied after String-valued properties.
      8 info: |
      9  19.1.2.1 Object.assign ( target, ...sources )
     10 
     11  ...
     12  4. For each element nextSource of sources, in ascending index order, do
     13    a. ...
     14    b. Else,
     15      i. Let from be ! ToObject(nextSource).
     16      ii. Let keys be ? from.[[OwnPropertyKeys]]().
     17    c. For each element nextKey of keys in List order, do
     18    ...
     19  ...
     20 
     21  9.1.11.1 OrdinaryOwnPropertyKeys ( O )
     22 
     23  ...
     24  3. For each own property key P of O that is a String but is not an integer index,
     25     in ascending chronological order of property creation, do
     26    a. Add P as the last element of keys.
     27  4. For each own property key P of O that is a Symbol, in ascending chronological
     28     order of property creation, do
     29    a. Add P as the last element of keys.
     30  ...
     31 
     32 includes: [compareArray.js]
     33 ---*/
     34 
     35 var log = [];
     36 
     37 var sym1 = Symbol("x");
     38 var sym2 = Symbol("y");
     39 
     40 var source = {};
     41 
     42 Object.defineProperty(source, sym1, {
     43    get: function(){ log.push("get sym(x)") },
     44    enumerable: true, configurable: true,
     45 });
     46 Object.defineProperty(source, "a", {
     47    get: function(){ log.push("get a") },
     48    enumerable: true, configurable: true,
     49 });
     50 Object.defineProperty(source, sym2, {
     51    get: function(){ log.push("get sym(y)") },
     52    enumerable: true, configurable: true,
     53 });
     54 Object.defineProperty(source, "b", {
     55    get: function(){ log.push("get b") },
     56    enumerable: true, configurable: true,
     57 });
     58 
     59 var target = Object.assign({}, source);
     60 
     61 assert.compareArray(log, ["get a", "get b", "get sym(x)", "get sym(y)"]);
     62 
     63 reportCompare(0, 0);