forked from LeenkxTeam/Kmake
232 lines
4.7 KiB
Plaintext
232 lines
4.7 KiB
Plaintext
Evaluate private class member out of class scope in Runtime.evaluate()
|
|
|
|
class Klass {
|
|
#field = "string";
|
|
get #getterOnly() { return "getterOnly"; }
|
|
set #setterOnly(val) { this.#field = "setterOnlyCalled"; }
|
|
get #accessor() { return this.#field }
|
|
set #accessor(val) { this.#field = val; }
|
|
#method() { return "method"; }
|
|
}
|
|
const obj = new Klass();
|
|
|
|
|
|
Running test: evaluatePrivateMembers
|
|
Checking private fields
|
|
Runtime.evaluate: `obj.#field`
|
|
{
|
|
type : string
|
|
value : string
|
|
}
|
|
Runtime.evaluate: `obj.#field = 1`
|
|
{
|
|
description : 1
|
|
type : number
|
|
value : 1
|
|
}
|
|
Runtime.evaluate: `obj.#field`
|
|
{
|
|
description : 1
|
|
type : number
|
|
value : 1
|
|
}
|
|
Runtime.evaluate: `obj.#field++`
|
|
{
|
|
description : 1
|
|
type : number
|
|
value : 1
|
|
}
|
|
Runtime.evaluate: `obj.#field`
|
|
{
|
|
description : 2
|
|
type : number
|
|
value : 2
|
|
}
|
|
Runtime.evaluate: `++obj.#field`
|
|
{
|
|
description : 3
|
|
type : number
|
|
value : 3
|
|
}
|
|
Runtime.evaluate: `obj.#field`
|
|
{
|
|
description : 3
|
|
type : number
|
|
value : 3
|
|
}
|
|
Runtime.evaluate: `obj.#field -= 3`
|
|
{
|
|
description : 0
|
|
type : number
|
|
value : 0
|
|
}
|
|
Runtime.evaluate: `obj.#field`
|
|
{
|
|
description : 0
|
|
type : number
|
|
value : 0
|
|
}
|
|
Checking private getter-only accessors
|
|
Runtime.evaluate: `obj.#getterOnly`
|
|
{
|
|
type : string
|
|
value : getterOnly
|
|
}
|
|
Runtime.evaluate: `obj.#getterOnly = 1`
|
|
{
|
|
className : Error
|
|
description : Error: '#getterOnly' was defined without a setter at <anonymous>:1:17
|
|
objectId : <objectId>
|
|
subtype : error
|
|
type : object
|
|
}
|
|
Runtime.evaluate: `obj.#getterOnly++`
|
|
{
|
|
className : Error
|
|
description : Error: '#getterOnly' was defined without a setter at <anonymous>:1:16
|
|
objectId : <objectId>
|
|
subtype : error
|
|
type : object
|
|
}
|
|
Runtime.evaluate: `obj.#getterOnly -= 3`
|
|
{
|
|
className : Error
|
|
description : Error: '#getterOnly' was defined without a setter at <anonymous>:1:17
|
|
objectId : <objectId>
|
|
subtype : error
|
|
type : object
|
|
}
|
|
Runtime.evaluate: `obj.#getterOnly`
|
|
{
|
|
type : string
|
|
value : getterOnly
|
|
}
|
|
Checking private setter-only accessors
|
|
Runtime.evaluate: `obj.#setterOnly`
|
|
{
|
|
className : Error
|
|
description : Error: '#setterOnly' was defined without a getter at <anonymous>:1:1
|
|
objectId : <objectId>
|
|
subtype : error
|
|
type : object
|
|
}
|
|
Runtime.evaluate: `obj.#setterOnly = 1`
|
|
{
|
|
description : 1
|
|
type : number
|
|
value : 1
|
|
}
|
|
Runtime.evaluate: `obj.#setterOnly++`
|
|
{
|
|
className : Error
|
|
description : Error: '#setterOnly' was defined without a getter at <anonymous>:1:1
|
|
objectId : <objectId>
|
|
subtype : error
|
|
type : object
|
|
}
|
|
Runtime.evaluate: `obj.#setterOnly -= 3`
|
|
{
|
|
className : Error
|
|
description : Error: '#setterOnly' was defined without a getter at <anonymous>:1:1
|
|
objectId : <objectId>
|
|
subtype : error
|
|
type : object
|
|
}
|
|
Runtime.evaluate: `obj.#field`
|
|
{
|
|
type : string
|
|
value : setterOnlyCalled
|
|
}
|
|
Checking private accessors
|
|
Runtime.evaluate: `obj.#accessor`
|
|
{
|
|
type : string
|
|
value : setterOnlyCalled
|
|
}
|
|
Runtime.evaluate: `obj.#accessor = 1`
|
|
{
|
|
description : 1
|
|
type : number
|
|
value : 1
|
|
}
|
|
Runtime.evaluate: `obj.#field`
|
|
{
|
|
description : 1
|
|
type : number
|
|
value : 1
|
|
}
|
|
Runtime.evaluate: `obj.#accessor++`
|
|
{
|
|
description : 1
|
|
type : number
|
|
value : 1
|
|
}
|
|
Runtime.evaluate: `obj.#field`
|
|
{
|
|
description : 2
|
|
type : number
|
|
value : 2
|
|
}
|
|
Runtime.evaluate: `++obj.#accessor`
|
|
{
|
|
type : undefined
|
|
}
|
|
Runtime.evaluate: `obj.#field`
|
|
{
|
|
description : 3
|
|
type : number
|
|
value : 3
|
|
}
|
|
Runtime.evaluate: `obj.#accessor -= 3`
|
|
{
|
|
description : 0
|
|
type : number
|
|
value : 0
|
|
}
|
|
Runtime.evaluate: `obj.#field`
|
|
{
|
|
description : 0
|
|
type : number
|
|
value : 0
|
|
}
|
|
Checking private methods
|
|
Runtime.evaluate: `obj.#method`
|
|
{
|
|
className : Function
|
|
description : #method() { return "method"; }
|
|
objectId : <objectId>
|
|
type : function
|
|
}
|
|
Runtime.evaluate: `obj.#method = 1`
|
|
{
|
|
className : Error
|
|
description : Error: Private method '#method' is not writable at <anonymous>:1:13
|
|
objectId : <objectId>
|
|
subtype : error
|
|
type : object
|
|
}
|
|
Runtime.evaluate: `obj.#method++`
|
|
{
|
|
className : Error
|
|
description : Error: Private method '#method' is not writable at <anonymous>:1:12
|
|
objectId : <objectId>
|
|
subtype : error
|
|
type : object
|
|
}
|
|
Runtime.evaluate: `++obj.#method`
|
|
{
|
|
className : Error
|
|
description : Error: Private method '#method' is not writable at <anonymous>:1:7
|
|
objectId : <objectId>
|
|
subtype : error
|
|
type : object
|
|
}
|
|
Runtime.evaluate: `obj.#method -= 3`
|
|
{
|
|
className : Error
|
|
description : Error: Private method '#method' is not writable at <anonymous>:1:13
|
|
objectId : <objectId>
|
|
subtype : error
|
|
type : object
|
|
}
|