Tests how async promise chains behave when reaching the limit of stacks
Checks correctness of promise chains when limit hit
inspector.setMaxAsyncTaskStacks(3)
Run expression 'console.trace()' with async chain len: 3
{
    method : Runtime.consoleAPICalled
    params : {
        args : [
            [0] : {
                type : string
                value : console.trace
            }
        ]
        executionContextId : <executionContextId>
        stackTrace : {
            callFrames : [
                [0] : {
                    columnNumber : 67
                    functionName : Promise.resolve.then.then.then
                    lineNumber : 0
                    scriptId : <scriptId>
                    url : 
                }
            ]
            parent : {
                callFrames : [
                    [0] : {
                        columnNumber : 46
                        functionName : 
                        lineNumber : 0
                        scriptId : <scriptId>
                        url : 
                    }
                ]
            }
        }
        timestamp : <timestamp>
        type : trace
    }
}
inspector.setMaxAsyncTaskStacks(4)
Run expression 'console.trace()' with async chain len: 3
{
    method : Runtime.consoleAPICalled
    params : {
        args : [
            [0] : {
                type : string
                value : console.trace
            }
        ]
        executionContextId : <executionContextId>
        stackTrace : {
            callFrames : [
                [0] : {
                    columnNumber : 67
                    functionName : Promise.resolve.then.then.then
                    lineNumber : 0
                    scriptId : <scriptId>
                    url : 
                }
            ]
            parent : {
                callFrames : [
                    [0] : {
                        columnNumber : 46
                        functionName : 
                        lineNumber : 0
                        scriptId : <scriptId>
                        url : 
                    }
                ]
                description : Promise.resolve
            }
        }
        timestamp : <timestamp>
        type : trace
    }
}
inspector.setMaxAsyncTaskStacks(5)
Run expression 'console.trace()' with async chain len: 3
{
    method : Runtime.consoleAPICalled
    params : {
        args : [
            [0] : {
                type : string
                value : console.trace
            }
        ]
        executionContextId : <executionContextId>
        stackTrace : {
            callFrames : [
                [0] : {
                    columnNumber : 67
                    functionName : Promise.resolve.then.then.then
                    lineNumber : 0
                    scriptId : <scriptId>
                    url : 
                }
            ]
            parent : {
                callFrames : [
                    [0] : {
                        columnNumber : 46
                        functionName : 
                        lineNumber : 0
                        scriptId : <scriptId>
                        url : 
                    }
                ]
                description : Promise.resolve
            }
        }
        timestamp : <timestamp>
        type : trace
    }
}
inspector.setMaxAsyncTaskStacks(6)
Run expression 'console.trace()' with async chain len: 3
{
    method : Runtime.consoleAPICalled
    params : {
        args : [
            [0] : {
                type : string
                value : console.trace
            }
        ]
        executionContextId : <executionContextId>
        stackTrace : {
            callFrames : [
                [0] : {
                    columnNumber : 67
                    functionName : Promise.resolve.then.then.then
                    lineNumber : 0
                    scriptId : <scriptId>
                    url : 
                }
            ]
            parent : {
                callFrames : [
                    [0] : {
                        columnNumber : 46
                        functionName : 
                        lineNumber : 0
                        scriptId : <scriptId>
                        url : 
                    }
                ]
                description : Promise.resolve
            }
        }
        timestamp : <timestamp>
        type : trace
    }
}
inspector.setMaxAsyncTaskStacks(7)
Run expression 'console.trace()' with async chain len: 3
{
    method : Runtime.consoleAPICalled
    params : {
        args : [
            [0] : {
                type : string
                value : console.trace
            }
        ]
        executionContextId : <executionContextId>
        stackTrace : {
            callFrames : [
                [0] : {
                    columnNumber : 67
                    functionName : Promise.resolve.then.then.then
                    lineNumber : 0
                    scriptId : <scriptId>
                    url : 
                }
            ]
            parent : {
                callFrames : [
                    [0] : {
                        columnNumber : 46
                        functionName : 
                        lineNumber : 0
                        scriptId : <scriptId>
                        url : 
                    }
                ]
                description : Promise.resolve
            }
        }
        timestamp : <timestamp>
        type : trace
    }
}
inspector.setMaxAsyncTaskStacks(8)
Run expression 'console.trace()' with async chain len: 3
{
    method : Runtime.consoleAPICalled
    params : {
        args : [
            [0] : {
                type : string
                value : console.trace
            }
        ]
        executionContextId : <executionContextId>
        stackTrace : {
            callFrames : [
                [0] : {
                    columnNumber : 67
                    functionName : Promise.resolve.then.then.then
                    lineNumber : 0
                    scriptId : <scriptId>
                    url : 
                }
            ]
            parent : {
                callFrames : [
                    [0] : {
                        columnNumber : 46
                        functionName : 
                        lineNumber : 0
                        scriptId : <scriptId>
                        url : 
                    }
                ]
                description : Promise.resolve
            }
        }
        timestamp : <timestamp>
        type : trace
    }
}
