<html>
<body>
Script execution test
<div id="b1"></div>
<div id="b2"></div>
<div id="b3"></div>
<script id="emptyscript"></script>
<script id="put_text_script">2+2</script>
<script>
function ok(b, msg) {
    return external.ok(b, msg);
}

var executed = false;
var extern_cnt = 0;
var exec_cnt;

function testWriteScript() {
    var len = document.getElementsByTagName('div').length;
    ok(len === 3, "init length = " + len);

    document.write("<script>"
        + "var len = document.getElementsByTagName('div').length;"
        + "ok(len === 3, 'unexpected length ' + len);"
        + "executed = true;"
        + "<" + "/script>");

    len = document.getElementsByTagName('script').length;
    ok(len === 4, "script col length = " + len);
    ok(executed, "written script not executed");
}

function testPutSrc() {
    var elem = document.getElementById("emptyscript");

    ok(extern_cnt === 0, "extern_cnt = " + extern_cnt + " expected 0");
    elem.src = "externscr.js";
    ok(extern_cnt === 0, "extern_cnt = " + extern_cnt + " expected 0");
}

function testPutText() {
    var elem = document.getElementById("put_text_script");

    exec_cnt = 0;
    elem.text = "exec_cnt++;";
    ok(exec_cnt === 1, "put_text_script exec_cnt " + exec_cnt);

    exec_cnt = 0;
    elem.text = "exec_cnt++;";
    ok(exec_cnt === 1, "put_text_script exec_cnt " + exec_cnt);
}

try {
    testWriteScript();
    testPutSrc();
    testPutText();
}catch(e) {
    ok(false, "Got an exception " + e.message);
}

function testPutSrc2() {
    var elem, elem2;

    elem = document.createElement("script");
    elem.src = "externscr.js";
    ok(extern_cnt === 1, "extern_cnt = " + extern_cnt + " expected 1");
    document.body.appendChild(elem);
    ok(extern_cnt === 2, "extern_cnt = " + extern_cnt + " expected 2");

    elem = document.createElement("script");
    document.body.appendChild(elem);
    ok(extern_cnt === 2, "extern_cnt = " + extern_cnt + " expected 2");
    elem.src = "externscr.js";
    ok(extern_cnt === 3, "extern_cnt = " + extern_cnt + " expected 3");

    elem2 = document.createElement("div");
    elem = document.createElement("script");
    elem.src = "externscr.js";
    ok(extern_cnt === 3, "extern_cnt = " + extern_cnt + " expected 3");
    elem2.appendChild(elem);
    document.body.appendChild(elem2);
    ok(extern_cnt === 4, "extern_cnt = " + extern_cnt + " expected 4");
}

function testPutText2() {
    var elem;

    elem = document.createElement("script");
    exec_cnt = 0;
    elem.text = "exec_cnt++;";
    ok(exec_cnt === 0, "script exec_cnt " + exec_cnt);

    document.body.appendChild(elem);
    ok(exec_cnt === 1, "script exec_cnt " + exec_cnt);
    exec_cnt = 0;
    elem.text = "exec_cnt++;";
    ok(exec_cnt === 1, "script exec_cnt " + exec_cnt);

    elem.src = "externscr.js";
    ok(extern_cnt === 5, "extern_cnt = " + extern_cnt + " expected 5");

    exec_cnt = 0;
    ok(extern_cnt === 5, "> extern_cnt = " + extern_cnt + " expected 5");
    elem.text = "exec_cnt++;"; /* forces evaluation, but src will be executed */
    ok(exec_cnt === 0, "script exec_cnt " + exec_cnt);
    ok(extern_cnt === 6, "< extern_cnt = " + extern_cnt + " expected 6");
    elem.text = "exec_cnt++;"; /* forces evaluation, but src will be executed */
    ok(exec_cnt === 0, "script exec_cnt " + exec_cnt);
    ok(extern_cnt === 7, "< extern_cnt = " + extern_cnt + " expected 6");

    elem = document.createElement("script");
    exec_cnt = 0;
    elem.text = "exec_cnt++;";
    ok(exec_cnt === 0, "script exec_cnt " + exec_cnt);
    elem.src = "externscr.js";
    ok(extern_cnt === 7, "extern_cnt = " + extern_cnt + " expected 7");

    document.body.appendChild(elem);
    ok(exec_cnt === 0, "script exec_cnt " + exec_cnt);
    ok(extern_cnt === 8, "extern_cnt = " + extern_cnt + " expected 8");
}

document.body.onload = function() {
    ok(extern_cnt === 1, "extern_cnt = " + extern_cnt);
    try {
        testPutSrc2();
        testPutText2();
    }catch(e) {
        ok(false, "got an exception " + e.message);
    }

    external.reportSuccess();
}
</script>
<script>
    ok(extern_cnt === 1, "extern_cnt = " + extern_cnt);
</script>
<div id="a1"></div>
<div id="a2"></div>
<div id="b3"></div>
</body>
</html>
