var du = new Debugger();
if (typeof du.setupTraceLogger == "function") {

    // Try enabling.
    assertEq(du.setupTraceLogger({
        Scripts: true
    }), true);

    // No fail on re-enabling.
    assertEq(du.setupTraceLogger({
        Scripts: true
    }), true);

    // Try disabling.
    assertEq(du.setupTraceLogger({
        Scripts: false
    }), true);

    // No fail on re-disabling.
    assertEq(du.setupTraceLogger({
        Scripts: false
    }), true);

    // Throw exception if TraceLog item to report isn't found.
    var success = du.setupTraceLogger({
        Scripts: false,
        Test: true
    });
    assertEq(success, false);

    // SetupTraceLogger only enables individual items,
    // when all items can be toggled.
    du.startTraceLogger();
    var obj = du.drainTraceLogger();
    du.setupTraceLogger({
        Scripts: true,
        Test: true,
    });
    assertEq(du.drainTraceLogger().length, 0);
    du.endTraceLogger();

    // Expects an object as first argument.
    succes = du.setupTraceLogger("blaat");
    assertEq(succes, false);

    // Expects an object as first argument.
    succes = du.setupTraceLogger("blaat");
    assertEq(succes, false);

    // Expects an object as first argument.
    failed = false;
    try {
        du.setupTraceLogger();
    } catch (e) {
        failed = true;
    }
    assertEq(failed, true);

    // No problem with added to many arguments.
    succes = du.setupTraceLogger({}, "test");
    assertEq(succes, true);
}

var du2 = new Debugger();
if (typeof du2.setupTraceLoggerForTraces == "function") {
    du2.setupTraceLoggerForTraces({});
    du2.setupTraceLoggerForTraces("test");
    du2.setupTraceLoggerForTraces({}, "test");
}