tor-browser

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

Object-getProperty-01.js (4000B)


      1 // tests calling script functions via Debugger.Object.prototype.getProperty
      2 "use strict";
      3 
      4 var global = newGlobal({newCompartment: true});
      5 var dbg = new Debugger(global);
      6 dbg.onDebuggerStatement = onDebuggerStatement;
      7 
      8 global.eval(`
      9 const normalObj = { };
     10 const abruptObj = { };
     11 const sym = Symbol("a symbol key");
     12 
     13 const arr = [1, 2, 3];
     14 const obj = {
     15    get stringNormal(){
     16        return "a value";
     17    },
     18    get stringAbrupt() {
     19        throw "a value";
     20    },
     21    get objectNormal() {
     22        return normalObj;
     23    },
     24    get objectAbrupt() {
     25        throw abruptObj;
     26    },
     27    get context() {
     28        return this;
     29    },
     30 
     31    1234: "number key",
     32    [sym]: "symbol key",
     33    stringProp: "a value",
     34    objectProp: {},
     35    method() {
     36        return "a value";
     37    },
     38    undefined: "undefined value",
     39 };
     40 const propObj = obj.objectProp;
     41 const methodObj = obj.method;
     42 
     43 const objChild = Object.create(obj);
     44 
     45 const proxyChild = new Proxy(obj, {});
     46 
     47 debugger;
     48 `);
     49 
     50 function onDebuggerStatement(frame) {
     51    const { environment } = frame;
     52    const arr = environment.getVariable("arr");
     53    const obj = environment.getVariable("obj");
     54    const objChild = environment.getVariable("objChild");
     55    const proxyChild = environment.getVariable("proxyChild");
     56 
     57    const sym = environment.getVariable("sym");
     58    const normalObj = environment.getVariable("normalObj");
     59    const abruptObj = environment.getVariable("abruptObj");
     60    const propObj = environment.getVariable("propObj");
     61    const methodObj = environment.getVariable("methodObj");
     62 
     63    assertEq(arr.getProperty(1).return, 2);
     64    assertEq(arr.getProperty("1").return, 2);
     65 
     66    assertEq(obj.getProperty().return, "undefined value");
     67 
     68    assertEq(obj.getProperty("missing").return, undefined);
     69 
     70    assertEq(obj.getProperty("stringNormal").return, "a value");
     71    assertEq(obj.getProperty("stringAbrupt").throw, "a value");
     72 
     73    assertEq(obj.getProperty("objectNormal").return, normalObj);
     74    assertEq(obj.getProperty("objectAbrupt").throw, abruptObj);
     75 
     76    assertEq(obj.getProperty("context").return, obj);
     77 
     78    assertEq(obj.getProperty(1234).return, "number key");
     79    assertEq(obj.getProperty(sym).return, "symbol key");
     80    assertEq(obj.getProperty("stringProp").return, "a value");
     81    assertEq(obj.getProperty("objectProp").return, propObj);
     82 
     83    assertEq(obj.getProperty("method").return, methodObj);
     84 
     85    assertEq(objChild.getProperty().return, "undefined value");
     86 
     87    assertEq(objChild.getProperty("missing").return, undefined);
     88 
     89    assertEq(objChild.getProperty("stringNormal").return, "a value");
     90    assertEq(objChild.getProperty("stringAbrupt").throw, "a value");
     91 
     92    assertEq(objChild.getProperty("objectNormal").return, normalObj);
     93    assertEq(objChild.getProperty("objectAbrupt").throw, abruptObj);
     94 
     95    assertEq(objChild.getProperty("context").return, objChild);
     96 
     97    assertEq(objChild.getProperty(1234).return, "number key");
     98    assertEq(objChild.getProperty(sym).return, "symbol key");
     99    assertEq(objChild.getProperty("stringProp").return, "a value");
    100    assertEq(objChild.getProperty("objectProp").return, propObj);
    101 
    102    assertEq(objChild.getProperty("method").return, methodObj);
    103 
    104    assertEq(proxyChild.getProperty().return, "undefined value");
    105 
    106    assertEq(proxyChild.getProperty("missing").return, undefined);
    107 
    108    assertEq(proxyChild.getProperty("stringNormal").return, "a value");
    109    assertEq(proxyChild.getProperty("stringAbrupt").throw, "a value");
    110 
    111    assertEq(proxyChild.getProperty("objectNormal").return, normalObj);
    112    assertEq(proxyChild.getProperty("objectAbrupt").throw, abruptObj);
    113 
    114    assertEq(proxyChild.getProperty("context").return, proxyChild);
    115 
    116    assertEq(proxyChild.getProperty(1234).return, "number key");
    117    assertEq(proxyChild.getProperty(sym).return, "symbol key");
    118    assertEq(proxyChild.getProperty("stringProp").return, "a value");
    119    assertEq(proxyChild.getProperty("objectProp").return, propObj);
    120 
    121    assertEq(proxyChild.getProperty("method").return, methodObj);
    122 };