Tests that Runtime.callFunctionOn works with awaitPromise flag.

Running test: prepareTestSuite

Running test: testArguments
{
    id : <messageId>
    result : {
        result : {
            type : string
            value : undefined|NaN|[object Object]|[object Object]
        }
    }
}

Running test: testComplexArguments
{
    id : <messageId>
    result : {
        result : {
            type : string
            value : bar
        }
    }
}

Running test: testSyntaxErrorInFunction
{
    id : <messageId>
    result : {
        exceptionDetails : {
            columnNumber : 2
            exception : {
                className : SyntaxError
                description : SyntaxError: Unexpected token }
                objectId : <objectId>
                subtype : error
                type : object
            }
            exceptionId : <exceptionId>
            lineNumber : 1
            scriptId : <scriptId>
            text : Uncaught
        }
        result : {
            className : SyntaxError
            description : SyntaxError: Unexpected token }
            objectId : <objectId>
            subtype : error
            type : object
        }
    }
}

Running test: testExceptionInFunctionExpression
{
    id : <messageId>
    result : {
        exceptionDetails : {
            columnNumber : 15
            exception : {
                className : Error
                description : Error     at <anonymous>:1:22     at <anonymous>:1:36
                objectId : <objectId>
                subtype : error
                type : object
            }
            exceptionId : <exceptionId>
            lineNumber : 0
            scriptId : <scriptId>
            stackTrace : {
                callFrames : [
                    [0] : {
                        columnNumber : 21
                        functionName : 
                        lineNumber : 0
                        scriptId : <scriptId>
                        url : 
                    }
                    [1] : {
                        columnNumber : 35
                        functionName : 
                        lineNumber : 0
                        scriptId : <scriptId>
                        url : 
                    }
                ]
            }
            text : Uncaught
        }
        result : {
            className : Error
            description : Error     at <anonymous>:1:22     at <anonymous>:1:36
            objectId : <objectId>
            subtype : error
            type : object
        }
    }
}

Running test: testFunctionReturnNotPromise
{
    id : <messageId>
    result : {
        result : {
            description : 239
            type : number
            value : 239
        }
    }
}

Running test: testFunctionReturnResolvedPromiseReturnByValue
{
    id : <messageId>
    result : {
        result : {
            type : object
            value : {
                a : 3
            }
        }
    }
}

Running test: testFunctionReturnResolvedPromiseWithPreview
{
    id : <messageId>
    result : {
        result : {
            className : Object
            description : Object
            objectId : <objectId>
            preview : {
                description : Object
                overflow : false
                properties : [
                    [0] : {
                        name : a
                        type : number
                        value : 3
                    }
                ]
                type : object
            }
            type : object
        }
    }
}

Running test: testFunctionReturnRejectedPromise
{
    id : <messageId>
    result : {
        exceptionDetails : {
            columnNumber : 0
            exception : {
                type : object
                value : {
                    a : 3
                }
            }
            exceptionId : <exceptionId>
            lineNumber : 0
            text : Uncaught (in promise)
        }
        result : {
            type : object
            value : {
                a : 3
            }
        }
    }
}

Running test: testEvaluateOnExecutionContext
{
    id : <messageId>
    result : {
        result : {
            description : 70
            type : number
            value : 70
        }
    }
}

Running test: testPassingBothObjectIdAndExecutionContextId
{
    error : {
        code : -32000
        message : ObjectId must not be specified together with executionContextId
    }
    id : <messageId>
}
