Tests that exercise Debugger.setVariableValue

Running test: testSetVariableValueMain
{
    id : <messageId>
    result : {
        result : {
            description : 5
            type : number
            value : 5
        }
    }
}
{
    id : <messageId>
    result : {
        result : {
            description : 10
            type : number
            value : 10
        }
    }
}
{
    id : <messageId>
    result : {
        result : {
            description : NaN
            type : number
            unserializableValue : NaN
        }
    }
}
{
    id : <messageId>
    result : {
        result : {
            type : boolean
            value : true
        }
    }
}
{
    id : <messageId>
    result : {
        result : {
            className : Object
            description : Object
            objectId : <objectId>
            type : object
        }
    }
}
{
    id : <messageId>
    result : {
        result : [
            [0] : {
                configurable : true
                enumerable : true
                isOwn : true
                name : a
                value : {
                    description : 3
                    type : number
                    value : 3
                }
                writable : true
            }
            [1] : {
                configurable : true
                enumerable : false
                isOwn : true
                name : __proto__
                value : {
                    className : Object
                    description : Object
                    objectId : <objectId>
                    type : object
                }
                writable : true
            }
        ]
    }
}
{
    id : <messageId>
    result : {
        result : {
            className : Array
            description : Array(3)
            objectId : <objectId>
            subtype : array
            type : object
        }
    }
}
{
    id : <messageId>
    result : {
        result : [
            [0] : {
                configurable : true
                enumerable : true
                isOwn : true
                name : 0
                value : {
                    type : string
                    value : 1
                }
                writable : true
            }
            [1] : {
                configurable : true
                enumerable : true
                isOwn : true
                name : 1
                value : {
                    type : string
                    value : 2
                }
                writable : true
            }
            [2] : {
                configurable : true
                enumerable : true
                isOwn : true
                name : 2
                value : {
                    type : string
                    value : 3
                }
                writable : true
            }
            [3] : {
                configurable : false
                enumerable : false
                isOwn : true
                name : length
                value : {
                    description : 3
                    type : number
                    value : 3
                }
                writable : true
            }
            [4] : {
                configurable : true
                enumerable : false
                isOwn : true
                name : __proto__
                value : {
                    className : Array
                    description : Array(0)
                    objectId : <objectId>
                    subtype : array
                    type : object
                }
                writable : true
            }
        ]
    }
}
{
    id : <messageId>
    result : {
        result : {
            className : Object
            description : Object
            objectId : <objectId>
            type : object
        }
    }
}
{
    id : <messageId>
    result : {
        result : [
            [0] : {
                configurable : true
                enumerable : true
                isOwn : true
                name : b
                value : {
                    description : 4
                    type : number
                    value : 4
                }
                writable : true
            }
            [1] : {
                configurable : true
                enumerable : false
                isOwn : true
                name : __proto__
                value : {
                    className : Object
                    description : Object
                    objectId : <objectId>
                    type : object
                }
                writable : true
            }
        ]
    }
}

Running test: testInvalidFrame
setVariableValue with invalid callFrameId
{
    error : {
        code : -32000
        message : Invalid call frame id
    }
    id : <messageId>
}
setVariableValue with invalid scopeNumber
{
    error : {
        code : -32602
        data : scopeNumber: integer value expected
        message : Invalid parameters
    }
    id : <messageId>
}
setVariableValue with invalid scopeNumber
{
    error : {
        code : -32000
        message : Could not find scope with given number
    }
    id : <messageId>
}
setVariableValue with invalid variableName
{
    error : {
        code : -32603
        message : Internal error
    }
    id : <messageId>
}

Running test: testNewValueErrors
setVariableValue with invalid unserializableValue
{
    error : {
        code : -32000
        message : Couldn't parse value object in call argument
    }
    id : <messageId>
}
setVariableValue with invalid objectId
{
    error : {
        code : -32602
        data : newValue.objectId: string value expected
        message : Invalid parameters
    }
    id : <messageId>
}