test('when a non-sourcemapped script is skipped via regex, it can be unskipped', async () => {
            // Using this program, but run with sourcemaps disabled
            const testProjectRoot = path.join(DATA_ROOT, 'calls-between-sourcemapped-files');
            const sourceA = path.join(testProjectRoot, 'out/sourceA.js');
            const sourceB = path.join(testProjectRoot, 'out/sourceB.js');

            server = createServer({ root: testProjectRoot });
            server.listen(7890);

            const url = 'http://localhost:7890/index.html';

            // Skip the full B generated script via launch config
            const skipFiles = ['sourceB.js'];
            const bpLineA = 5;
            await dc.hitBreakpointUnverified({ url, sourceMaps: false, skipFiles, webRoot: testProjectRoot }, { path: sourceA, line: bpLineA });

            // Step in, verify B sources are skipped
            await dc.stepInRequest();
            await dc.assertStoppedLocation('step', { path: sourceA, line: 2 });
            await dc.send('toggleSkipFileStatus', { path: sourceB });

            // Continue back to A, step in, should land in B
            await dc.continueRequest();
            await dc.assertStoppedLocation('breakpoint', { path: sourceA, line: bpLineA });
            await dc.stepInRequest();
            await dc.assertStoppedLocation('step', { path: sourceB, line: 2 });
        });
Example #2
0
(async() => {
  let passed = 0, failed = 0;

  const server = createServer({ root: "./build/website" });
  server.listen();
  const port = server.server.address().port;

  const browser = await puppeteer.launch({
    args: ["--no-sandbox", "--disable-setuid-sandbox"],
    headless: !debug && !testdl
  });

  for (let i = 0; i < TESTS.length; i++) {
    const test = TESTS[i];
    if (await runTest(browser, port, test)) {
      passed++;
    } else {
      failed++;
    }
  }

  if (debug) {
    await new Promise((res) => process.stdin.once("data", res));
  }

  await browser.close();
  server.close();

  console.log(`DONE. passed: ${passed}, failed: ${failed}`);
  if (failed > 0) {
    process.exit(1);
  }
})();
        test('when generated script is skipped via regex, the source can be un-skipped', async () => {
            const testProjectRoot = path.join(DATA_ROOT, 'calls-between-merged-files');
            const sourceA = path.join(testProjectRoot, 'sourceA.ts');
            const sourceB2 = path.join(testProjectRoot, 'sourceB2.ts');

            server = createServer({ root: testProjectRoot });
            server.listen(7890);

            const url = 'http://localhost:7890/index.html';

            // Skip the full B generated script via launch config
            const bpLineA = 6;
            const skipFiles = ['b.js'];
            await dc.hitBreakpointUnverified({ url, skipFiles, webRoot: testProjectRoot }, { path: sourceA, line: bpLineA });

            // Step in, verify B sources are skipped
            await dc.stepInRequest();
            await dc.assertStoppedLocation('step', { path: sourceA, line: 2 });
            await dc.send('toggleSkipFileStatus', { path: sourceB2 });

            // Continue back to sourceA, step in, should skip B1 and land on B2
            await dc.continueRequest();
            await dc.assertStoppedLocation('breakpoint', { path: sourceA, line: bpLineA });
            await dc.stepInRequest();
            await dc.assertStoppedLocation('step', { path: sourceB2, line: 2 });
        });
        test('Column BP is hit on correct column', async () => {
            const testProjectRoot = path.join(DATA_ROOT, 'columns');
            const scriptPath = path.join(testProjectRoot, 'src/script.ts');

            server = createServer({ root: testProjectRoot });
            server.listen(7890);

            const url = 'http://localhost:7890/index.html';

            const bpLine = 4;
            const bpCol = 16;
            await dc.hitBreakpointUnverified({ url, webRoot: testProjectRoot }, { path: scriptPath, line: bpLine, column: bpCol });
        });
        test('Hits a single breakpoint in a file on load', async () => {
            const testProjectRoot = path.join(DATA_ROOT, 'breakOnLoad_javaScript');
            const scriptPath = path.join(testProjectRoot, 'src/script.js');

            server = createServer({ root: testProjectRoot });
            server.listen(7890);

            const url = 'http://localhost:7890/index.html';

            const bpLine = 3;
            const bpCol = 12;

            await dc.hitBreakpointUnverified({ url, webRoot: testProjectRoot }, { path: scriptPath, line: bpLine, column: bpCol });
        });
        test('Multiple column BPs are hit on correct columns', async () => {
            const testProjectRoot = path.join(DATA_ROOT, 'columns');
            const scriptPath = path.join(testProjectRoot, 'src/script.ts');

            server = createServer({ root: testProjectRoot });
            server.listen(7890);

            const url = 'http://localhost:7890/index.html';

            const bpLine = 4;
            const bpCol1 = 16;
            const bpCol2 = 24;
            await dc.hitBreakpointUnverified({ url, webRoot: testProjectRoot }, { path: scriptPath, line: bpLine, column: bpCol1 });
            await dc.setBreakpointsRequest({ source: { path: scriptPath }, breakpoints: [{ line: bpLine, column: bpCol2 }] });
            await dc.continueTo('breakpoint', { line: bpLine, column: bpCol2 });
        });
        test('Hits multiple breakpoints in a file on load', async () => {
            const testProjectRoot = path.join(DATA_ROOT, 'breakOnLoad_sourceMaps');
            const scriptPath = path.join(testProjectRoot, 'src/script.ts');

            server = createServer({ root: testProjectRoot });
            server.listen(7890);

            const url = 'http://localhost:7890/index.html';

            const bp1Line = 3;
            const bp1Col = 12;
            const bp2Line = 6;

            await dc.hitBreakpointUnverified({ url, webRoot: testProjectRoot }, { path: scriptPath, line: bp1Line, column: bp1Col });
            await dc.setBreakpointsRequest({ source: { path: scriptPath }, breakpoints: [{ line: bp2Line }] });
            await dc.continueTo('breakpoint', { line: bp2Line });
        });
        test('BP col is adjusted to correct col', async () => {
            const testProjectRoot = path.join(DATA_ROOT, 'columns');
            const scriptPath = path.join(testProjectRoot, 'src/script.ts');

            server = createServer({ root: testProjectRoot });
            server.listen(7890);

            const url = 'http://localhost:7890/index.html';

            const bpLine = 4;
            const bpCol1 = 19;
            const correctBpCol1 = 16;
            const expectedLocation = { path: scriptPath, line: bpLine, column: correctBpCol1 };
            await dc.hitBreakpointUnverified(
                { url, webRoot: testProjectRoot },
                { path: scriptPath, line: bpLine, column: bpCol1 },
                expectedLocation);
        });
        test('Hits multiple breakpoints in a file on load', async () => {
            const testProjectRoot = path.join(DATA_ROOT, 'breakOnLoad_webpack');
            const scriptPath = path.join(testProjectRoot, 'src/script.js');

            server = createServer({ root: testProjectRoot });
            server.listen(7890);

            const url = 'http://localhost:7890/dist/index.html';

            // For some reason, column numbers > don't work perfectly with webpack
            const bp1Line = 3;
            const bp1Col = 1;
            const bp2Line = 5;
            const bp2Col = 1;

            await dc.hitBreakpointUnverified({ url, webRoot: testProjectRoot }, { path: scriptPath, line: bp1Line , column: bp1Col});
            await dc.setBreakpointsRequest({ source: { path: scriptPath }, breakpoints: [{ line: bp2Line , column: bp2Col}] });
            await dc.continueTo('breakpoint', { line: bp2Line , column: bp2Col});
        });
        test('should stop on debugger statement in http://localhost', () => {
            const testProjectRoot = path.join(DATA_ROOT, 'intervalDebugger');
            const breakFile = path.join(testProjectRoot, 'src/app.ts');
            const DEBUGGER_LINE = 2;

            const server = createServer({ root: testProjectRoot });
            server.listen(7890);

            return Promise.all([
                dc.configurationSequence(),
                dc.launch({ url: 'http://localhost:7890', webRoot: testProjectRoot }),
                dc.assertStoppedLocation('debugger_statement', { path: breakFile, line: DEBUGGER_LINE } )
            ])
            .then(
                () => server.close(),
                e => {
                    server.close();
                    throw e;
                });
        });