// Basic enterFrame hook tests.

var g = newGlobal();
var dbg = Debugger(g);
var type;
dbg.onEnterFrame = function (frame) {
    try {
        assertEq(frame instanceof Debugger.Frame, true);
        assertEq(frame.live, true);
        type = frame.type;
    } catch (exc) {
        type = "Exception thrown: " + exc;
    }
};

function test(f, expected) {
    type = undefined;
    f();
    assertEq(type, expected);
}

// eval triggers the hook
test(function () { g.eval("function h() { return 1; }"); }, "eval");

// function calls trigger it
test(function () { assertEq(g.h(), 1); }, "call");

// global scripts trigger it
test(function () { g.evaluate("var x = 5;"); assertEq(g.x, 5); }, "global");
