summaryrefslogtreecommitdiff
path: root/jstests/noPassthrough/shell_load_file.js
blob: bdba591694cb165a312b949866f866c37097bf42 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/**
 * Tests the exception handling behavior of the load() function across nested calls.
 */
(function() {
    "use strict";

    let isMain = true;

    if (TestData.hasOwnProperty("loadDepth")) {
        isMain = false;
        ++TestData.loadDepth;
    } else {
        TestData.loadDepth = 0;
        TestData.loadErrors = [];
    }

    if (TestData.loadDepth >= 3) {
        throw new Error("Intentionally thrown");
    }

    try {
        load("jstests/noPassthrough/shell_load_file.js");
    } catch (e) {
        TestData.loadErrors.push(e);

        if (!isMain) {
            throw e;
        }
    }

    assert(isMain,
           "only the root caller of load() needs to check the generated JavaScript exceptions");

    for (let i = 0; i < TestData.loadErrors.length; ++i) {
        const error = TestData.loadErrors[i];
        assert.eq("error loading js file: jstests/noPassthrough/shell_load_file.js", error.message);
        assert(
            /@jstests\/noPassthrough\/shell_load_file.js:/.test(error.stack) ||
                /@jstests\\noPassthrough\\shell_load_file.js:/.test(error.stack),
            () =>
                "JavaScript stacktrace from load() didn't include file paths (AKA stack frames): " +
                error.stack);
    }
})();