Check that while Runtime.getProperties call on proxy object no user defined trap will be executed.
Testing regular Proxy
{
    id : <messageId>
    result : {
        result : {
            className : Object
            description : Proxy
            objectId : <objectId>
            preview : {
                description : Proxy
                overflow : false
                properties : [
                    [0] : {
                        name : a
                        type : number
                        value : 1
                    }
                ]
                subtype : proxy
                type : object
            }
            subtype : proxy
            type : object
        }
    }
}
{
    id : <messageId>
    result : {
        internalProperties : [
            [0] : {
                name : [[Handler]]
                value : {
                    className : Object
                    description : Object
                    objectId : <objectId>
                    type : object
                }
            }
            [1] : {
                name : [[Target]]
                value : {
                    className : Object
                    description : Object
                    objectId : <objectId>
                    type : object
                }
            }
            [2] : {
                name : [[IsRevoked]]
                value : {
                    type : boolean
                    value : false
                }
            }
        ]
        result : [
        ]
    }
}
Testing revocable Proxy
{
    id : <messageId>
    result : {
        result : {
            className : Object
            description : Proxy
            objectId : <objectId>
            preview : {
                description : Proxy
                overflow : false
                properties : [
                    [0] : {
                        name : a
                        type : number
                        value : 1
                    }
                ]
                subtype : proxy
                type : object
            }
            subtype : proxy
            type : object
        }
    }
}
{
    id : <messageId>
    result : {
        internalProperties : [
            [0] : {
                name : [[Handler]]
                value : {
                    className : Object
                    description : Object
                    objectId : <objectId>
                    type : object
                }
            }
            [1] : {
                name : [[Target]]
                value : {
                    className : Object
                    description : Object
                    objectId : <objectId>
                    type : object
                }
            }
            [2] : {
                name : [[IsRevoked]]
                value : {
                    type : boolean
                    value : false
                }
            }
        ]
        result : [
        ]
    }
}
{
    id : <messageId>
    result : {
        result : {
            className : Object
            description : Proxy
            objectId : <objectId>
            preview : {
                description : Proxy
                overflow : false
                properties : [
                ]
                subtype : proxy
                type : object
            }
            subtype : proxy
            type : object
        }
    }
}
{
    id : <messageId>
    result : {
        internalProperties : [
            [0] : {
                name : [[Handler]]
                value : {
                    subtype : null
                    type : object
                    value : null
                }
            }
            [1] : {
                name : [[Target]]
                value : {
                    subtype : null
                    type : object
                    value : null
                }
            }
            [2] : {
                name : [[IsRevoked]]
                value : {
                    type : boolean
                    value : true
                }
            }
        ]
        result : [
        ]
    }
}
Checking counter
{
    id : <messageId>
    result : {
        result : {
            description : 0
            type : number
            value : 0
        }
    }
}
