js/src/jit-test/tests/debug/Debugger-findScripts-12.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 // Debugger.prototype.findScripts can filter by global, url, and line number.
     3 // Two scripts, with different functions at the same line numbers.
     4 var url1 = scriptdir + 'Debugger-findScripts-12-script1';
     5 var url2 = scriptdir + 'Debugger-findScripts-12-script2';
     7 // Three globals: two with code, one with nothing.
     8 var g1 = newGlobal();
     9 g1.toSource = function () "[global g1]";
    10 g1.load(url1);
    11 g1.load(url2);
    12 var g2 = newGlobal();
    13 g2.toSource = function () "[global g2]";
    14 g2.load(url1);
    15 g2.load(url2);
    16 var g3 = newGlobal();
    18 var dbg = new Debugger(g1, g2, g3);
    20 function script(func) {
    21     var gw = dbg.addDebuggee(func.global);
    22     var script = gw.makeDebuggeeValue(func).script;
    23     script.toString = function ()
    24         "[Debugger.Script for " + func.name + " in " + uneval(func.global) + "]";
    25     return script;
    26 }
    28 // The function scripts we know of. There may be random eval scripts involved, but
    29 // we don't care about those.
    30 var allScripts = ([g1.f, g1.f(), g1.g, g1.h, g1.h(), g1.i,
    31                    g2.f, g2.f(), g2.g, g2.h, g2.h(), g2.i].map(script));
    33 // Search for scripts using |query|, expecting no members of allScripts
    34 // except those given in |expected| in the result. If |expected| is
    35 // omitted, expect no members of allScripts at all.
    36 function queryExpectOnly(query, expected) {
    37     print();
    38     print("queryExpectOnly(" + uneval(query) + ")");
    39     var scripts = dbg.findScripts(query);
    40     var present = allScripts.filter(function (s) { return scripts.indexOf(s) != -1; });
    41     if (expected) {
    42         expected = expected.map(script);
    43         expected.forEach(function (s) {
    44                              if (present.indexOf(s) == -1)
    45                                  assertEq(s + " not present", "is present");
    46                          });
    47         present.forEach(function (s) {
    48                              if (expected.indexOf(s) == -1)
    49                                  assertEq(s + " is present", "not present");
    50                          });
    51     } else {
    52         assertEq(present.length, 0);
    53     }
    54 }
    56 // We have twelve functions: two globals, each with two urls, each
    57 // defining three functions. Show that all the different combinations of
    58 // query parameters select what they should.
    60 // There are gaps in the pattern:
    61 // - You can only filter by line if you're also filtering by url.
    62 // - You can't ask for only the innermost scripts unless you're filtering by line.
    64 // Filtering by global, url, and line produces one function, or two
    65 // where they are nested.
    66 queryExpectOnly({ global:g1, url:url1, line:  6 }, [g1.f        ]);
    67 queryExpectOnly({ global:g1, url:url1, line:  8 }, [g1.f, g1.f()]);
    68 queryExpectOnly({ global:g1, url:url1, line: 15 }, [g1.g        ]);
    69 queryExpectOnly({ global:g1, url:url2, line:  6 }, [g1.h        ]);
    70 queryExpectOnly({ global:g1, url:url2, line:  8 }, [g1.h, g1.h()]);
    71 queryExpectOnly({ global:g1, url:url2, line: 15 }, [g1.i        ]);
    72 queryExpectOnly({ global:g2, url:url1, line:  6 }, [g2.f        ]);
    73 queryExpectOnly({ global:g2, url:url1, line:  8 }, [g2.f, g2.f()]);
    74 queryExpectOnly({ global:g2, url:url1, line: 15 }, [g2.g        ]);
    75 queryExpectOnly({ global:g2, url:url2, line:  6 }, [g2.h        ]);
    76 queryExpectOnly({ global:g2, url:url2, line:  8 }, [g2.h, g2.h()]);
    77 queryExpectOnly({ global:g2, url:url2, line: 15 }, [g2.i        ]); 
    79 // Filtering by global, url, and line, and requesting only the innermost
    80 // function at each point, should produce only one function.
    81 queryExpectOnly({ global:g1, url:url1, line:  6, innermost: true }, [g1.f  ]);
    82 queryExpectOnly({ global:g1, url:url1, line:  8, innermost: true }, [g1.f()]);
    83 queryExpectOnly({ global:g1, url:url1, line: 15, innermost: true }, [g1.g  ]);
    84 queryExpectOnly({ global:g1, url:url2, line:  6, innermost: true }, [g1.h  ]);
    85 queryExpectOnly({ global:g1, url:url2, line:  8, innermost: true }, [g1.h()]);
    86 queryExpectOnly({ global:g1, url:url2, line: 15, innermost: true }, [g1.i  ]);
    87 queryExpectOnly({ global:g2, url:url1, line:  6, innermost: true }, [g2.f  ]);
    88 queryExpectOnly({ global:g2, url:url1, line:  8, innermost: true }, [g2.f()]);
    89 queryExpectOnly({ global:g2, url:url1, line: 15, innermost: true }, [g2.g  ]);
    90 queryExpectOnly({ global:g2, url:url2, line:  6, innermost: true }, [g2.h  ]);
    91 queryExpectOnly({ global:g2, url:url2, line:  8, innermost: true }, [g2.h()]);
    92 queryExpectOnly({ global:g2, url:url2, line: 15, innermost: true }, [g2.i  ]); 
    94 // Filtering by url and global should produce sets of three scripts.
    95 queryExpectOnly({ global:g1, url:url1 }, [g1.f, g1.f(), g1.g]);
    96 queryExpectOnly({ global:g1, url:url2 }, [g1.h, g1.h(), g1.i]);
    97 queryExpectOnly({ global:g2, url:url1 }, [g2.f, g2.f(), g2.g]);
    98 queryExpectOnly({ global:g2, url:url2 }, [g2.h, g2.h(), g2.i]);
   100 // Filtering by url and line, innermost-only, should produce sets of two scripts,
   101 // or four where there are nested functions.
   102 queryExpectOnly({ url:url1, line: 6 }, [g1.f,         g2.f        ]);
   103 queryExpectOnly({ url:url1, line: 8 }, [g1.f, g1.f(), g2.f, g2.f()]);
   104 queryExpectOnly({ url:url1, line:15 }, [g1.g,         g2.g        ]);
   105 queryExpectOnly({ url:url2, line: 6 }, [g1.h,         g2.h        ]);
   106 queryExpectOnly({ url:url2, line: 8 }, [g1.h, g1.h(), g2.h, g2.h()]);
   107 queryExpectOnly({ url:url2, line:15 }, [g1.i,         g2.i        ]);
   109 // Filtering by url and line, and requesting only the innermost scripts,
   110 // should always produce pairs of scripts.
   111 queryExpectOnly({ url:url1, line: 6, innermost: true }, [g1.f,   g2.f  ]);
   112 queryExpectOnly({ url:url1, line: 8, innermost: true }, [g1.f(), g2.f()]);
   113 queryExpectOnly({ url:url1, line:15, innermost: true }, [g1.g,   g2.g  ]);
   114 queryExpectOnly({ url:url2, line: 6, innermost: true }, [g1.h,   g2.h  ]);
   115 queryExpectOnly({ url:url2, line: 8, innermost: true }, [g1.h(), g2.h()]);
   116 queryExpectOnly({ url:url2, line:15, innermost: true }, [g1.i,   g2.i  ]);
   118 // Filtering by global only should produce sets of six scripts.
   119 queryExpectOnly({ global:g1 }, [g1.f, g1.f(), g1.g, g1.h, g1.h(), g1.i]);
   120 queryExpectOnly({ global:g2 }, [g2.f, g2.f(), g2.g, g2.h, g2.h(), g2.i]);
   122 // Filtering by url should produce sets of six scripts.
   123 queryExpectOnly({ url:url1 }, [g1.f, g1.f(), g1.g, g2.f, g2.f(), g2.g]);
   124 queryExpectOnly({ url:url2 }, [g1.h, g1.h(), g1.i, g2.h, g2.h(), g2.i]);
   126 // Filtering by no axes should produce all twelve scripts.
   127 queryExpectOnly({}, [g1.f, g1.f(), g1.g, g1.h, g1.h(), g1.i,
   128                      g2.f, g2.f(), g2.g, g2.h, g2.h(), g2.i]);

mercurial