Tests that evaluation works when code generation from strings is not allowed.

Running test: testEvaluateNotPaused
{
    id : <messageId>
    result : {
        result : {
            type : string
            value : Global1
        }
    }
}

Running test: testEvaluatePaused
{
    id : <messageId>
    result : {
        result : {
            type : string
            value : Global2
        }
    }
}
{
    id : <messageId>
    result : {
        result : {
            type : string
            value : Local
        }
    }
}

Running test: testEvaluateUnsafeEval
{
    id : <messageId>
    result : {
        result : {
            description : 2
            type : number
            value : 2
        }
    }
}
{
    id : <messageId>
    result : {
        result : {
            description : 2
            type : number
            value : 2
        }
    }
}

Running test: testEvaluateUnsafeEvalDisableBypass
{
    id : <messageId>
    result : {
        exceptionDetails : {
            columnNumber : 0
            exception : {
                className : EvalError
                description : EvalError: Code generation from strings disallowed for this context     at <anonymous>:1:1
                objectId : <objectId>
                subtype : error
                type : object
            }
            exceptionId : <exceptionId>
            lineNumber : 0
            scriptId : <scriptId>
            stackTrace : {
                callFrames : [
                    [0] : {
                        columnNumber : 0
                        functionName : 
                        lineNumber : 0
                        scriptId : <scriptId>
                        url : 
                    }
                ]
            }
            text : Uncaught
        }
        result : {
            className : EvalError
            description : EvalError: Code generation from strings disallowed for this context     at <anonymous>:1:1
            objectId : <objectId>
            subtype : error
            type : object
        }
    }
}
{
    id : <messageId>
    result : {
        exceptionDetails : {
            columnNumber : 0
            exception : {
                className : EvalError
                description : EvalError: Code generation from strings disallowed for this context     at new Function (<anonymous>)     at <anonymous>:1:1
                objectId : <objectId>
                subtype : error
                type : object
            }
            exceptionId : <exceptionId>
            lineNumber : 0
            scriptId : <scriptId>
            stackTrace : {
                callFrames : [
                    [0] : {
                        columnNumber : 0
                        functionName : 
                        lineNumber : 0
                        scriptId : <scriptId>
                        url : 
                    }
                ]
            }
            text : Uncaught
        }
        result : {
            className : EvalError
            description : EvalError: Code generation from strings disallowed for this context     at new Function (<anonymous>)     at <anonymous>:1:1
            objectId : <objectId>
            subtype : error
            type : object
        }
    }
}

Running test: testCallFunctionOn
{
    id : <messageId>
    result : {
        result : {
            description : 3
            type : number
            value : 3
        }
    }
}
{
    id : <messageId>
    result : {
        result : {
            type : undefined
        }
    }
}
